版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/1第13章数据库编程-小学教育
delphi数据库编程
第13章数据库编程
第1节Delphi自带的数据库简介
Delphi包含一个桌面数据库工具DatabaseDesktop,利用它可以创建基于文件的数据库系统(如dBase、Paradox、Foxpro等)。选择【开头|程序|BorlandDelphi7|DatabaseDesktop】即可启动该工具。上述数据库通用性较差,目前应用者较少。
第2节FormWizard简介
Delphi中供应了一个简洁的数据库应用程序向导,即FormWizard。选择Delphi集成开发环境主菜单中的【Database|FormWizard】即可打开向导。利用该向导可以创建一个简洁的数据库应用程序,实现数据的扫瞄和简洁操作。在该向导中可以选择数据集为Table或者Query、建立单窗体或者主/从窗体,还可以选择窗体的布局方式。
用FormWizard只能访问基于数据表的文件型数据库,如Paradox(*.DB)、Foxpro(*.DBF)等,因此通用性较差。
第3节基于BDE的数据库应用程序开发
一、BDE简介
BDE(BorlandDatabaseEngine)是Borland公司开发的数据库引擎,
delphi数据库编程
用于操作不同的数据库驱动程序。开发人员只需要以统一的方式和数据库引擎建立联系,就能访问不同的数据库。可以大大简化数据库应用程序的开发。
BDE是访问Paradox或dBASE表的最佳方式。BDE支持的功能范围较宽,但它的配置是最简单的。在使用前,需要在BDEAdministrator中配置BDE,建立数据库别名。
尽管BDE的功能较强,但以下因素限制了它的应用:
BDE的配置步骤较烦琐。
配置BDE时,注册表等系统文件将会被修改。
使用BDE的应用程序发布时需同时发布BDE引擎,致使应用程
序的发行盘很大,通常需要使用安装程序制作软件发布应用程序。
二、常用组件简介
1.数据集组件
数据集组件是数据库应用程序的核心,此类组件代表来自底层数据库中记录的集合。
数据集中的记录可以是一个完整的表,也可以是一个表中的字段或记录的子集,或者是由多个表中的信息连接构成的一个视图。通过使用数据集,可以将数据库中的一个或多个物理表按特定规章在内存中重建。当底层数据库转变时,可能需要修改数据集组件处理数据的方式,而应用程序的其他部分不必修改。
基于BDE的数据集组件包括Table(表)、Query(查询)、StoredProc(存储过程)等。
(教材误,295页)教材所列Database(数据库)属于数据连接组件(ConnectionComponent)。
BatchMove是数据批处理组件。
上述组件均位于组件面板BDE页。
2.数据掌握组件
数据掌握组件又称数据感知(data-aware)组件、数据控件或数据显示/编辑组件,位于组件面板DataControls页。该页中含有多种数据感知组件(如DBEdit、DBGrid等),用于显示和编辑数据库信息。
这些组件是数据库应用程序的通用组件,即不仅可以用于BDE,亦可用于其他数据引擎(如ADO等)。
delphi数据库编程
3.数据访问组件
数据访问组件位于组件面板【DataAccess】页,是数据掌握组件和数据集组件之间的中介,其作用是连通用户界面和代表数据库信息的数据集。其中最常用的是DataSource(数据源)组件。
用户界面窗体上的多个数据掌握(感知)组件可以共用一个数据源,在这种状况下,各数据感知控件同步显示数据,当用户滚动记录(移动记录指针)时,当前记录的对应字段值将显示在每个控件中。
数据访问组件也是数据库应用程序的通用组件,适用于各种数据引擎。
三、使用Table组件开发数据库应用程序Table作为数据集组件,其作用是连接数据库中的一张表。
使用时需要设置其DatabaseName属性(BDE中的别名)和TableName属性。
教材296~297页表13.4和表13.5分别列出了Table组件的常用属性和方法,其中大部分属性和方法也适用于其他类似的数据集组件(如ADOTable)。
教材297~313页中的例13-1~例13-4以及例13-8所使用的主要属性和方法适用于各种类型的数据集;例13-5~例13-7中所用的GotoKey、FindKey等方法仅用于基于BDE的数据集或客户端数据集(TClientDataSet)。
四、使用Query组件开发数据库应用程序
Query组件的作用是通过SQL命令访问数据库,它也属于数据集组件,通常需要设置其DatabaseName属性和SQL属性。
SQL属性的设置可以在设计期间在对象观看器中进行设置,也可以在代码中动态设置
在代码中对Query的SQL进行动态编程通常需要如下步骤:Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(‘此处为SQL语句’);
Query1.Open/ExecSQL;
其中,若SQL命令有返回结果集就使用Open方法打开数据集,否则使用ExecSQL方法。
上述步骤也适用于基于ADO的ADOQuery组件。
教材314~320页中的例13-9~例13-12所使用的主要属性和方法也适用于ADOQuery组件。
delphi数据库编程
第4节基于ADO的数据库应用程序开发◆
基于ADO的数据库应用程序开发的一般步骤如下:
利用ADOConnection组件建立与数据库的连接;
设置ADO的数据集组件,如ADOTable、ADOQuery等,用于从数据库中引入数据;
设置DataSource组件作为数据集组件和数据访问组件之间的桥梁;
利用数据感知组件或其他组件设计用户界面。
一、创建一个最简洁的数据库应用程序
假如应用程序的功能较简洁,可将数据组件直接放置在窗体上。新建工程,保存文件。
在窗体上添加一个DataSource组件,一个ADOTable组件,一个DBGrid组件。
设置ADOTable组件属性:
①选定ADOTable组件,在属性窗口单击ConnectionString属性UseConnectionString单选钮,单击Build...按钮,在“数据链接属性”对话框的“供应者”选项卡中选择“MicrosoftJet4.0OLEDBProvider”,单击“下一步”,在“连接”选项卡中选择数据库文件(如Stud2K.mdb),测试连接胜利后单击“确定”或“OK”关闭对话框。
说明:
为了保证程序移植到其它计算机上仍可正常使用,可将当前工程与数据库保存在同一文件夹中,在数据库测试连接胜利后删除数据库名称前面的全部路径。在主窗体的OnCreate大事中加入以下代码:
delphi数据库编程
ChDir(ExtractFilePath(Application.ExeName));
②在TableName属性右侧的下拉式列表框中选择数据表(如“学籍”)。
③将Active属性设置为True。
设置DataSource组件属性:将DataSet属性设置为ADOTable1。设置DBGrid组件属性:将DataSource属性设置为DataSource1。经上述设置后,在设计阶段即可看到DBGrid组件中已显示数据表的记录。
二、常用组件简介
组件板ADO(ActiveXDataObjects)页中含有各种ADO组件。ADO通过OLEDB访问数据库,供应多种访问不同数据库的驱动程序。
ADO组件主要包括:
数据库连接组件:ADOConnection
数据集组件:ADOTable、ADOQuery、ADODataset、ADOStoredProc命令组件:ADOCommand。
这些组件的主要功能见教材320页表13.19。
在以下各小节中将分别介绍上述组件。
三、ADOConnection组件◆
ADOConnection组件用于同数据资源建立连接。该组件类似于BDE的DataBase组件。
由于ADO数据集和命令组件可以通过它们的ConnectionString属性直接与数据资源建立连接,因此,程序中并非必需使用ADOConnection组件。尽管如此,对于略微简单一点的数据库应用程序,还是推举使用ADOConnection组件,由于多个ADO数据集和命令组件可以共享一个连接组件(将各ADO组件的Connection属性设置为该连接组件即可),这样可以节约资源,并且可以建立跨越多个数据集的事务。
1.重要属性
(1)ConnectionString属性◆
该属性用于设置与数据资源的连接信息。设置方法与ADO数据集的同名属性相同。
delphi数据库编程
(2)LoginPrompt属性◆
打开新连接之前是否显示登录(Login)对话框。默认值为True,通常设置为False。
(3)Connected属性◆
用于设置是否激活连接。
设该属性值为True时,建立与ADO数据资源的连接,但不打开数据集,值为False(默认)时关闭连接。
可以通过该属性推断连接的当前状态。值为True时连接处于活动状态;若值为False,并且KeepConnection属性亦为False,则连接处于非活动状态。
该属性还可用于推断对连接组件的Open方法和Close方法的调用是否胜利。例如:
withADOConnection1do
begin
Open;
ifConnectedthen
{连接胜利}
else
{连接不胜利};
end;
(4)KeepConnection属性
该属性用于指定数据集未打开时连接对象是否仍旧与数据库保持连接。
属性值为True(默认)时,始终保持与数据库的连接。对于同远程数据库服务器的连接,或者需要频繁打开和关闭数据库的应用程序来说,设该属性为True可以削减网络流量,加快程序运行速度,并避开每次重建连接时重新登录服务器。
属性值为False时,若没有打开的数据集,则断开连接。断开连接将释放安排给该连接的系统资源,假如以后打开使用该数据库的数据集,则必需重建连接并初始化。
2.重要方法
(1)Open方法
打开与数据库(由ConnectionString属性指定)的连接。
delphi数据库编程
(2)Close方法
关闭连接。
在连接组件失活之前,全部相关的数据集均被关闭。调用Close方法与设置Connected属性为False等效。
假如一个活动连接被关闭后又重新打开,必需重新打开全部相关的数据集,重开连接不会自动重开相关的数据集。
(3)GetTableNames方法◆
①语法
该方法可以将数据库中全部表的名称构成一个字符串列表。
语法(原型)如下:procedureGetTableNames(List:TStrings;SystemTables:Boolean=False);
参数说明:
List:已有的字符串列表对象,用于存放数据表名称列表。
SystemTables:指定表名称列表中是否包含数据库中的系统表,默认值为False。
留意:调用此方法时,字符串列表对象中的原有内容将被掩盖。②示例
动态显示数据库中各表的数据。
基本思路:利用GetTableNames方法将数据库各表的名称填充到列表框或组合框中,程序运行时在列表框或组合框中选择一个表,通过DBGrid显示该表数据。
按下表在窗体上添加组件并设置属性。
为窗体的OnCreate大事编写如下代码:
delphi数据库编程
procedureTForm1.FormCreate(Sender:TObject);
begin
ADOConnection1.GetTableNames(ListBox1.Items);//用表名填充列表框
end;
为按钮btnShow的单击大事编写如下代码:procedureTForm1.btnShowClick(Sender:TObject);
vari:Integer;
begin
i:=ListBox1.ItemIndex;//取列表框中被选项目的索引号
ifi=-1thenExit;//确保已选择项目,避开出错
withADOTable1do
begin
Close;//关闭数据集
TableName:=ListBox1.Items[i];//依据用户的选择重新指定表名
Open;//打开数据集
end;
end;
四、ADOTable组件◆
1.使用ADOTable组件的一般步骤
隶属于ADO的ADOTable组件与隶属于BDE的Table组件由很多相像之处。使用ADOTable组件的一般步骤如下:
将ADOTable组件添加到数据模块或窗体中,为其设置一个惟一
的名称(Name属性)。
定义数据库连接:
方法1:直接使用ADOTable组件的ConnectionString属性。
方法2:通过ADOTable组件的Connection属性指定一个已经与
数据库建立连接的ADOConnection组件。
在ADOTable组件TableName属性的下拉式列表中选择数据库表。在数据模块或窗体中添加一个数据源组件,将该组件的DataSet
属性设置为ADOTable组件的名称。
在窗体上放置数据感知组件,将其DataSource属性设置为数据源
组件。
在属性窗口或通过代码将ADOTable组件的Active属性设置为
delphi数据库编程
True。
使用表类型的数据集的主要优点是:可利用索引为数据集排序;快速查找记录;限制记录的显示范围;建立主表/细表关系。
2.数据集的扫瞄
(1)移动记录指针
调用数据集的First(首记录)、Last(末记录)、Next(下一记录)、Prior(上一记录)和MoveBy方法可移动记录指针。MoveBy方法需要一个整型参数,若为正值,向尾部移动,若为负值,向首部移动。
(2)Bof与Eof◆
Bof和Eof时数据集的两个规律型属性(只读),在遍历数据集时常用。①Eof
Eof为True时表示指针指向数据集的最终一条记录。下列操作将导致Eof为True:
打开一个空数据集。
调用数据集的Last方法。
调用数据集的Next方法失败(因当前记录是末记录)。
调用SetRange方法,但范围无效。
除上述状况外,Eof均为False。
Eof属性常用于在循环中遍历数据集时,推断是否已到达数据集最终一条记录。
下面的代码段遍历数据集ADOTable1中的全部记录:ADOTable1.DisableControls;
try
ADOTable1.First;{指向首记录,Eof为False}
whilenotADOTable1.Eofdo{循环到Eof为True}
begin
{在此到处理每一条记录}
{...}
{调用Next胜利时Eof为False;
指针指向末记录时调用Next失败,Eof为True}
ADOTable1.Next;
end;
finally
ADOTable1.EnableControls;
delphi数据库编程
end;
提示:本例还演示了遍历数据集时调用DisableControls方法禁止数据感知控件刷新,以便加快处理速度,并防止闪耀。遍历完成后调用EnableControls方法恢复控件刷新。留意EnableControls方法的调用应放在try...finally语句的finally子句中,以保证即使遍历消失特别,仍能确保控件刷新恢复正常。
②Bof
Bof为True时表示指针指向数据集的首记录。下列操作将导致Bof为True:
打开一个数据集。
调用数据集的First方法。
调用数据集的Prior方法失败(因当前记录是首记录)。
除上述状况外,Bof均为False。
Bof属性亦可用于遍历数据集。下面的代码段遍历数据集ADOTable1中的全部记录:ADOTable1.DisableControls;{提高处理速度,防止屏幕闪耀}
try
st;{指向末记录,Bof为False}
whilenotADOTable1.Bofdo{循环至Bof为True}
begin
{处理各记录}
...
{调用Prior胜利时Bof为False;
指针指向首记录时调用Prior失败,Bof为True}
ADOTable1.Prior;
end;
finally
ADOTable1.EnableControls;{显示当前记录}
end;
(3)使用数据库导航组件
数据库导航组件TDBNavigator可用于扫瞄和处理记录。
delphi数据库编程
上述按钮分别调用数据集的相关方法,从左向右依次为:
首记录(First)
上一记录(Prior)
下一记录(Next)
末记录(Last)
插入(Insert):在当前记录前插入新记录
删除(Delete):删除当前记录
编辑(Edit):进入编辑状态,允许编辑当前记录
发送(Post):将当前记录的修改写入数据库
取消(Cancel):取消对当前记录的编辑,恢复编辑前状态
刷新(Refresh):用数据库最新数据刷新数据集。
3.记录排序
Sort属性:指定用于排序的一个或多个字段。该属性是一个字符串,可指定升序或降序,格式如下:
'字段名1ASC|DESC,字段名2ASC|DESC...'例如:
ADOTable1.Sort:='姓名DESC'//按姓名降序排列
Sort属性仅用于客户端游标(设置CursorLocation属性为clUseClient),设计时无效。若指定的索引不存在,则创建一个临时索引。
说明:
Sort属性可用于全部ADO数据集。
示例:◆
单击DBGrid控件列标头自动排序(在升序和降序之间切换)。
delphi数据库编程
可通过DBGrid控件的OnTitleClick大事实现:procedureTForm1.DBGrid1TitleClick(Column:TColumn);//单击列标头
var
sSort,sTitle:string;
i:integer;
begin
sTitle:=Column.FieldName;//取当前列字段名作为修改列标题的基础
withADOTable1do
{亦可用以下语句,适用于各种ADO数据集(需在本单元中引用ADODB),
不必考虑其类型和名称:
withTCustomADODataSet(Column.Field.DataSet)do}begin
sSort:=Sort;//取当前数据集排序字段和方式(升/降)
ifsSort=Column.FieldNamethen//若为升序则改为降序
begin
sSort:=sSort+'DESC';
sTitle:=sTitle+'↓';//预存拟修改的列标题文本
end
else//否则改为升序begin
sSort:=Column.FieldName;
sTitle:=sTitle+'↑';
end;
Sort:=sSort;//排序
end;
//转变排序列标题的文本
Column.Title.Caption:=sTitle;
//其他列标题均设置为默认格式
fori:=0toColumn.Collection.Count-1dowithTDBGrid(Column.Grid).Columns[i]do
ifFieldNameColumn.FieldNamethen
delphi数据库编程
Title.Caption:=FieldName;
end;
4.数据集的增、删、改操作概述
数据集有一个由系统设置的只读属性CanModify。通常该属性值为True,即允许修改数据。在数据集的读写权限有限制时,该属性的值可能为False。
当CanModify属性为True时,可以调用数据集的以下方法插入、更新和删除数据:
Edit:使数据集进入dsEdit状态。
Append:在数据集末尾插入新记录,使数据集进入dsInsert状态。Insert:在当前记录前插入新记录,使数据集进入dsInsert状态。Post:将用户对数据的修改写入数据库,假如胜利,则使数据集进入dsBrowse状态,若不胜利,则数据集维持当前状态。
Cancel:取消当前操作,设数据集为dsBrowse状态。
Delete:删除当前记录,并设数据集为dsBrowse状态。
5.编辑数据
(1)进入dsEdit状态
要编辑数据,必需先进入dsEdit状态。当数据集的CanModify属性为True时,调用数据集的Edit方法可以进入dsEdit状态。
此外,以下三个条件并存时,某些数据感知组件可自动设数据集进入dsEdit状态:
①数据感知控件的ReadOnly属性为False;
②与数据感知控件关联的数据源的AutoEdit属性为True;
③数据集的CanModify属性为True。
进入
dsEdit状态后,用户即可修改数据感知控件中显示的当前记录字段值。当移动记录指针时,数据感知控件会自动调用数据集的Post方法。
(2)确认和取消修改
①使用数据导航组件
Post
)按钮(执行后不能取消)。
Cancel)按钮。
delphi数据库编程
②通过代码
确认修改:调用数据集的Post方法(执行后不能取消)。例如:ADOTable1.Post;
取消修改:调用数据集的Cancel方法。例如:
ADOTable1.Cancel;
在代码中,Edit和Post方法常联合使用。例如:
withADOTable1do
begin
Edit;
FieldValues['学号']:='0108001';
Post;
end;
6.添加新记录
在添加新记录之前必需进入dsInsert状态。当CanModify属性为True时,调用Insert或Append方法可使数据集进入dsInsert状态。
Append方法:在数据集最终追加一条空记录,并使空记录成为当前记录。
Insert方法:在当前记录之前插入一条空记录,并使空记录成为当前记录。
例如:
procedureTForm1.btnAddClick(Sender:TObject);
begin
ADOTable1.Append;
end;
以上代码只是添加了一条空记录,并进入dsInsert状态,此时应为新记录的相关字段输入数据。
若要使添加记录有效,必需调用Post方法予以确认。调用Cancel方法可取消添加。在dsInsert状态下,若移动记录指针,则数据感知控件会自动调用数据集的Post方法。
7.发送数据与取消修改◆
上述对记录的编辑、插入、追加操作完成后,必需调用Post方法才能将修改的数据存入数据库。调用Post方法分为显式(直接)调用和隐式(间接)调用。显式调用是指在代码中以“数据集.Post”的形式调用,隐式调用是指在dsEdit或dsInsert状态下移动记录指针时,或者调用
delphi数据库编程
AppendRecord等方法时,自动调用Post方法。
在dsEdit或dsInsert状态下,若尚未直接或间接调用Post方法,则可以调用Cancel方法取消修改。
发送数据时常因数据不合法而引发特别,导致程序崩溃,因此应作适当处理。
例如,以下代码用于处理特别:procedureTForm1.btnPostClick(Sender:TObject);
begin
withADOTable1do
begin
if(StatedsEdit)and(StatedsInsert)thenexit;try//用try...except结构处理特别
Post;
except
onE:Exceptiondo//发生特别时显示特别信息
ifApplication.MessageBox(PChar(E.Message+
#13#13+'是否取消本次操作?'),'提示',
MB_YESNO+MB_ICONWARNING)=IDYESthen
Cancel
end;
end;
end;
对于一些能够预知的错误,可利用数据集的BeforePost大事处理。例如:
procedureTForm1.ADOTable1BeforePost(DataSet:TDataSet);begin
ifTrim(dbeID.Text)=''then
begin
Application.MessageBox('学号不得为空!','提示',MB_OK+MB_ICONWARNING);
Abort;//调用全局过程Abort取消操作
dbeID.SetFocus;
delphi数据库编程
end;
end;
8.删除记录
调用数据集的Delete方法删除当前记录。例如:
ADOTable1.Delete;
留意:
为了避开误删记录,应在数据集的BeforeDelete大事过程中询问用户。例如:procedureTForm1.ADOTable1BeforeDelete(DataSet:TDataSet);begin
ifApplication.MessageBox('是否删除此记录?','确认',
MB_YESNO+MB_ICONQUESTION)=IDNOthen
Abort;//调用全局过程Abort取消操作
end;
假如采纳数据导航组件TDBNavigator删除记录,系统会自动弹出确认对话框,但该对话框显示的是英文界面。将TDBNavigator组件的ConfirmDelete属性设置为False,然后为该组件的BeforeAction大事编写代码,可以显示中文对话框。例如:procedureTForm1.DBNavigator1BeforeAction(Sender:TObject;Button:TNavigateBtn);
begin
ifButton=nbDeletethen
ifApplication.MessageBox('是否删除此记录?','确认',
MB_YESNO+MB_ICONQUESTION)=IDNOthen
Abort;//调用全局过程Abort取消操作
end;
除了一般数据集的Delete方法以外,ADO数据集还具有DeleteRecords方法,可一次删除多条记录。调用格式如下:
ADO数据集.DeleteRecords(受影响的记录)
“受影响的记录”可取以下值:
arCurrent:仅删除当前记录。
arFiltered:删除满意当前Filter属性设置的记录。
arAll:删除全部记录。
delphi数据库编程
arAllChapters:删除全部子集记录。
9.创建主表/细表关系简介
(参见教材311页例13-8)
在数据库应用程序中,经常需要处理数据表之间的“一对多”关系,即对于主表(Master)中的某个记录来说,从表(细表,Detail)中有多个记录与之对应。例如,“学籍”表中含有同学的基本信息,其中“学号”字段一般设置为主键或主索引(惟一);“成果”表中含有同学的各科成果,一个同学每门课程的成果构成一条记录,因此“成果”表中的“学号”字段确定会有重复值。这样,“学籍”表与“成果”表中的“学号”字段就构成了“一对多”关系。另一个典型例子是客户基本信息与客户定单之间的关系。
下面以“学籍”表与“成果”表为例,说明创建主表/细表关系的一般步骤。
①在窗体上或数据模块中添加一个ADOConnection组件,与同学数据库建立连接。
②添加两个ADOTable组件,分别命名为ADOTblMaster和ADOTblDetail。将它们的Connection属性均设置为第①步中建立的连接组件。
③将主表ADOTblMaster组件的TableName属性设置为学籍表,将细表ADOTblDetail组件的TableName属性设置为成果表。
④添加两个DataSource组件,分别命名为SrcMaster和SrcDetail。将它们的Dataset属性分别设置为ADOTblMaster和ADOTblDetail。
⑤选定ADOTblDetail组件,在属性窗口将其主数据源属性MasterSource设置为SrcMaster。然后单击MasterFields钮,打开字段关联设计器【FieldLinkDesigner】,建立主/细表“学号”字段的关联。
⑥添加两个DBGrid组件,将其属性DataSource属性分别设置为SrcMaster和SrcDetail。
⑦依次将ADOTblMaster和ADOTblDetail组件的Active属性设置为True。
程序运行时,在主表中移动记录指针,细表中将会显示当前同学的各科成果。
delphi数据库编程
10.搜寻特定记录(补充)
调用数据集的Locate和Lookup方法可以搜寻数据集中的特定记录(记录定位)。
(1)Locate方法◆
调用语法:
数据集.Locate(‘待查字段列表’,字段值,选项集合)
参数说明:
‘待查字段列表’:由一对单引号括起来的字段名。若有多个字段,用分号分隔。
字段值:与字段名对应。若有多个字段,字段值应当是一个变体型数组。
选项集合:搜寻记录的附加条件。可取loCaseInsensitive(不区分大小写)和loPartialKey(部分匹配,仅适用于字符串型字段)。
留意:使用选项集合时,必需在本单元中添加对DB单元的引用。返回值:Boolean。若找到匹配记录,则将第一条匹配记录作为当前记录,并返回True;否则返回False,记录指针位置不变。
示例:IfADOTable1.Locate('姓名','李',[loPartialKey])=FalsethenShowMessage('未找到姓李的同学。');
varsName:string;
...
sName:=Trim(edtName.Text);
IfADOTable1.Locate('姓名',sName,[loPartialKey])=Falsethen
ShowMessage('未找到姓名为'+sName+'的同学。');
ADOTable1.Locate('姓名;诞生日期',VarArrayOf(['张三',StrToDate('1981-6-9')]),[loPartialKey]);
ADOTable2.Locate('课程;分数',VarArrayOf(['英语',79]),
[loPartialKey]);
关于Locate方法的几点说明:◆
①若有多条记录符合条件,则只能定位于第一条匹配记录。
delphi数据库编程
②若搜寻条件中包含多个字段,则loPartialKey选项仅对“待查字段列表”中的最终一个字段有效。
③假如为数据集设置了过滤器(Filter,见后面的“11.筛选记录”小节),则应将过滤器中所包含的字段添加到Locate方法的搜寻条件中;否则,被过滤掉的记录仍会被列入搜寻范围,从而返回错误结果,并导致定位混乱。例如,若过滤器中设置了按性别筛选记录,则应按以下语句构建搜寻条件:
ADOTable1.Locate('性别;姓名',VarArrayOf([cboSex,sName]),
[loPartialKey]);
(2)Lookup方法简介
调用语法:
数据集.Lookup(‘待查字段列表’,字段值,’返回字段列表’)参数说明:
‘待查字段列表’:与Locate方法相同。
字段值:与Locate方法相同。
’返回字段列表’:拟返回的字段,若有多个字段,用分号分隔。
返回值:Variant。若找到匹配记录,则返回’返回字段列表’中指定字段的值。若有多个字段,则返回值是一个Variant数组。Lookup方法不移动记录指针,只是返回指定字段值。若无匹配记录,返回Null值。
示例:
以下代码查询数据集ADOTable1中姓名为李四的记录,若查到,返回该记录的学号、姓名、性别和班级字段值并显示。varLkup:Variant;i:Integer;ss:String;
begin
Lkup:=ADOTable1.Lookup('姓名','李四','学号;姓名;性别;班级');
ifnotVarIsNull(Lkup)then//若有匹配记录
begin
fori:=0toVarArrayHighBound(Lkup,1)do
ss:=ss+Lkup[i]+'';//将各字段值存入字符串变量ShowMessage(ss);
end
else
ShowMessage('无匹配
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 煤矿复采工作面顶板管理措施培训
- 2026中国UWB精准定位芯片应用场景拓展与投资价值报告
- 起重吊装作业安全操作规范与风险防控
- 2026汽车后市场服务网点体系完善客户体验品牌忠诚度内容设计分析报告
- 2026中国柔性显示屏在车载场景中的可靠性测试标准研究
- 2026森林资源管理规划政策建议调查研究报告
- 2026中国微波运动传感器行业兼并重组案例与资源整合方向研判
- 2026中国涡流泵行业价格形成机制与市场波动分析报告
- 车间溜井安全管理措施培训
- 更换刮板机机头电机安全技术措施培训
- 防腐施工安全技术操作规程
- JJF(川)143-2017 在线温度测量系统校准规范
- T∕CWTAS 0007-2025 电厂碳排放核算燃煤计量系统
- 《构网型独立储能电站档案资料管理方案》
- 2026年注册营养师道真题(名校卷)附答案详解
- 2026年广州环保投资集团有限公司校园招聘考试参考题库及答案解析
- 湖北省黄石市阳新县人民政府所属事业单位招聘考前自测高频考点模拟试题(共500题)含答案解析
- 高磷血症科普
- 医学科研成果转化的法律路径与风险
- 《JYT 0449-2011教学用玻璃仪器 抽滤瓶》(2026年)实施指南
- SQE质量工程师岗位技能测试题
评论
0/150
提交评论