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

📄 038.htm

📁 很不错的delphi入门级教程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p>TBlobField </p><p>────────────────────────────────────</p><p>TMemoField 二进制 不允许 不允许 不允许 不允许 </p><p>TGraphilField 字段 </p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p> </p><p>上述这些转换函数可以在任何与字段部件有关的表达式中使用,只要是表15.9中允许进行转换的数据类型,这些转换函数其实是当做字段部件的属性来使用的,它们可以出现在赋值语句的两边。例如下面的程序代码是将字段部件TableMyField的字段值转变成字符串类型的数据,并将它赋给编辑框Edit1的Text属性:</p><p> </p><p>Edit1.Text := TableMyField.AsString;</p><p> </p><p>而下面的代码是进行相反的操作,它将编辑框部件Edit1的Text属性值以字符串的形式赋给字段TableMyField,TableMyField通过AsString接受字符串并将其转变成自身的数据类型。</p><p> </p><p>TableMyField.AsString :=Edit1.Text;</p><p> </p><p>15.6.1.4 字段部件的访问</p><p> </p><p>字段部件对应着数据库表中实际的字段,用户要读写数据库表中的字段值其实是通过访问相应的字段部件进行的。在前面的章节中我们介绍过在Delphi的数据库应用程序中有两类字段部件:一类是利用字段编辑器创建的永久性字段部件;另一类是随着数据集部件被激活(被打开)而动态生成的字段部件。对于永久性字段部件的访问可以直接调用使用字段部件的名字进行。假设我们在设计阶段利用字段编辑器创建了对应于Customer.DB表中Company字段的字段部件Table1Company,下面的代码访问Company字段的字段值,并将该字段值显示在编辑框部件Edit1中。</p><p> </p><p>Edit1.Text := Table1Company.Value;</p><p> </p><p>因为company字段是字符串类型的数据,它与Edit1中的数据类型相匹配的,因此可以直接使用字段部件的Value属性读取字段值。如果两个变量的类型不匹配,则要使用表15.9中的转换函数进行字段值的读取。例如:要读取Customer.DB表中的CustNo字段的值并将它显示在编辑模框Edit1中,假设我们已用字段编辑器(FieldsEditor)创建了CustNo相应的字段部件,Table1CustNo,则程序代码如下:</p><p> </p><p>Edit1.Text := Table1CustNo.AsString;</p><p> </p><p>访问动态生成的字段部件相对要困难一些,因为动态生成的字段部件是没有自己的名字的,我们必须利用特殊的手段获得数据库表中各字段对应的字段部件,然后对字段进行访问。一般采用的方法有两种:</p><p>● 使用数据集部件的Fields属性</p><p>● 使用数据集部件的FieldByName方法</p><p> </p><p>1. 使用数据集部件的Fields属性访问数据库表中各字段</p><p>数据集部件的Fields属性是与数据集部件相连的数据库表中各个字段对应的动态字段部件的名字列表,因此我们可以通过Fields属性的下标(即索引号)来访问各字段部件,从而达到访问数据库表中的各个字段,索引号从0开始,也就是说数据库表中第一个字段对应着Fields列表的第一行即0索引,第二个字段对应的Fields的索引号为1,以此类推。下面的例子是访问Customer.DB表中的第一个字段并在编辑框Edit1中显示其字段值。假设Table1与数据库表Customer.DB相连。</p><p> </p><p>Edit1.Text := Table1.Fields[0].AsString;</p><p> </p><p>下面的代码是将编辑框Edit1中的字符值赋给Customer.DB表中当前记录的第一个字段,以实现修改Customer.DB表中的字段值。</p><p> </p><p>Table1.Fields[0].AsString := Edit1.Text;</p><p> </p><p>2.使用数据集部件的FieldByName方法访问字段部件</p><p>在数据集部件所拥有的方法中,有一个FieldByName方法,它是专门用于访问数据集部件中动态生成的字段部件的,调用FieldByName方法时,必须要把数据库表中的字段名作为参数传给FieldByName,调用该方法后便可以得到该字段所对应的字段部件,这样通过字段部件我们便可以读写表中相应的字段值了,用这种方法访问字段部件时,必须要知道数据库表中各个字段的名字,否则是没有办法调用该方法的。还是基于上面的假设。下面是访问Customer.DB表中的CustNo字段的程序代码:</p><p> </p><p>Edit1.Text := Table1.FieldByName('CustNo').AsString;</p><p>Table1.FieldByName('CustNo').AsString := Edit1.Text;</p><p> </p><p>在使用这两种方法访问动态生成的字段部件时,可以使用表15.9中的转换函数,在变量和字段值之间进行数据类型的转换。</p><p> </p><p>15.6.2 字段编辑器的使用</p><p> </p><p>字段编辑器(Fields Editor)主要是用于创建永久性的字段部件。在前面的内容中我们知道,当TTable或TQuery部件与数据库表相连接时,且TTable或TQuery部件被激活时(Active属性被设置成True或调用Open方法),Delphi便动态地为表中各字段创建相应的字段部件,字段部件中包含着相应字段的很多信息如字段值、字段值的显示、编辑格式等,有时我们在应用程序中为了更加方便、可靠地访问数据库表中各个字段,需要创建永久性的字段部件,这时我们必须要借助于字段编辑器来实现我们的设想。字段编辑器的主要功能如下:</p><p>● 创建永久性的字段部件</p><p>● 修改永久性字段的显示属性,如显示格式、显示宽度等</p><p>● 删除永久性的字段部件</p><p>● 增加新的永久性的字段部件</font></p><p><font face="宋体" lang="ZH-CN">● 定义计算字段(不对应数据库表中实际的字段,字段值根据表中其他字段的值计算得出)</p><p> </p><p>15.6.2.1 打开字段编辑器</p><p> </p><p>为TTable和TQuery部件打开字段编辑有两种方法:</p><p>● 用鼠标左键双击TTable或TQuery部件</font></p><p><font face="宋体" lang="ZH-CN">● 选择TTable部件或TQuery部件,然后单击鼠标右键,然后从弹出式菜单中选择Fields Editor</p><p> </p><p>字段编辑器Fields Editor被打开以后,窗体的名字和数据集部件的名字会显示在窗口的标题上。 </p><p>字段编辑器Fields itor中的Fields列表框是用于显示已经创建的永久性字段部件的名字的。字段编辑器FieldsEditor第一次被打开时,该列表框是空的,因为在此之前的字段部件都是动态生成的,只要Fields列表框中有字段部件,那么与数据集部件相连的数据浏览部件中只显示Fields中列出的字段的字段值,在Fields列表框中,可以通过拖放字段部件的名字来改变相应的字段值在数据浏览部件中的显示顺序,如在TDBGrid部件中根据各字段在Fields列表框中的顺序显示各字段的值。</p><p>在字段编辑器Fields Editor窗体上面的导航按钮是用来移动TTable或TQuery部件中的记录指针的,使用导航按钮可以将记录指针向前、向后移动,也可以移到第一条记录处或最后一条记录处。 </p><p>字段编辑器中的弹出式菜单 </p><p>15.6.2.2 增加字段部件 </p><p>字段编辑器Fields Editor中的Add Fields菜单项用于向数据集部件中增加字段部件的,单击AddFields菜单项时便会打开增加字段部件对话框,如图15.9所示。AvailableFields列表框中显示出数据集部件TTable或TQuery中当前可以用于创建永久字段部件的全部的字段,也就是说AvailableFields列表框中显示字段是数据库表中实际存在的字段,而且还没有为这些字段创建相应的永久性的字段部件,在缺省状态下所有的字段都被选择用于创建相应的永久性的字段部件,用鼠标单击其中的字段名可以有选择地创建其相应的永久性的字段部件,选择好有关的字段名之后,单击OK按钮便可以创建永久性的字段部件。 </p><p>字段编辑器的增加字段部件对话框  </p><p>15.6.2.3 删除字段部件 </p><p>用字段编辑器Fields Editor为数据集部件创建好的字段部件都会显示在字段编辑器的Fields列表框中,如果用户认为其中的一些字段部件不合适或不再需要时,可以单击这些不需要的字段部件,然后单击鼠标右键弹出一佣弹出式菜单,从弹出式菜单中选择Delete菜单项,便可删除相应的字段部件,如果在弹出式菜单中单击SelectAll菜单项,然后选择Delete菜单项,这样会删除已创建好的所有的字段部件。某一个字段部件被删除以后,通过单击AddFields菜单项可以重新创建,只是先前为该字段部件设定的一些属性将不复存在。</p><p> 15.6.2.4 定义新的字段部件 </p><p>字段编辑器Fields Editor中的弹出式菜单中New Fields菜单项是用来为数据集部件TTable或TQuery创建用于显示目的的新的字段部件,我们可以用它来为数据库表中实际存在的字段创建新的字段部件(如改变字段的数据类型,使它的字段值被显示时不再需有关的类型转换),但是我们使用NewFields菜单项创建新的字段部件主要是创建计算字段。计算字段并不与数据库表中实际存在的字段对应,它的字段值是根据表中其它的字段值计算而来的,具体的计算表达式由用户为TTable部件或TQuery部件的OnCalCFields事件编写程序代码时决定。</p><p>定义(创建)计算字段的过程如下:</p><p>1.单击字段编辑器中的New Fields菜单项,定义字段对话框如图15.11所示。</p><p>2.在FieldName编辑框中输入新字段部件的名字,或者从下拉式列表框中选择一个已存在的字段部件的名字。</p><p>3.在FieldType列表框中为新字段部件选择一个字段类型。</p><p>4.单击Calculated检查框,确认定义的新字段部件是计算字段。</p><p>5.单击ok按钮,创建上述定义的计算字段部件,此时该字段部件的名字会自动地加入到字段编辑中的Fields列表框中。 </p><p>创建新的计算字段</p><p>新的计算字段创建好了之后,它是没有任何字段值的,我们必须要编写相应的程序代码,根据数据库表中实际存在的字段的字段值为计算字段的宝定义字段值,我们为计算字段所在数据集部件的OnCalcFields事件编写代码来为计算字段赋值,其步骤如下:</p><p>1.选择数据集部件TTable或TQuery</p><p>2.单击数据集部件的事件页</p><p>3.双击OnCalcFields事件为TTable或TQuery部件编写事件处理过程</p><p> 15.7 TReport部件及其应用 </p><p>在一般的数据库应用程序中都包含着为最终用户提供输出报表的功能,使用Delphi开发数据库应用程序时,可以使用一个叫TReport的部件来执行报表功能的,报表的具体格式和内容是由Delphi提供的一个专用报表生成工具ReprotSmith创建的,它报表的具体格式和内容生成一个报表文件,然后为TReport部件设置相应的属性参数,由TReport部件执行报表功能。</p><p>我们可以在设计阶段双击TReport部件,调用ReportSimith工具或者在Delphi程序组内双击ReportSmith图标来调用ReportSmith工具来创建一个报表文件,具体的操作步骤和设计方法请参看ReportSimth工具的使用说明。</p><p>我们在使用TReport部件执行报表功能时,要设置TReport部件的一些的一些属性,这些属性是:</p><p>ReportName属性:说明报表文件的名字,就是用ReportSmith创建的报表文件。</p><p>ReportDir属性:说明报表文件所在的途径名。</p><p>PreView属性:这是一个布尔型属性。若它的值为True,那么在执行报表功能时,只是在屏幕上显示报表;若它的值为False,则报表内容将在缺省的打印机打印出来。</p><p>AutoUnload属性:布尔型属性,它的值为True时,在执行完一个报表功能后,自动地从内存中卸出ReportSmith工具;它的值为False时,在运行完一个报表功能后,不从内存中卸出ReportSmith工具。一般情况下,如果应用程序只有一个报表或者只有较少的报表要输出时,应设置AutoUnload属性为True,如果应用程序一次要输出多个报表,那么要应设置AutoUnload属性为False。</p><p>InitialValues属性:这是一个字符串类型的属性,它是说明报表文件中使用的变量,每一条说明一个变量。如:</p><p> </p><p>ReportVAR := Value;</p><p> </p><p>要详细了解创建和使用报表变量的过程请参看创建报表一节。</p><p>TReport部件要真正执行报表功能以输出一个报表需要调用Run方法。如下所示:</p><p> </p><p>Report1.Run;</p><p> </p><p>TReport部件所具有的重要方法如表15.10所示。</p><p> </p><p>表15.10 TReport部件的方法</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p>方法 功 能</p><p>────────────────────────────</p><p>Run 执行报表功能,输出报表</p><p>RunMacro 发送一个宏命令给Reportimith工具</p><p>Connect 预先连接报表文件和数据库,在输出报表时不</p><p>需要登录到数据库</p><p>SetVariable 改变说明的报表变量</p><p>ReCalcReport 当报表变量改变以后,重新输出报表</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p> </p><p>还有一些其他的数据访问部件如TBatchMove部件,它主要用在两个数据库表之间移动或拷贝帆数据记录,具体的使用请参看本地SQL服务器的使用。</p><p> </p><p>15.8 应用举例:多个窗体显示同一个数据库表</p><p> </p><p>在应用当中,我们常常需要以不同的视图显示同一个数据库表中的内容,例如要在两窗体中同时显示一个数据库表中一个记录的不同字段时,我们必须要想办法使两个窗体中的数据浏览部件同步地显示数据库表中的同一条记录的不同字段的值。要想做到以不同的视图显示同一个数据库表中的记录,下面两条规则是很重要的:</p><p>● 多个TDataSource部件能够同时访问同一个数据集部件</font></p><p><font face="宋体" lang="ZH-CN">●在多个窗体中显示同一个表时,必须为每个窗体设置一个TDataSource部件,只须为其中的一个窗体设置一个TTable部件</p><p> </p><p>例如,如果想在窗体Form1和Form2中同时显示一个数据库表的记录,最简单可行的办法是:为Form1和Form2各设置一个TDataSource部件叫DataSource1、DataSource2,并在Form1中设置一个TTable部件Table1,连接Form1中的Datasource1和Table1,在程序运行过程中设置Form2中的DataSource2的DataSet属性为Form1中的Table1,代码如下:</p><p> </p><p>Format2.DataSource1.Dataset := Form1.Table1;</p><p> </p><p>这样,当Table1被打开时,两个窗体中便可以同步地显示数据库表中的同一条记录了。</p><p>一个名叫TWOForms.DPR的例子在C:\Delphi\DEMos\DB\TwoForms中(如果Delphi安装在其它的磁盘驱动器中,从相应的磁盘驱动器中可以找到该例子),它演示了在两个窗体中显示同一个数据库表的记录。应用程序在第一个窗体中打开Contry.DB表,并在窗体中显示Name、Captial和Continent字段,在第二个窗体中显示Area和Population字段,在第一个窗体中有一个按钮用于打开第二个窗体,两个窗体中都有TDBNavigator部件,用于记录的导航。</font></p><p> </p><hr  width="94%"></TD><TD CLASS="tt3" VALIGN="bottom" width="8%"  ><strong><A HREF="039.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="037.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD></TR></table></BODY></HTML>

⌨️ 快捷键说明

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