📄 h20000419-31.htm
字号:
<html><head><script language="JavaScript"> function reset(){ for ( var i=0; i < document.Form1.elements.length; i++ ) { document.Form1.elements[i].options[0].selected=true }}function going(url){ parent.location=url; reset();}</script><style><!--A:link {text-decoration: none; color: #000000; font-family: 宋体}A:visited {text-decoration: none; color: #000000; font-family: 宋体}A:active {text-decoration: none; font-family: 宋体}A:hover {text-decoration: underline:#ffffff; color: #ff0000}body,table {font-size: 9pt; font-family: 宋体}.H1 {font-size: 9pt ; line-height:9pt; align=center}.ourfont {font-size: 9pt ; line-height:9pt; }.ourfont1 {font-size: 9pt ; line-height:9pt; }--></style><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>Delphi 4中开发数据库控件的方法 </title></head><body topmargin="0" leftmargin="0"><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody> <tr> <td><p class="content4"><span class="font"><img border="0" height="3" src="../../soft/pix.gif" width="700"></span></td> </tr></tbody></table></center></div><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody> <tr> <td bgColor="#3399ff" width="658"><p class="ourfont"><span class="font"> </span><a style="text-decoration: none; color: rgb(255,255,255)" href="../os/H00705-2.htm">操作系统</a><font color="#FFFFFF"><span class="font"><span> |</span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../image/H00705-14.htm">图像处理</a><font color="#FFFFFF"><span>|<span class="font"> </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../autoCAD/H00705-19.htm">辅助设计</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../data/H00705-18.htm">数 据 库</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="H00706-1.htm">高级编程</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../netuse/H00705-20.htm">网络应用</a><font color="#FFFFFF"><span><span class="font"> | </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../webpage/H00705-21.htm">网页制作</a><font color="#FFFFFF"><span><span class="font"> |</span></span></font> <a style="color: rgb(255,255,255); text-decoration: none" href="../technic/H00706-3.htm">技术交流 </a><a style="color: rgb(255,255,255); text-decoration: none" href="http://202.100.13.77/clslyb/default.asp?clsid=jiaoc"><font color="#FFFFFF"><strong>过客留言</strong></font></a></td> <td bgColor="#3399ff" width="32"><p align="center" class="ourfont"><a href="mailto:net@163.sn.cn"><img src="../../soft/email.gif" alt="email.gif (493 字节)" border="0" WIDTH="20" HEIGHT="19"></a></td> </tr></tbody></table></center></div><div align="center"><center><table border="1" cellSpacing="1" width="700" bordercolor="#3399FF"><tbody> <tr> <td align="left" bgColor="#FFFFFF" vAlign="top" width="700" bordercolor="#0000FF" bordercolorlight="#0000FF" bordercolordark="#0000FF"><p class="ourfont"> </p> <p align="center">Delphi 4中开发数据库控件的方法 </p> <p> Delphi作为一种目前十分流行的数据库开发语言,在数据库开发领域有着十分重要的地位,它不仅提供了可视化的开发环境,使得开发变得相对容易;而且还是一种面向对象的语言, 使得程序员能够充分利用面向对象编程的种种优势——如封装、继承等等,从而大大减轻了开发的难度和工作量。下面,我们就谈一谈利用面向对象的特性来开发数据库控件的方法。<br> Delphi本身提供了一些数据库控件,如DBGrid、Table等,它们给开发带来了很多方便。下面我们来以一个能够显示数据表中的所有字段的控件为例来说明如何用Delphi来进行控件的编程。<br> 首先要为控件选择一个合适的父类。Windows的一个好处就在于它将许多操作标准化了,通过这些标准的操作,使得学习和使用都有章可循,用户就很容易融会贯通地掌握整个系统。在Delphi中提供了许多控件,这些控件生成的应用程序足以满足Windows编程的要求。而一些新的控件也可以在此基础上产生。它一方面继承了一部分控件标准的操作,另一方面也在程序中加入一些代码来实现特定的功能,这样用户使用起来不会觉得突兀,也简化了程序的开发。根据我们的目标可以看出,利用“下拉框”控件作为新控件的父类比较合适。因为它提供了下拉框中的所有标准操作,这就可以大大减少我们的编程量。 然后就是为特定的功能编写代码。我们应该想到,如果一个下拉框能够显示一个数据库中的所有字段,那么它一定有一个属性能够与数据库相连。我们将这个属性定名为DataSource,并将这一属性添加到控件中。添加的方法是,首先在Private段中加入如下代码:<br> FDataLink:TFieldDataLink;<br> function GetDataSource:TDataSource;<br> Procedure SetDataSource( Value:TDataSource);<br> 其中TfieldDataLink是一个十分重要的类,我们之所以能够很容易地进行数据库控件的开发全是拜它之赐。它有一些十分有用的属性,如:DataSource,利用这个属性,我们就能很容易地指定新控件的DataSource属性。<br> 第三步就是为控件的功能编写代码。可以想到,如果我们想要在拉下下拉框时显示数据库中的所有字段,就要在它的DropDown事件中加入代码来将所有的字段加入到下拉框的下拉区域中。这应该分两步走,第一就是要取得指定数据库的所有字段,第二就是将这些字段以字符串的格式加入到下拉框中(而拉下时显示所有字段的功能则由下拉框控件自己完成)。在取得数据库的字段时,用到了我们上面提到的TfieldDataLink类,下面的代码就可以获得指定数据库的字段数目:<br> j:=0;<br> j:=FDataLink.DataSource.DataSet .FieldCount ;//取得数据库中的所有字段的名字<br> i:=0;<br> 然后再用下面的代码将这些字段的名字加入到下拉框的items属性中,值得注意的是在每次拉下这个下拉框时都要将items属性清空,否则这个下拉框将每次都会因加入重复的内容而变得越来越长,并且一次选择可以选定许多项。使得控件看起来有点怪。<br> items.Clear ; //清空items属性<br> repeat //循环操作将字段加入下拉框中。<br> items.Add (FDataLink.DataSet.Fields[i].FieldName ); //将字段名加入到下拉框中。<br> i:=I+1;<br> until i>j-1; //直到所有的字段加入完为止<br> 第四步,就是将以上代码加入到Delphi的控件编辑窗口中去,点击Delphi的“Component/New Component”菜单,系统出现一个对话框,将对话框如图1所示填写:<br> 填写完毕点击“OK”按钮,就可以创建一个文件,将上面提供的代码加入到文件的适当位置,就可以完成这个控件的编写。图2是带有这个控件的程序的例子:<br> 可以想见,这个控件有着十分广泛的功能,例如,我们能够利用它设置指定字段的值来运行查询,也可以返回数据库中指定字段的数据类型、长度等信息,给我们的编程提供了极大的方便。<br> 但是也应该看到,这个控件也有一些缺点,那就是它只能显示字段的名称,一般的数据库中字段的名称都是英文的,这给中文版的应用软件带来不便,下面我们就用FdataLink的另一个属性来显示中文化的字段。这个属性就是DisplayName,它所指定的是数据库字段的显示名称,而这个名称我们可以在设计时将其汉化,这样在应用程序中显示出来的就是有意义的中文了。<br> 下面我们将上面提供的一段代码作如下修改:<br> j:=0;<br> j:=FDataLink.DataSource.DataSet .FieldCount;<br> i:=0;<br> repeat<br> items.Add (FDataLink.DataSet.Fields[I].DisplayName );<br> //在items属性中加入DisplayName的值<br> i:=I+1;<br> until i>j-1;<br> 另外,还要加入下面一段代码,来判断显示的DisplayName和哪个FieldName<br> 相对应。<br> function TListBox1.GetField:string;<br> var<br> i,j:integer;<br> begin<br> j:=FDataLink.DataSource.DataSet .FieldCount ;<br> for i :=0 to j-1 do<br> begin<br> if FDataLink.DataSource.DataSet.Fields[i].Displayname=text then<br> begin<br> Result:=FDataLink.DataSource.DataSet.Fields[i].FieldName;<br> exit;<br> end;<br> end;<br> end;<br> 这样,当选择了一个中文化的字段显示名称时,就将返回它的真正的字段名。这下用起来就更方便了,图3就是我们将中文字段显示在下拉框中的例子。<br> 程序中的字段以中文显示能够给用户带来很大的方便。最后,下面附上这段程序的完整代码,谨供参考。<br> unit DBFieldComboBox;<br> interface<br> uses<br> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br> StdCtrls,db,dbctrls;<br> type<br> TDBFieldComboBox = class(TComboBox)<br> private<br> FDataLink:TFieldDataLink;<br> function GetDataSource:TDataSource;<br> function TListBox1.GetField:string;<br> Procedure SetDataSource( Value:TDataSource);<br> procedure StartDrag(Sender: TObject; var DragObject: TDragObject);<br> procedure DropDown(Sender : TObject);<br> { Private declarations }<br> protected<br> { Protected declarations }<br> public<br> constructor create(AOwner:TComponent);override;<br> destructor Destroy;override;<br> { Public declarations }<br> published<br> property DataSource :TDataSource read GetDataSource write SetDataSource;<br> property text;<br> { Published declarations }<br> end;<br> procedure Register;<br> implementation<br> procedure Register;<br> begin<br> RegisterComponents(`Samples`, [TDBFieldComboBox]);<br> end;<br> constructor TDBFieldComboBox.create(AOwner:TComponent);<br> var i,j:integer;<br> begin<br> inherited Create(AOwner);<br> FDataLink:=TFieldDataLink.Create ;<br> ondropdown:=dropdown;<br> text:=``;<br> end;<br> destructor TDBFieldComboBox.Destroy;<br> begin<br> FDataLink.Free ;<br> inherited Destroy;<br> end;<br> function TListBox1.GetField:string;<br> var<br> i,j:integer;<br> begin<br> j:=FDataLink.DataSource.DataSet .FieldCount ;<br> for i :=0 to j-1 do<br> begin<br> if FDataLink.DataSource.DataSet.Fields[i].Displayname=text then<br> begin<br> Result:=FDataLink.DataSource.DataSet.Fields[i].FieldName;<br> exit;<br> end;<br> end;<br> end;<br> procedure TDBFieldComboBox.SetDataSource ( Value:TDataSource);<br> begin<br> FDataLink.DataSource :=value;<br> end;<br> function TDBFieldComboBox.GetDataSource :TDataSource;<br> begin<br> Result:=FDataLink.DataSource ;<br> end;<br> procedure TDBFieldComboBox.StartDrag(Sender: TObject; var DragObject: TDragObject);<br> begin<br> end;<br> procedure TDBFieldComboBox.DropDown(Sender: TObject);<br> var<br> i,j:integer;<br> begin<br> j:=0;<br> j:=FDataLink.DataSource.DataSet .FieldCount;<br> i:=0;<br> repeat<br> items.Add (FDataLink.DataSet.Fields[i].DisplayName );//.FieldName);<br> i:=I+1;<br> until i>j-1;<br> end;<br> end. </td> </tr></tbody></table></center></div><hr align="center" SIZE="1" width="700"><p align="center" class="ourfont"><span><span><font color="#000000"> <a style="color: rgb(0,0,0); text-decoration: none" href="../../soft/network/index.htm">互联网络</font><font color="#FFFFFF"> </font></a><font color="#000000">|</span></span><a href="../../soft/system/index.htm" style="color: rgb(0,0,0); text-decoration: none">系统工具</a><span>|<span> <a href="../../soft/tools/index.htm" style="color: rgb(0,0,0); text-decoration: none">实用工具</a> | <a href="../../soft/multimedia/index.htm" style="color: rgb(0,0,0); text-decoration: none">媒体工具</a> | <a href="../../soft/image/index.htm" style="color: rgb(0,0,0); text-decoration: none">图形图像</a> | <a href="../../soft/game/index.htm" style="color: rgb(0,0,0); text-decoration: none">游戏娱乐</a> | </span><a href="../../soft/usesoft/index.htm" style="color: rgb(0,0,0); text-decoration: none">软件<span>使用</a></font><font color="#FFFFFF"> |</font> </span></span></p><hr align="center" SIZE="1" width="700"><font color="#FFE8BB"><p align="center" class="ourfont"></font><font color="#000000"><span><span>© Copyright 2000 </span></span>陕西公用计算机互联网信息中心<span><span> 版权所有 </font></p></span></span><p align="center" class="ourfont"><font color="#000000"><span><span>本站制作维护by <a style="color: rgb(0,0,0)" href="mailto:haiyuan@163.sn.cn">HAIYUAN</a></span></span></font></p><p align="center" class="ourfont"><font color="#000000"><span><span>电话:(029)8371051 8371055 8371049 联系信箱:<a href="mailto:net@163.sn.cn">net@163.sn.cn</a></span></span></font></p></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -