关于超想
本站导航
邮件列表
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> 系统开发 ->详细
相关内容  
 
 
在程序运行期设置QUERY控件的PARAMS
 
【新品推荐】

  详细内容
 

用DELPHI制作应用软件
作者: 评价: 上站日期: 2001-05-09
内容说明:
来源:

  DELPHI提供了强大的数据库程序开发工具和组件,从底层的BDE(BorlandDatabaseEngine)到桌面的DatabaseDesktop,从各式各样的数据库开发组件,到完整的Client/Server解决方案。以下是我在使用DELPHI3.0制作数据库应用程序时悟得的几点“真经”,著之为文,与大家切磋。

一、2000年问题
  在程序中使用有关日期的组件,如DatetimePicker,MaskEdit等时,均使用长日期格式即可。

二、赋予初始值
  你可能希望在使用Append增加一条记录时,能自动填写某些字段,这时,可以使用数据库组件的隐含属性。由于面向对象语言的继承特性,父对象的属性被子对象所屏蔽、继承或扩充。出于安全因素,部分属性在子对象的Object Inspector中没有显式的列出,但实际上并未屏蔽,仍然可以使用,如DBEdit、DBCombobox的text属性,DBCheckedbox的Checked属性,报表组件QRDBText的Caption属性等都可以在程序中使用。如下面一段程序:
  procedure Tform1.Button1Click(Sender:TObject);
  Var
    S:string;
  begin
    Table1.append;
    DBEdit1.text:='锦江区';
    DBComboBox1.text:='望滨路';
    S:=DBComboBox1.text;
    DBCheckedBox1.checked:=false;
  End;
  以上,将为DBEdit1、DBComboBox1、DBCheckedBox1赋予初始值。通过对象浏览器研究组件对象的继承关系后,你一定还可以发现更多的隐含属性,这将为我们的编程工作提供很大的帮助。

三、动态问题
  1、动态组合框(DBLookupComboBox)
  为了使用户可以自己方便地改变组合框中的内容,例如经常变动的工作人员名单,应该使用DBLookupComboBox代替一般的DBComboBox。步骤如下:
  (1)建立一个工作人员名单数据库,在程序中提供对此库的增加、修改、删除等操作。
  (2)使用DBLookupComboBox时,将属性ListSource指向名单库,Listfield和Keyfield指向名称字段,DataSource和Datafield指向欲写入的数据库和字段。在运行时,程序从名单库中提取名称信息,从而实现动态产生组合框中的内容。DataSource和Datafield也可以不填,这时提供动态信息,但不向任何数据库写入内容。
  这种方法也适用于Dbgrid,方法见后所述的“lookup字段的使用”一节。

  2、动态SQL
  在程序中可以动态地为Query组件写入SQL语句,填入参数。例如:
  procedure Tform1.Button1Click(Sender:TObject);
  Var
    S:string;
  begin
    Query1.active:=false;
    S:='select*fromt1.dbf'
    Query1.SQL.add(s);
    S:='whereid=:id';
    Query1.SQL.add(s);
    Query1.Params[0].AsString:='1';
    Query1.active:=true;
  End;

  以上程序将选出t1.dbf所有id为1的记录。使用动态SQL,可以实现动态查询、动态报表等功能,十分有用。

四、报表制作
  在DELPHI3.0中,不再有DELPHI1.0、DELPHI2.0原有的ReprotSmith报表制作工具,改为一套完整的QuickReport报表组件,使得报表与应用程序的连接更为紧密,运用更加灵活方便。具体的制作可参考DELPHI3.0提供的例子程序Qr2demo。有以下几点值得注意:
  (1)建立新报表可以在File菜单的New...中选取Report,也可以先建立一个空表单(Form)后,再放上一个QuickReport组件。前者建立一个从TQuickReport继承的对象,后者不进行继承,若程序中使用了复杂报表(几个报表的组合)。
  (2)主要对明细报表制作(Master/Detail)。
  这类报表可以用两种方法生成,一种是像Qr2demo中一样,使用两个Table组件,另一种是使用一个Query组件,配合SQL语句实现。例如:
  Select*fromxl.dbfa,byq.dbfb Wherea.xlmc=b.xlmc
  则将选出两个库中所有xlmc字段相同的记录,从而实现了主要对明细关系。

  (3)BeforePrint事件和OnPrint事件可提供打印前的预处理。
  以下程序中,Qrimage画了一个“勾”,通过BeforePrint事件和OnPrint事件预处理当前记录的下一条记录,从而在产生报表时决定在当前记录的“高压”还是“低压”处打勾。Qrimage的enabled属性决定其是否显示和打印。
  procedure do1(s1:string);
  begin
   if s1='高压'then
      begin
    qr1.qrimage1.enabled:=true;
    qr1.qrimage2.enabled:=false;
   end
     elseif s1='低压'then
     begin
    qr1.qrimage1.enabled:=false;
    qr1.qrimage2.enabled:=true;
   end
     else begin
    qr1.qrimage1.enabled:=false;
    qr1.qrimage2.enabled:=false;
  end;
  end;

  procedure Tqr1.qr2BeforePrint(Sender:TQuickRep;varPrintReport:Boolean);
  begin
    query2.active:=true;
    query2.first;
    qrimage1.enabled:=false;
    qrimage2.enabled:=false;
  end;

  procedure Tqr2.QRDBText5Print(sender:TObject;varValue:String);
  begin
    do1(query2.fieldbyname('DianYa').asstring);
    if not query2.eof then
         query2.next;
  end;

五、lookup字段的使用
  在实际的数据库程序中,我们经常使用编码表,例如对消费品名进行编码,在存入消费库中时使用消费品编码,而在使用DBGRID或其他数据明了构件显示出来时使用具体内容。这就要使用lookup字段了。

  我们可以作以下试验:
  (1)新建一个项目,使用database desktop建两个库,别名test,如下:
  nameid:编码表

字段名 Name    Id 
记录1 Tanglu   1 
记录2 shangwang  2 

  id:欲存入表(现为空)

字段名  Id 
记录1   
记录2   

 



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