⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delphi数据库编程.htm

📁 Delphi数据库编程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szSQL := szSQL+eName[i].Text&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {非字符方式}<br>
 &nbsp;&nbsp;&nbsp;else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szSQL := szSQL+'&quot;'+eName[i].Text+'&quot;';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {字符方式}<br>
 &nbsp;&nbsp;&nbsp;if i=iNum-1 &nbsp;then<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szSQL := szSQL+')'<br>
 &nbsp;&nbsp;&nbsp;else<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szSQL := szSQL+',';<br>
 &nbsp;end;<br>
 &nbsp;qName.Close;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {关闭查询}<br>
 &nbsp;qName.SQL.Clear;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {清SQL特性内容}<br>
 &nbsp;qName.SQL.ADD(szSQL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {添加SQL内容}<br>
 &nbsp;szSQL := 'SELECT * FROM '+szDBName;<br>
 &nbsp;qName.SQL.ADD(szSQL);<br>
 &nbsp;qName.Open;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {返回结果集}<br>
 &nbsp;DataModule1.DataBase1.Commit;<br>
end;<br>
---- 以上过程包含五个参数,实现从页面中的一系列编辑框中读取数据,并向指定数据表输入的功能。其中,参数 qName 为页面中所使用的 TQuery 类构件的名称;参数 szDBName 是数据表的名称;参数eName 是 TEdit 类型的数组,列出了页面中包含数据的各编辑框名称;参数 iNum 是数据表中的字段个数,也即编辑框的个数;参数 iMark 是一个整数类型的数组,该参数表明相应字段是以何种方式输入的,如果是字符方式,需要在数据前后两端加上引号。需要注意的是:在调用本过程之前,应将数据库连接打开:<p>
DataModule1.DataBase1.Connected := true;<p>
过程调用完成后,将数据库连接断开:<br>
DataModule1.DataBase1.Connected := false;<br>
---- 另外,开发网络数据库应用程序时,还可以使用存储过程,即:将预先编译过的 SQL 语句存储在服务器上。存储过程提前运行,且不与程序代码一同存储和编译,因此其对应主程序中的代码相对简洁,运行速度也较快。SQL 语句的集中存放,使其修改更容易。<p>
---- 要创建向数据表中输入数据的存储过程,代码编写举例如下:<p>
CREATE PROC ProcTest1<br>
 &nbsp;@inttest smallint<br>
 &nbsp;,@strtest char(4) output<br>
AS<br>
 &nbsp;INSERT INTO TEST_User.TRANS_TEST<br>
 &nbsp;VALUES(@inttest,@strtest)<br>
 &nbsp;SELECT @strtest,* FROM TEST_User.TRANS_TEST<br>
---- 以上代码向数据表 TEST_User.TRANS_TEST 添加数据,该数据表包括两个字段:第一个字段为 smallint 类型的数据,参数类型定为 Input(在存储过程中可缺省);第二个字段数据为长度为4 的字符类型,参数类型为 Output。<p>
---- 其模块程序的编写与 DataInsert 过程相似,区别主要在于模块的中间部分,对应的主要代码如下:<p>
StoredProc1.Close;<br>
{关闭存储过程}<br>
StoredProc1.Params[1].ParamType := ptInput;<br>
{设置存储过程的参数类型}<br>
StoredProc1.Params[1].AsInteger := 1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {设置存储过程中参数的数据}<br>
StoredProc1.Params[2].ParamType := ptOutput;<br>
StoredProc1.Params[2].AsString := 'abcd';<br>
StoredProc1.Open;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {打开存储过程}<br>
---- 其中,StoredProc1 是 TStoredProc 类型的构件名称;Params[1] 是存储过程中的第一个参数,对应存储过程 ProcTest1 可以用ParamByName('@inttest')代替;存储过程的第二个参数与其类似。<p>
---- 实际上,编写对网络数据库进行其他数据处理(如:修改、删除和查询等)的模块,与数据的输入模块大体相似,这里就不再赘述了。<br>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I1626" ID="I1626"></A><center><b><font size=+2>用Delphi4的QReport部件生成报表</font></b></center><br>
<p>
用Delphi4的QReport部件生成报表<br>
河北证券公司电脑部<br>
师承<br>
---- 用户在使用数据库应用程序时经常要生成报表,利用Delphi 4的QReport 部件,可以帮助我们快速方便地生成报表。这里以一个设备管理报表为例说明如何用QReport部件与Query部件设计从多个数据表中生成报表。<p>
---- 一、 所用数据库<p>
---- 这里用到三个Foxpro数据表,DLBMK(设备大类编码)、SBXHK(设备型号及配置)、BMSBK(设备所在部门),存放在D:\SB目录下。其库结构如下:<p>
---- (一) DLBMK<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字段名称 &nbsp;字段类型 &nbsp;解释<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DLBH &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设备大类的编号<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DLMC &nbsp;&nbsp;&nbsp;&nbsp;C20 &nbsp;&nbsp;&nbsp;&nbsp;设备大类的名称<br>
(二)SBXHK<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字段名称 &nbsp;字段类型 &nbsp;解释<br>
 &nbsp;&nbsp;1. XHBM &nbsp;&nbsp;&nbsp;&nbsp;N3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设备型号的编码<br>
 &nbsp;&nbsp;2. DLBH &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同DLBMK中的DLBH字段<br>
 &nbsp;&nbsp;3. SBXH &nbsp;&nbsp;&nbsp;&nbsp;C30 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设备型号<br>
 &nbsp;&nbsp;4. SBPZ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C30 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设备配置<br>
 &nbsp;&nbsp;5. SBSL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设备数量<br>
(三)BMSBK<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字段名称 &nbsp;字段类型 &nbsp;解释<br>
 &nbsp;&nbsp;1. BMMC &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C20 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部门名称<br>
 &nbsp;&nbsp;2. XHBM &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同SBXHK中的XHBM字段<br>
 &nbsp;&nbsp;3. SL &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N3 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数量<br>
---- 利用这三个数据表,要生成一个只有电脑部有而其他部门没有的设备型号的情况。<p>
---- 二、 程序中的部件及属性<p>
---- 程序中有两个窗体:主窗体mainForm与报表窗体repForm。<p>
---- 主窗体mainForm中有两个TButton部件,设置如下:<p>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性及属性值<br>
PreviewBtn:TButton&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caption:预览<br>
PrintBtn: &nbsp;&nbsp;TButton&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caption:打印<br>
---- 报表窗体repForm中的部件及属性设置如下:<p>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;属性及属性值<br>
Query1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQuery&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DatabaseName:d:\sb<br>
Active:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
Qrep1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQuickrep&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dataset:query1<br>
TitleBand1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRBand&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BandType:rbTitle<br>
HeadBand1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRBand&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BandType:rbColumnHeader<br>
DrawLeft &nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawRight &nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawTop &nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawBottom :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DetailBand1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRBand&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BandType:rbDetail<br>
DrawLeft &nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawRight &nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawTop &nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawBottom :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
ChildBand1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRChildBand&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ParentBand:DetailBand1<br>
DrawLeft &nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawRight &nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawTop &nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
DrawBottom :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; True<br>
TitleLabel:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caption:设备统计表<br>
DlmcLabel:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caption:类别<br>
SbxhLabel:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caption:型号<br>
SbpzLabel:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caption:配置<br>
SbslLabel:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caption:数量<br>
DlmcDBText:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRDBText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dataset:Query1<br>
Datafield:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dlmc<br>
SbxhDBText:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRDBText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dataset:Query1<br>
Datafield:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbxh<br>
SbpzDBText:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRDBText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dataset:Query1<br>
Datafield:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbpz<br>
SbslDBText:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRDBtext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dataset:Query1<br>
Datafield:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sbsl<br>
Shape1~9:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TQRShape&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shape:qrsVertline<br>
Top:0<br>
Width:1<br>
Query1的SQL属性设置为:<br>
 &nbsp;select a.dlbh,a.dlmc,b.sbxh,b.sbpz,b.sbsl<br>
 &nbsp;from dlbmk a,sbxhk b<br>
 &nbsp;where a.dlbh=b.dlbh and b.xhbm not in<br>
 &nbsp;(select xhbm from bmsbk where trim(bmmc)&lt;&gt;’电脑部’)<br>
 &nbsp;order by a.dlbh<br>
---- 设置几个TQRband部件的DrawLeft、DrawRight、DrawTop、DrawBottom属性值为True,是为了打印表格边框及横线。利用TQRShape部件,是为了打印出表格竖线。DlmcDBText放置在DetailBand1上,其它几个TQRDBText部件放置在ChildBand1上,Shape1~3放置在HeadBand1上,Shape4~6放置在DetailBand1上, Shape7~9放置在ChildBand1上。<p>
---- 三、 为程序增加代码<p>
---- 1.mainForm窗体中的两个按钮事件<p>
procedure &nbsp;TmainForm.PreviewBtnClick(Sender : TObject)<br>
begin<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;repForm.Qrep1.Preview;<br>
end;<br>
procedure &nbsp;TmainFormPrintBtnClick(Sender : TObject)<br>
begin<br>
 &nbsp;&nbsp;repForm.Qrep1.Print;<br>
end;<br>
---- 2.HeadBand1、DetailBand1及ChildBand1的BeforePrint事件<p>
procedure &nbsp;TrepForm.HeadBand1Before<br>
Print(Sender : TQRCustomBand;<br>
 &nbsp;&nbsp;Var &nbsp;PrintBand : Boolean)<br>
Begin<br>
 &nbsp;&nbsp;Shape1.Height:=HeadBand1.Height;<br>
 &nbsp;&nbsp;Shape2.Height:=HeadBand1.Height;<br>
 &nbsp;&nbsp;Shape3.Height:=HeadBand1.Height;<br>
End;<br>
procedure &nbsp;TrepForm.DetailBand1Before<br>
Print(Sender : TQRCustomBand;<br>
 &nbsp;&nbsp;Var &nbsp;PrintBand : Boolean)<br>
begin<br>
 &nbsp;&nbsp;PrintBand:=bh&lt; &gt;Query1[‘dlbh’];<br>
 &nbsp;&nbsp;if &nbsp;&nbsp;PrintBand &nbsp;then<br>
 &nbsp;&nbsp;begin<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bh:=Query1[‘dlbh’];<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape4.Height:=DetailBand1.Height;<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape5.Height:=DetailBand1.Height;<br>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape6.Height:=DetailBand1.Height;<br>
 &nbsp;&nbsp;end<br>
end;<br>
procedure &nbsp;TrepForm.ChildBand1Before<br>
Print(Sender : TQRCustomBand;<br>
 &nbsp;&nbsp;Var &nbsp;PrintBand : Boolean)<br>
Begin<br>
 &nbsp;&nbsp;Shape7.Height:=ChildBand1.Height;<br>
 &nbsp;&nbsp;Shape8.Height:=ChildBand1.Height;<br>
 &nbsp;&nbsp;Shape9.Height:=ChildBand1.Height;<br>
End;<br>
bh应在变量定义部分定义:<br>
 &nbsp;Var &nbsp;&nbsp;bh : shortint=0;<br>
---- 几个TQRShape部件的高度(Height)与所在TQRBand 部件保持一致,使竖线打印得整齐。如果在设计阶段调整了TQRBand部件的高度,也不会出现竖线断线或过长的情况。<p>
---- 在DetailBand1的BeforePrint事件中用PrintBand进行控制,可使每个设备大类名称只需打印一次,而不是每个型号都对应打印一次大类名称。因为dlbh字段的值都大于0,bh初值设为0使它与任一记录的dlbh字段的值都不同,以确保第一个大类名称被打印。这样就生成了一个从多个数据表中提取数据,并带有表格线的数据报表。<p>
---- 注:本例工程文件为sbgl.dpr,原程序文件为main.pas和sbrep.pas,若要测试请将dlbmk.dbf、 sbxhk.dbf、bmsbk.dbf三个文件放在d:\sb目录下。<br>



<center><A HREF="#Content">[目录]</A></center>
<hr><br><A NAME="I1627" ID="I1627"></A><center><b><font size=+2>关于dephi数据库的动态建立</font></b></center><br>
关于dephi数据库的动态建立<p>
  delphi 最吸引人的特点之一就是它的强大的数据库访问能力,通过database desktop 工具可方便的建立、编辑数据库。由于实际原因我们往往需要在程序运行状态下动态建立某个数据库。<br>
  如果你让用户用database desktop 工具手工建立数据表那么你写的程序将会打大折扣,不过你不用担心delphi完全可以用语言来完成此功能,为我们提供方便。我在学习和实践中总结出两种方法,我叫做table法和sql法。下面通过简单的实例来描述动态数据库建立的过程。<br>
   一、 Table方法:<br>
1、(以建立paradox数据表为例假设库名为ljh.db)。新建一工程文件zhoudf.dpr.在unit1中的uses语句中加入db,dbtables单元。<br>
2、在面板上选取button元件置于form1表中,双击button1输入如下代码。<br>
Procedure Tform1.Button2Click(Sender: Tobject);<br>
var table1:ttable; begin table1:=ttable.create(self);<br>
with table1 do begin active:=false;<br>
tablename:='ljh.db';<br>
tabletype:=ttparadox; with fielddefs do {此方法为ljh.db增加字段} begin clear;<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -