任何系统都离不开数据处理,数据处理的基础就是数据库设计与应用技术。在IntraWeb中,设计人员对数据库的控制非常简单,使用IntraWeb进行数据库开发,就如同开发传统的Delphi数据库应用程序一样简单和快速,Delphi程序员所熟知的BDE、IBExpress、ADO、dbExpress以及居于其他技术的数据集均可以使用。只要使用它提供的数据处理组件就可以在我们的动态网站中设计出非常好的效果。在这一讲中将结合在线教学网站中的一个用户登录数据库和一个在线考勤数据库来说明数据库设计和使用基本过程。使用的数据库采用Microsoft Access 数据库类型,用ADO数据引擎实现与数据库的连接。
ADO即Microsoft ActiveX Data Objects ,能够编写通过 OLE DB 提供者对在数据库服务器中的数据进行访问和操作的应用程序。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。ADO 支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。它是一组优化的访问数据库的专用对象集,它为中小型企业应用提供了完整的数据库访问和解决方案,它作用在服务器端,提供含有数据库信息的主页内容,通过执行SQL命令,让用户在浏览器画面中输入、更新和删除站点数据库的信息。ADO是创建动态网站常用的后台数据库,在Dlephi中早就将MS的ADO技术嵌入到数据库设计和应用中,并封装了ADO的Connection、Recordset和Command三个对象功能,简化利用ADO操作和控制数据库的过程和技术。
网站中所使用的数据库是最为常见的MicroSoft Office Access 2003创建的Mydatabase.mdb,其中包含各种数据表单,存储在Web 应用的Data目录下。定义好的数据表需要进行连接操作,实现连接是通过TADOtable的ConnectionString项,激活数据库引擎向导,如图1所示,选择其中数据链接属性中的Microsoft Jet 4.0 OLE DB Provider作为数据库连接驱动。在数据库浏览选择环节选择所创建的Access 数据库Mydatabase.mdb,并用测试连接按钮进行测试连接,如图2所示。
在图2中看到的数据库名称是一个绝对路径,实际应用中它将网站的一些资源限制在一个相对固定的位置,缺乏灵活性,给数据库的查询与检索带来不便,为了处理这个问题,将ADO的数据引擎启动、数据库的路径和数据库名称等都可以用代码的方式来控制,在需要的地方用程序来实现,使Web应用更具动态功能。

一、数据库设计
主要介绍表格结构。
用户注册信息资料的表格结构如表1所示。
二、Web数据库的页面设计
关于如何创建页面的方法在前面的讲座中已经有了介绍,采用同样的方法新建一个名为f_iwRegistry的Application Form,在上面放置12个TIWlabel控件、10个TIWEdit控件、一个TIWComboBox控件、四个TIWButton控件、一个TIWDBImage 控件和一个TIWDBfile控件,以及数据库的一个TDataSource控件、一个TConnection控件和一个TADOTable控件。各控件的详细设置如表3所示,各控件及调整后的布局样式如图3所示。


图3 用户注册页面的设计效果
三、在线考勤页面设计
在线考勤所创建的页面窗口文件为f_IWAttendance,单元文件为u_Attendance。按照功能要求该页面主要为教师在课堂进行在线考勤,并显示出所有学生的所有注册的基本信息和照片等。同样涉及不少的控件,但有的控件属性设置同前面讲过的方法一样,这些一般的控件因篇幅所限,就不一一列举了。仅将几个主要的重要属性列在表4中。设计界面如图4所示。

图4 在线考勤页面设计
四、数据显示
通过上述例子可以看出,IntraWeb用来设计Web数据库的应用非常简单,确实与我们开发普通的数据库应用方式基本一样。但是要注意,在所有的Web应用中,传递数据量过大将会造成网络负担过重和用户页面下载速度过慢,为了避免出现这种情况,就需要限制客户端下载的量。那么,在我们网站设计中又该如何结合IntraWeb的特点改善这些必要工作呢?实际上,只有部分数据对用户有用,不需要将所有数据一次全部在客户端下载,网络应用程序效率低下有一部分原因就是由于在数据库服务器上读取过多的数据而浪费了太多的时间。因此,应该采取相应的措施,尽可能提高Web应用程序的效率。依据经验我们可以从下列两个方面来改进和提高效率:
1.分页显示
很多的网络数据应用都是分页显示的,如Baidu或者Google的搜索引擎。在IntraWeb中,同样可以使用分页显示。方法是在使用TIWDgrid控件来显示数据库信息时,先将IWDGrid.fromstart设为Fasle,不允许每次从首记录读取数据;再将IWDBGrid.rowlimit设为每页显示的记录条数限制在一定的数目内,比如20条记录;最后在窗口添加“前一页”、“下一页”两个超链接按钮或是标签,并做相应处理。以下一按钮事件为例:
Procedure TIWform1.IWLinkpreClick(Sender: TObject);
Begin
If not UserSession.Tabel1.Bof then
UserSession.Table.MoveBy(-IWDBGrid1.RowLimit)
Else
WebApplication.Showmessage(‘已经到了第一页,不能再移动了…’);
End
Procedure TIWform1.IWLinkNxtClick(Sender: TObject);
Begin
If not UserSession.Tabel1.Eof then
UserSession.Table.MoveBy(IWDBGrid1.RowLimit)
Else
WebApplication.Showmessage(‘已经到了最后一页,不能再移动了…’);
End
2.条件显示
这个问题较好理解,与网络搜索引擎的手法一样,用户在页面输入读取数据的条件,然后系统根据条件从数据服务器上读取数据,再将结果下载到客户端。方法也很简单,在在线教学网站设计中对于Table查询采用Firter参数来实现用户的条件过滤,而Query查询则采用SQL 结构化查询语言的处理方式来完成,与普通应用的条件查询无异。
五、代码设计
1.用户登录部分
也许大家还有印象,在登录窗口中有一个“用户注册”按钮一直还没有添加代码,用户注册页面设计好后,下面就可以添加代码了。
“用户注册”按钮事件代码如下:
procedure TF_IWLogin.IWButton2Click(Sender: TObject);
|