用DELPHI 3.0制作应用软件经验谈
2008-04-09 04:17:25来源:互联网 阅读 ()
一、2000年问题
在程序中使用有关日期的组件,如DatetimePicker,MaskEdit等时,均使用长日期格式即可。
二、赋予初始值
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
在Form1上放如下构件:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash