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

📄 034.htm

📁 delphi教程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p>AsDateTime: 将字段值转换成日期时间数据 </p>
<p>AsFloat: 将字段值转换成数值型数据</p>
<p>AsInteger: 将字段值转换成整数型数据</p>
<p>下面的程序代码是从字段对象中读取字段值并将它显示在编辑框Edit1中,
或者将字段值赋给相匹配的变量。 </p>
<p>CustNoDouble: Double;</p>
<p>CustNoInt: Integer;</p>
<p>CustNoString: String;</p>
<p>{在Edit1中显示字段值}</p>
<p>Edit1.Text:=Table1Company;{类型相匹配,不需要转换}</p>
<p>Edit1.Text:=Table1CustNo.AsString;{类型不匹配,需要转换}</p>
<p>{将字段值赋给变量}</p>
<p>CustNoDouble:=Table1CustNo.Value;{类型相匹配,不需要转换}</p>
<p>CustNoInt:=Table1CustNo.AsInteger;{类型不匹配,需要转换}</p>
<p>CustNoString:=Table1CustNo.AsString;{类型不匹配,需要转换}</p>
<p>14.4.5 设定字段对象的显示格式 </p>
<p>
&nbsp;&nbsp;&nbsp; 我们即可以在设计阶段设定字段对象的显示格式,也可以在运行过程中通过程序代码来设定字段对象的显示格式。</p>
<p>&nbsp;&nbsp;&nbsp; 例14.2 在如图14.10所示的窗体中,再增加一个TaxRate字段,
并在程序设计过程中设定它的显示格式为0.00%,即设置TaxRate字段对象的DisplayFormat属性为0.00%
, 若TaxRate的值为0.085那么在网格部件中其显示的格式为8.50%。</p>
<p>&nbsp;&nbsp;&nbsp; 在运行过程中我们通过程序代码来设定字段Phone的显示格式,
美国的电话表示形式与中国的表示形式不一样(如美国808-555-0269,中国(808)
5550269 ), 为此我们将phone 字段的值表示成中国式的形式。
具体方法是:在 Object Inspector 中选取Table1phone对象,并为此对象的OnGetText事件编写如下程序代码:</p>
<p>TForm1.Table1PhoneGetText(Sender:TField;</p>
<p>Text:OpenString;DisplayText:Boolean);</p>
<p>begin</p>
<p>If DisplayText then</p>
<p>begin </p>
<p>Text:=Table1Phone.Value;</p>
<p>Delete(Text,4,1);</p>
<p>Delete(Text,7,1);</p>
<p>Insert('(',Text,1);</p>
<p>Insert(')',Text,1);</p>
<p>end;</p>
<p>end;</p>
<p>图14.14 设定字段对象的显示格式</p>
<p>14.4.6 自定义字段以及计算字段对象的创建 </p>
<p>
&nbsp;&nbsp;&nbsp; 有时候为了使应用程序完成所期望的工作,我们要在数据库表现有字段的基础上增加一些自定义的字段,这些字段并不是数据库表中实际存在的字段,它们常常是根据数据库表中的其它的字段动态地计算出来的,因而它们常常被称为计算字段。</p>
<p>例如我们创建一个浏览ORDERS.DB表中记录的应用如图14.15所示。</p>
<p>浏览ORDERS.DB表中的记录  </p>
<p>首先,我们想在显示OREDRES.DB表的网格中增加一个自定义的字段对象,完成以下步骤:</p>
<p>1、双击窗体中的Table1,打开字段编辑器Fields Editor。</p>
<p>2、在Fields Editor窗口中,单击鼠标右键,选择New Fields菜单项。</p>
<p>3、Delphi显示New Fields对话框。选择Field Type列表框中的Currency 项,
并在Field Name文体框中输入Balance , 这样我们自定义了一个 CurrencyField
类型的字段Balance。Delphi会自动地填入相应的字段对象名,其缺省值为Table1Balance。如图14.16所示。 </p>
<p>图14.16 New Field 对话框  </p>
<p>4、单击Ok按钮,关闭New Field对话框。当Fields Editor
窗口重新出现时, 注意Balance已经出现在Fields列表框中。</p>
<p>5、在Fields Editor 窗口中单击鼠标右键, 并选择 Add Fields 菜单项,
打开AddFields对话框。</p>
<p>6、从Available Fields 列表框中, 按住 Ctrl 键并单击鼠标左键,
选择字段:</p>
<p>OrderNo、CustNo、SaleDate、ShipData、ItemsTotal、Amountpaid以及Balance.</p>
<p>7、单击OK按钮,关闭Add Fields对话框,得到如图14.17所示的Fields
Editor窗口。 </p>
<p>图14.17 字段编辑器Fields Editor</p>
<p>8、双击Fields Editor的控制盒关闭字段编辑器Fields Editor。</p>
<p>&nbsp;&nbsp;&nbsp; 至此我们已经为Table1创建了一个自定义的字段对象Balance,下面我们把Balance字段设置成计算字段对象,使其显示每一个客户的现金余额,即此字段的值是由ORDERS.
DB表中ItemsTotal和Amountpaid字段的值计算而来的。为使应用程序实现这种计算功能,完成以下步骤:</p>
<p>1、在Object Inspector中选择自定义字段对象Table1Balance,修改其
Calculated属性值为True。即定义Balance字段为计算字段。</p>
<p>2、在Object Inspector窗口中,选择Table1部件的Event页。</p>
<p>3、双击OnCalcField事件,为Table1OnCalcField编写事件处理过程如下:</p>
<p>procedure TForm1.Table1OnCalcFields(DataSet:TDataSet);</p>
<p>begin</p>
<p>Table1Balance.Value:=Table1ItemsTotal.Value-Table1AmountPaid.Value;</p>
<p>end;  </p>
<p> 浏览ORDERS.DB 中的记录  </p>
<p align="center">14.5 查询数据库中的记录</p>
<p> 
&nbsp;&nbsp;&nbsp;&nbsp; 数据库中储存着大量的数据信息,如何充分有效地查询其中的数据,对用户而言是至关重要的。如果想查询数据库,首先要确定要查询的字段要么是数据库表中的关键字段,要么是辅助索引。如果我们查询的是Paradox或dBASE数据库系统中的表,这是唯一的选择。</p>
<p>&nbsp;&nbsp;&nbsp; 一般而言,查询数据库中的记录的方法有两种:Gotokey方法和Findkey方法。两种方法十分相似,主要区别在于我们如何指定查找值。这两种方法的思想是在指定列(字段)中寻找指定的查找值,如果在数据库表中找到了这个值,表中的记录指针便指向该记录,这样我们便查询到了我们需要的记录,进而可以访问找到的记录中的各项数据。 </p>
<p>14.5.1 使用GotoKey方法查找数据记录 </p>
<p>使用Gotokey方法查询数据库中的记录的具体步骤如下:</p>
<p>1、确保要查找的字段是关键字或已经为它定义了辅助索引,并保证TTable部件的属性列表中有关键字段名或辅助索引名。</p>
<p>2、通过调用GotoKey方法,把要查找的TTable部件置成查找模式。</p>
<p>3、把查找值送进被查找的Field的查找缓冲区。</p>
<p>4、调用TTable部件的GotoKey方法,并测试它的返回值判断查找是否成功。</p>
<p>&nbsp;&nbsp;&nbsp; 如果查找成功,GotoKey返回一个True值,并且表中的记录指针指向找到的记录。
如果查找失败,GotoKey返回False,表中的记录指针不发生变化。</p>
<p>&nbsp;&nbsp;&nbsp; 在这里要注意的是如何给Field的查找缓冲区赋值,
我们知道字段对象是不可见的对象,它们没有自己的名字,在大多数情况下,要使用TTable部件的FieldByName
方法到字段列表中查找字段对象以便为它赋值。但字段缓冲区也是没有名字的,当TTable部件处于查找模式时,我们只要把查找值赋给字段对象的AsString属性就可以了。AsString的作用不只是它的表面意思。它是一个转换属性,任何赋给字段对象的AsString属性的字符串都将转换成该字段对象应于数据库表中的字段的数据类型。当然AsString不能将查找值转换成BLOB、Bytes、Memo和Graphic类型的数据,用户一般也不会查找这种数据类型的字段。</p>
<p>下面便是说明使用Gotokey方法查找数据记录的例子。</p>
<p>&nbsp;&nbsp;&nbsp; 例14.3 当用户在Edit1部件中输入客户号码并单击查找按钮,程序便开始在Table1中查找这个客户号。如果查找成功,查找信息“查找成功”便会显示在标签Label1上,被查询到的客户的电话号码显示在标签Label2上。表中的记录指针将转移到该客户记录处。并且在网格DBGrid1中以高亮度显示这一条记录。  </p>
<p> 查询数据库中的记录</p>
<p>&nbsp;&nbsp;&nbsp; 下面的程序清单是查询按钮上的OnClick事件的处理程序,它是使用Gotokey方法查找数据库中的记录的。</p>
<p>procedure TForm1.Button1OnClick(Sender:TObject);</p>
<p>begin</p>
<p>with Table1 do</p>
<p>begin</p>
<p>Label1.Caption:=' ';</p>
<p>Label1.Caption:=' ';</p>
<p>IndexFieldName:='CustNo';</p>
<p>setkey;</p>
<p>FieldByName('CustNo').AsString:=Edit1.Text;</p>
<p>If GotoKey then</p>
<p>begin </p>
<p>Label1.Caption:='查找成功';</p>
<p>Label1.Caption:=FieldByName('Phone').AsString; </p>
<p>end;</p>
<p>else</p>
<p>Label1.Caption:='查找失败';</p>
<p>end;  </p>
<p> 查询数据库中的记录 </p>
<p>14.5.2 使用FindKey方法查找数据库中的记录 </p>
<p>&nbsp;&nbsp;&nbsp; 虽然使用上面的Gotokey方法在数据库中查找记录效果不错,但是Delphi
还提供了一种更加容易的查找方法,这就是Findkey方法,两种方法虽然很相似,但是Findkey方法更简单明了一些。</p>
<p>例14.4 我们可以使Findkey方法代替上面例子中的处理程序,下面是程序代码:</p>
<p>procedure TForm1.Button1OnClick(Sender:TObject);</p>
<p>var</p>
<p>SeekValue:string;</p>
<p>begin</p>
<p>with Table1 do</p>
<p>begin</p>
<p>Label1.Caption:=' ';</p>
<p>Label1.Caption:=' ';</p>
<p>IndexFieldName:='CustNo';</p>
<p>SeekValue:=Edit1.Text;</p>
<p>If FindKey([SeekValue]) then</p>
<p>begin </p>
<p>Label1.Caption:='查找成功';</p>
<p>Label1.Caption:=FieldByName('Phone').AsString; </p>
<p>end;</p>
<p>else</p>
<p>Label1.Caption:='查找失败';</p>
<p>end; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Findkey方法和Gotokey方法的根本区别在于查找值要作为参数传递给Findkey
函数。而GOtokey是不带参数的,
它假定用户已经把查找值赋给了代表着被查找到的字段的查找缓冲区。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Findkey接受的参数是放在方括号中的,是用逗号分开的查找值数组。
数组中的每一个值都对应于特定列的查找值,即参数中允许有多个查找值,Findkey
允许用户同时查找数据库表中的多个列。上面的程序清单中的Findkey函数只接受了变量Seekvalue这一个查找值,这个查找值对应表中的字段CustNo,CustNo是表中的关键字段。如果要同时查找表中的多个字段,必须把要查找的多个字段名赋给TTable部件的IndexFieldName属性,并用逗号分开各字段,然后把每个字段的查找值赋给Findkey的参数数组中。 </p>
<p>14.5.3 利用GotoNearest和FindNearest执行不精确查找 </p>
<p>
&nbsp;&nbsp;&nbsp; 在我们上面讨论的查找中,要么查找成功要么查找失败,因为我们查找的是特定查找值的一个精确匹配值。Delphi还提供了一种查找方法,即不精确查找,这样的查找绝对不会失败,它总是给用户查找出一个结果来,也许这结果并不是用户需要的,但这个查找出来的结果是最接近用户要求的。在Delphi中是利用GotoNearest和FineNearest两种方法来执行不准确查找的,它们总是从数据库中查找出与查找值最接近的匹配值。如果它们查找到与查找值精确匹配的值,那当然最好不过了,如果他们找不到精确匹配的值,它们就会把与用户指定的查找值最接近的记录提交给用户。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GotoNearest的使用方法和Gotokey一样,FindNearest的使用方法和Findkey一样。跟Gotokey一样,使用GotoNearest时必须要把查找值赋给字段的查找缓冲区,两者的不同之处在于查找值的说明方式不一样,使用GotoNearest时,
说明的查找值可以是完整的也可以是不完整的,如果要对'Dunteman'进行不精确查找,在给字段的查找缓冲区赋查找值时,可以使用'Dunteman'、'Dun'或者`Du'作为查找值,
这样查找出来的结果会尽可能地接近这个值的。</p>
<p>
&nbsp;&nbsp;&nbsp;&nbsp; 如果没有找到与用户指定的查找值精确匹配的记录,Delphi会调整记录指针并停留在与查找值最接近的第一个记录上。例如如果查找`Dunteman'时,没有找到精确匹配的值,记录指针可能会停留在`Dunwoody'上或者停留在更远一些的'Event'上;如果查找'Du'
没有找到精确匹配的值,记录指针可能停留在‘Duncan’上,甚至‘Dunteman'之前,
总之Delphi会自己地调整记录指针,使之指向最接近查找值的记录并将该记录作为查找的结果提交给用户。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GotoNearest和FindNearest都返回一个Boolean值以表明查找是否成功。
它们一般都是成功的,它们总是要把记录指针移到某处。</p>
<p>下面的例子是用GotoNearest方法进行不精确查找。</p>
<p>&nbsp;&nbsp;&nbsp; 例14.5 创建好的窗体,在编辑框中输入一个不完整的客户所在的公司名称,并且按“不精确查找”按钮,然后观察一下查找的结果并注意记录指针指向那一条记录。反复试验几次便会理解GotoNearest是如何工作的。</p>
<p> </p>
<hr color="#EE9B73" size="1" width="94%">

</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%"  bgcolor="#e0e0e0"><strong><A HREF="035.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR>
<A HREF="033.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR>

<A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首页</font></A><BR>
</strong>
</TD>
</TR>
</table>
</BODY></HTML>

⌨️ 快捷键说明

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