关于超想
本站导航
邮件列表
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> 数据库-SQL ->详细
相关内容  
 
 
在Delphi程序中应用IE浏览器控件
 
【新品推荐】

  详细内容
 

Delphi中开发数据库控件的方法
作者: 评价: 上站日期: 2002-01-19
内容说明:
来源:


 
  Delphi作为一种目前十分流行的数据库开发语言,在数据库开发领域有着十分重要的地位,它不仅提供了可视化的开发环境,使得开发变得相对容易;而且还是一种面向对象的语言, 使得程序员能够充分利用面向对象编程的种种优势——如封装、继承等等,从而大大减轻了开发的难度和工作量。下面,我们就谈一谈利用面向对象的特性来开发数据库控件方法。

  Delphi本身提供了一些数据库控件,如DBGrid、Table等,它们给开发带来了很多方便。下面我们来以一个能够显示数据表中的所有字段的控件为例来说明如何用Delphi来进行控件的编程。

  首先要为控件选择一个合适的父类。Windows的一个好处就在于它将许多操作标准化了,通过这些标准的操作,使得学习和使用都有章可循,用户就很容易地能够融会贯通地掌握整个系统。在Delphi中提供了许多控件,这些控件来生成应用程序足以满足Windows编程的要求。而一些新的控件也可以在此基础上产生。它一方面继承了一部分控件的标准的操作,另一方面也在程序中加入一些代码来实现特定的功能,这样用户使用起来不会觉得突兀,也简化了程序的开发。根据我们的目标可以看出,利用“下拉框”控件作为新控件的父类比较合适。因为它提供了下拉中的所有标准操作,这就可以大大减少我们的编程量。

  然后就是为特定的功能编写代码。我们应该想到,如果一个下拉框能够显示一个数据库中的所有字段,那么它一定有一个属性能够与数据库相连。我们将这个属性定名为DataSource,并将这一属性添加到控件中。添加的方法是,首先在Private段中加入如下代码:

   FDataLink:TFieldDataLink;

   function GetDataSource:TDataSource;

   Procedure SetDataSource( Value:TDataSource);

  其中TfieldDataLink是一个十分重要的类,我们之所以能够很容易地进行数据库的控件的开发全是拜它之赐。它有一些十分有用的属性,如:DataSource,利用这个属性,我们就能很容易地指定新控件的DataSource属性。

  第三步就是为控件的功能编写代码。可以想到,如果我们想要在拉下下拉框时显示数据库中的所有字段,就要在它的DropDown事件中加入代码来将所有的字段加入到下拉框的下拉区域中。这应该分两步走,第一就是要取得指定数据库的所有字段,第二就是将这些字段以字符串的格式加入到下拉框中。(而拉下时显示所有字段的功能则由下拉框控件自己完成)在取得数据库的字段时,用到了我们上面提到的TfieldDataLink类,下面的代码就可以获得指定数据库的字段数目:

   j:=0;

   j:=FDataLink.DataSource.DataSet .FieldCount ;//取得数据库中的所有字段的名字

   i:=0;

  然后再用下面的代码将这些字段的名字加入到下拉框的items属性中,值得注意的是在每次拉下这个下拉框时都要将items属性清空,否则这个下拉框将每次都会因加入重复的内容而变得越来越长,并且一次选择可以选定许多项。使得控件看起来有点怪。

  items.Clear ; //清空items属性

  repeat //循环操作将字段加入下拉框中。

   items.Add (FDataLink.DataSet.Fields[i].FieldName ); //将字段名加入到下拉框中。

   i:=I+1;

  until i〉j-1; //直到所有的字段加入完为止

  第四步,就是将以上代码加入到Delphi的控件编辑窗口中去,点击Delphi的“Component/New Component”菜单,系统出现一个对话框,将对话框如图 1 所示填写:


  图 1 创建新控件时的对话框

  填写完毕点击“OK”按钮,就可以创建一个文件,将上面提供的代码加入到文件的适当位置,就可以完成这个控件的编写。图2 是带有这个控件的程序的例子:


  图 2 能够显示数据库字段的程序

  可以想见,这个控件有着十分广泛的功能,例如,我们能够利用它设置指定字段的值来运行查询,也可以返回数据库中指定字段的数据类型、长度等信息,给我们的编程提供了极大的方便。

  但是也应该看到,这个控件也有一些缺点,那就是它只能显示字段的名称,一般的数据库中字段的名称都是英文的,这给中文版的应用软件带来不便,下面我们就用FdataLink的另一个属性来显示中文化的字段。这个属性就是DisplayName,它所指定的是数据库字段的显示名称,而这个名称我们可以在设计时将其汉化,这样在应用程序中显示出来的就是有意义的中文了。

  下面我们将上面提供的一段代码作如下修改:

   j:=0;

   j:=FDataLink.DataSource.DataSet .FieldCount ;

   i:=0;

  repeat

   items.Add (FDataLink.DataSet.Fields[I].DisplayName );

  //在items属性中加入DisplayName的值

   i:=I+1;

  until i〉j-1;

  另外,还要加入下面一段代码,来判断显示的DisplayName和哪个FieldName相对应。

  function TListBox1.GetField:string;

  var

   i,j:integer;

  begin

   j:=FDataLink.DataSource.DataSet .FieldCount ;

   for i :=0 to j-1 do

   begin

   if FDataLink.DataSource.DataSet.Fields[i].Displayname=text then

   begin

   Result:=FDataLink.DataSource.DataSet.Fields[i].FieldName;

   exit;

   end;

   end;

  end;

  这样,当选择了一个中文化的字段显示名称时,就将返回它的真正的字段名。这下就更用起来就更方便了

  图3就是我们将中文字段显示在下拉框中的例子。


  图3 一个能够以中文显示数据库字段的例子

  程序中的字段以中文显示能够给用户带来很大的方便。最后,下面附上这段程序的完整代码,谨供参考,要说明的一点是,程序的每一行都不要随意删除,以防止影响正常使用。

  unit DBFieldComboBox;

  interface

  uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls,db,dbctrls;

  type

  TDBFieldComboBox = class(TComboBox)

  private

  FDataLink:TFieldDataLink;

   function GetDataSource:TDataSource;

   function TListBox1.GetField:string;

   Procedure SetDataSource( Value:TDataSource);

   procedure StartDrag(Sender: TObject; var DragObject: TDragObject);

   procedure DropDown(Sender : TObject);

  { Private declarations }

  protected

  { Protected declarations }

  public

  constructor create(AOwner:TComponent);override;

  destructor Destroy;override;

  { Public declarations }

  published

  property DataSource :TDataSource read GetDataSource write SetDataSource;

  property text;

  { Published declarations }

  end;

  procedure Register;

  implementation

  procedure Register;

  begin

  RegisterComponents('Samples', [TDBFieldComboBox]);

  end;

  constructor TDBFieldComboBox.create(AOwner:TComponent);

  var i,j:integer;

  begin

  inherited Create(AOwner);

  FDataLink:=TFieldDataLink.Create ;

  ondropdown:=dropdown;

  text:='';

  end;

  destructor TDBFieldComboBox.Destroy;

  begin

   FDataLink.Free ;

   inherited Destroy;

  end;

  function TListBox1.GetField:string;

  var

   i,j:integer;

  begin

   j:=FDataLink.DataSource.DataSet .FieldCount ;

   for i :=0 to j-1 do

   begin

   if FDataLink.DataSource.DataSet.Fields[i].Displayname=text then

   begin

   Result:=FDataLink.DataSource.DataSet.Fields[i].FieldName;

   exit;

   end;

   end;

  end;

  procedure TDBFieldComboBox.SetDataSource ( Value:TDataSource);

  begin

  FDataLink.DataSource :=value;

  end;

  function TDBFieldComboBox.GetDataSource :TDataSource;

  begin

  Result:=FDataLink.DataSource ;

  end;

  procedure TDBFieldComboBox.StartDrag(Sender: TObject; var DragObject: TDragObject);

  begin

  end;

  procedure TDBFieldComboBox.DropDown(Sender: TObject);

   var

   i,j:integer;

  begin

   j:=0;

   j:=FDataLink.DataSource.DataSet .FieldCount ;

   i:=0;

  repeat

   items.Add (FDataLink.DataSet.Fields[i].DisplayName );//.FieldName);

   i:=I+1;

  until i〉j-1;

  end;

  end.


 
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> 数据库-SQL ->详细
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
声明:本站内容除注明原创以外均从网上摘抄,如有侵权请指明。
  如果您对我们的网站有什么意见或者建议,请与我们联系
powered by 建站易上手- V2.0