1 / 49

Keep on walking

Keep on walking. 《Delphi 程序设计 》 工学结合特色精品课程. —— 杨丽敬. 第六章 ADO 数据库编程. 本章要点: ADO 的概念 ADO 对象模型 Delphi 7 支持 ADO 的方式 Delphi 7 中 ADO 组件的属性、方法及其使用. 6.1 ADO 概述. 6.1.1 ADO 的概念

joseph-head
Download Presentation

Keep on walking

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Keep on walking 《Delphi程序设计》工学结合特色精品课程 ——杨丽敬

  2. 第六章ADO数据库编程 • 本章要点: • ADO的概念 • ADO对象模型 • Delphi 7支持ADO的方式 • Delphi 7中ADO组件的属性、方法及其使用

  3. 6.1 ADO概述 • 6.1.1 ADO的概念 • ADO(ActiveX Data Object)是Microsoft提供对各种数据库进行访问的高层接口,是DAO/RDO的后继产物,是Microsoft最新的数据访问组件(Microsoft数据访问组件简称MDAC)的一部分 。 • ADO是基于OLE DB之上的面向对象的数据访问模型,OLE DB是Microsoft开发的一种高性能的、基于COM的数据访问技术,其作用是向应用程序提供一个统一的数据访问方法,而不需要考虑数据源的具体格式和存储方式。

  4. 6.1.2 ADO对象模型及其对象

  5. rs = Server.CreateObject("ADODB.RecordSet") rs.Open(sqlStr,conn,1,A)   注:A=1表示读取数据;A=3表示新增、修改或删除数据。   在RecordSet组件中,常用的属性和方法有: rs.Fields.Count:RecordSet对象字段数。 rs(i).Name:第i个字段的名称,i为0至rs.Fields.Count-1 rs(i):第i个字段的数据,i为0至rs.Fields.Count-1 rs("字段名"):指定字段的数据。 rs.Record.Count:数据记录总数。 rs.EOF:是否最后一条记录。 rs.MoveFirst:指向第一条记录。 rs.MoveLast:指向最后一条记录。 rs.MovePrev:指向上一条记录。 rs.MoveNext:指向下一条记录。 rs.GetRows:将数据放入数组中。 rs.Properties.Count:ADO的ResultSet或Connection的属性个数。 rs.Properties(item).Name:ADO的ResultSet或Connection的名称。 rs.Properties:ADO的ResultSet或Connection的值。 rs.close():关闭连接。 • 1. 基本对象 • (1)Connection对象。(2)RecordSet对象 • (3)Command对象。(4)Field对象。 • (5)Property对象。(6)Parameter对象 • (7)Error对象。 • 2. 集合对象 • (1)Errors集合对象。 • (2)Parameters对象。 • (3)Fields对象。 • (4)Properties对象。

  6. 6.1.3 Delphi对ADO的支持方法

  7. 6.2 TADOConnection组件 • 6.2.1 TADOConnection组件功能说明 • TADOConnection组件用于建立与实际的物理数据库的连接,TADOCommand、TADODataSet、TADOTable、TADOQuery、TADOStoredPro等组件均可以通过它访问和操作数据库。 • 6.2.2 TADOConnection组件的常用属性 • 1. CommandCount属性2. Commands属性 • 3. CommandTimeout属性4. Connected属性

  8. 5. ConnectionObject属性6. ConnectionString属性 • 7. ConnectionOption属性8. ConnectionTimeout属性 • 9. CursorLocation属性 10. DataSetCount属性 • 11. DataSets属性12. DefaultDatabase属性 • 13. Errors属性14. InTransaction属性 • 15. KeepConnection属性16. Provider属性 • 17. State属性18. LoginPrompt属性

  9. 6.2.3 TADOConnection组件的常用方法 1. Open方法 语法格式如下: procedure Open; overload; procedure Open(const UserID: WideString; const Password: WideString); overload; 2. Close方法 使用格式如下: procedure Close; 3. Execute方法 格式1:

  10. function Execute(const CommandText: WideString; const CommandType: TCommandType = cmdText; • const ExecuteOptions: TExecuteOptions = []): _RecordSet; overload; • 格式2: • procedure Execute(const CommandText: WideString; const CommandType:CommandType; var • RecordsAffected: Integer; ExecuteOptions: TExecuteOptions = [eoExecuteNoRecords]); overload;

  11. 7. Cancel方法 • 语法格式如下: • procedure Cancel; • 8. GetProcedureName方法 • 语法格式如下: • procedure GetProcedureNames(List: TStrings); • 9. GetTableNames方法 • 语法格式如下: • procedure GetTableNames(List: TStrings; [SystemTables: Boolean = False]); • 10. GetFieldNames方法 • 语法格式如下: • procedure GetFieldNames(const TableName: String; List: TStrings);

  12. 6.2.4 TADOConnection组件的常用事件

  13. 6.2.5 使用TADOConnection建立到数据库的连接 • 1. 通过DSN建立连接 • 2. 通过选择数据库建立到Access数据库的连接 推荐使用数据模块 • 【例6-1】 编写一个显示当前目录下“教学.MDB”的数据库中的表名和字段名的程序。程序的设计界面如图6-14所示,程序的运行界面如图6-15所示。程序运行时把当前目录下的“教学.MDB”数据库中的表名显示在ListBox1列表框中,在ListBox1列表框中单击以选中一个表名时,该表所有的字段名将显示在ListBox2中。

  14. 分析:在窗体的OnCreate事件中首先使用ADOConnect1组件与当前目录下的“教学.MDB”建立连接,然后通过调用ADOConnection1的GetTableNames方法以获得“教学.MDB”数据库中的表名字符串列表并赋值给ListBox1的Items属性。在ListBox1中选中一个表时,将发生列表框的OnClick事件,在该事件中调用ADOConnection1组件的GetFieldNames方法并以选中的表名作为参数,得到选中表的字段名字符串列表并赋值给ListBox2的Items属性。 请思考:1.如果是SQL数据库,如何进行连接? 2.如何解决数据库文件的路径问题

  15. 实验十四、数据表的显示

  16. 6.3 TADOCommand组件 • 6.3.1 TADOCommand组件功能说明 • TADOConnection不但能够与数据库建立连接,还可以通过它的Execute方法执行SQL命令。在ADO中,TADOCommand组件是专门用来创建和执行命令的。 • TADOCommand组件执行在CommandText属性中指定的命令,一个命令可能在一次执行过程中需要某些参数,如果命令包括有关参数,则必须在Parameters属性中指定。可通过调用TADOCommand对象的Execute方法执行命令。 记录集可由数据集组件带回。如: • ADODataSet.RecordSet : = ADOCommand.Execute;

  17. 6.3.2 TADOCommand组件的常用属性 • 1. CommandObject属性2. CommandText属性 • 3. CommandTimeout属性 4. Connection属性 • 5. ConnectionString属性6. CommandType属性 • 7. ParamCheck属性 8. Parameters属性 • 9. Prepared属性 10. Properties属性 • 11. State属性

  18. 6.3.3 TADOCommand组件的常用方法 • 1. Assign方法 • 语法格式如下: • procedure Assign(Source: TPersistent); override; • 2. Cancel方法 • 语法格式如下: • procedure Cancel; • 3. Execute方法 • 格式1: • function Execute: _Recordset; overload;

  19. 格式2: • function Execute(const Parameters: OleVariant): _Recordset; overload; • 格式3: • function Execute(var RecordsAffected: Integer; const Parameters: OleVariant): _RecordSet; overload; 【例6-2】利用TADOCommand组件实现如下操作:把当前目录下的“教学.MDB”数据库中的“教师表”中的“工资”字段值全部改为原来的1.1倍,从而实现加工资的功能。程序的设计界面如图6-16所示。程序执行时,单击【连接到数据库】按钮将建立起到“教学.MDB”数据库的连接,然后单击【增加工资】按钮,将把“教师表”中的“工资字段”值全部修改为原来的1.1倍,单击【退出】按钮将先关闭连接并关闭应用程序。

  20. 分析:建立连接采用与例6-1同样的方法。要使TADOCommand执行命令,可先通过设置它的Connection属性值来和一个TADOConnection组件对象联系在一起,然后设置它的CommandType属性为需要的命令类型,再设置它的CommandText属性为要执行的命令文本,最后调用TADOCommand对象的Execute方法执行CommandText中存放的命令。

  21. 6.4 TADODataSet组件 • 6.4.1 TADODataSet组件功能说明 • TADODataSet组件是最常用的ADO数据集组件,具有从一个或多个ADO数据表中找到结果数据集的功能。结果数据集可以是直接从数据表中读取的,也可以是通过SQL语句从一个或多个数据表得到的。另外TADODataSet组件还可以用来处理调用TADOCommand对象的Execute方法返回的结果记录集。

  22. 6.4.2 TADODataSet组件的常用属性 • 1. RDSConnection属性2. BlockReadSize属性 • 3. CacheSize属性4. CanModify属性 • 5. CursorType属性6. EnableBCD属性 • 7. Filter属性8. Filtered属性 • 9. IndexDefs属性10. IndexFieldCount属性 • 11. IndexFieldNames属性12. IndexFields属性

  23. 13. IndexName属性14. LockType属性 • 15. MarshalOptions属性16. MasterFields属性 • 17. MaxRecords属性18. RecNo属性 • 19. RecordCount属性20. Recordset属性 • 21. RecordsetState属性22. RecordSize属性 • 23. RecordStatus属性24. Sort属性 • 25. StoreDefs属性

  24. 6.4.3 TADODataSet组件的常用方法 • 1. GetIndexNames方法 • 从表记录集中取得所用可用的索引名列表 • 2. BookmarkValid方法 • 该方法用来测试特定的书签是否合法,书签就是一个记录的标志 • 3.CancelBatch方法 • 使用该方法将取消批更新模式下对记录集的所有挂起的更新 • 4. CancelUpdates方法 • 使用该方法可取消挂起的缓存更新

  25. 5. DeleteRecords方法 • 删除记录集中的一个或多个记录 • 6. FilterOnBookmarks方法 • 该方法的作用是过滤记录到某个书签的位置 • 7. IsSequenced方法 • 该方法用来返回底层数据库是否将记录的个数作为记录的序号。 • 8. Locate方法 • 该方法用来根据一个或多个字段的值查找记录,并把查找到的记录设置为当前记录。

  26. 9. Lookup方法 • 该方法用来从数据集中查找记录,从查找到的记录中提取某些字段值 • 10.Next方法 • 该方法用来把记录指针移到下一条记录 • 11.Requery方法 • 该方法用来重新执行产生记录集的查询命令以便重新生成记录集 • 12.Seek方法 • 该方法用来根据索引查找记录 • 13. UpdateBatch方法 • 该方法用来把挂起的批更新写到物理数据库中 • 14.UpdateStatus方法 • 该方法用来返回当前记录的更新状态

  27. 6.4.4 TADODataSet组件的常用事件

  28. 【例6-3】利用TADODataSet组件编写一个实现对教师表中的数据进行显示、修改和查询的程序。程序设计界面如图6-19所示,程序的运行界面如图6-20所示。程序运行时在网格组件中显示教师表的内容,当在网格组件中单击某条记录时,该记录的若干个字段值将会显示在编辑框中,如图6-20所示。当在编辑框中修改了当前记录的内容后,单击【更新】按钮,修改的结果将保存到数据表中。单击【根据姓名查找】按钮将弹出一个输入对话框,要求用户输入一个姓名,然后根据姓名查找记录。如果找到则给出“找到记录”的提示并把当前记录设为该记录,如果没有找到也给“没有找到”的提示信息,并把当前记录设置为查找前的记录。【例6-3】利用TADODataSet组件编写一个实现对教师表中的数据进行显示、修改和查询的程序。程序设计界面如图6-19所示,程序的运行界面如图6-20所示。程序运行时在网格组件中显示教师表的内容,当在网格组件中单击某条记录时,该记录的若干个字段值将会显示在编辑框中,如图6-20所示。当在编辑框中修改了当前记录的内容后,单击【更新】按钮,修改的结果将保存到数据表中。单击【根据姓名查找】按钮将弹出一个输入对话框,要求用户输入一个姓名,然后根据姓名查找记录。如果找到则给出“找到记录”的提示并把当前记录设为该记录,如果没有找到也给“没有找到”的提示信息,并把当前记录设置为查找前的记录。

  29. 分析:本例由于要显示数据库的内容,故应使用能够返回结果记录集的TADODataSet组件。可用一个TADOConnection组件与实际的物理数据库连接起来,用一个TADODataSet组件执行命令从TADOConnection组件连接的数据库中提取记录形成记录集,再用一个TDataSource组件作为TADODataSet组件与数据控制组件连接的桥梁,用一个TDBGrid组件来显示记录集的内容。当记录指针位置发生改变时,要把当前记录的内容显示在编辑框中,本例定义了一个名为DispValue的过程用来实现该功能。另外本例还编写了一个名为SetValue的过程,该过程的作用是利用编辑框中的值修改当前记录的内容。根据姓名查找记录的值,可使用TADODataSet组件的Locate方法。

  30. 实验十:数据库的数据显示 • 用学过的ADO组件尝试不同的连接方法 • 把数据显示出来 • 尝试相对路径和计算路径函数的使用 • ADOcommand和ADOdataset的用法

  31. 6.6 TADOTable组件 • 6.5.1 TADOTable组件功能说明 • TADOTable组件用于通过一个单个的数据表来获取和操作数据集。TADOTable组件和TTable组件非常类似,许多属性、事件和方法也一样。如果不使用TADOConnection组件,TADOTable组件的ConnectionString属性就需要设定;如果使用TADOConnection组件,那么ConnectionString属性就不需要设定,直接设定其Connection属性使其指向TADOConnection组件即可。

  32. 6.5.2 TADOTable组件的常用属性 • 1. MasterSource属性 • 2. ReadOnly属性 • 3. TableDirect属性 • 4. TableName属性 • 6.5.3 TADOTable组件的常用方法 • 语法格式如下: • procedure GetIndexNames(List: TStrings);

  33. 6.6 TADOQuery组件 • 6.6.1 TADOQuery组件功能说明 • TADOQuery组件类似于Query组件,可以使用SQL语句在一个和多个数据表中选择字段,而且可以增加和删除数据。在使用该组件之前,必须要建立它到物理数据库之间的连接。如果不使用TADOConnection组件,TADOQuery组件的ConnectionString属性就需要设定;如果使用TADOConnection组件,那么ConnectionString属性就不需要设定,直接设定其Connection属性使其指向TADOConnection组件即可。

  34. 6.6.2 TADOQuery组件的常用属性 • 1. SQL属性 • 该属性用来指定利用TADOQuery组件来执行的SQL语句。 • 2. RowsAffected属性 • 该属性用来返回最近一次执行查询操作时影响到的记录数,即被操作的记录数。 • 6.6.3 TADOQuery组件的常用方法TADOQuery组件的常用方法是Open和ExecSQL,这两个方法的作用与TTable组件的同名方法的作用一致。TADOQuery组件的使用方法与TQuery组件也基本一致。

  35. 6.7 *TADOStoredPro组件 • TADOStoredProc组件通过ProcedureName属性指定存放在服务器上的一个存储过程,应用程序可以执行这个存储过程。如果TADOStoredProc组件是指向一个TADOConnection组件,为了与存储过程相联系,可以调用TADOConnection组件的GetProcedureNames方法,将数据库中的存储过程名返回,然后再将选中的存储过程名赋给ProcedureName属性。

  36. ADOTable、ADOQuery、ADODataSet、ADOCommand构件之间的比较:ADOTable、ADOQuery、ADODataSet、ADOCommand构件之间的比较:

  37. 6.8 ADO综合应用实例 • 【例6-4】编写一个显示选中数据表中的数据或显示SELECT语句执行结果的应用程序,显示的数据来源于当前目录下的“教学.MDB”数据库。程序的设计界面如图6-21所示,程序的运行界面如图6-22所示。程序运行时将在ComboBox1组合框中显示“教学.MDB”中的所有表名,可以通过选择确定在DBGrid组件中显示的是某个表中的数据还是执行某条SELECT语句后的结果。如果用户选择【数据表中的数据】,则可以从ComboBox1组合框中选择一个表名,然后单击“执行命令”按钮,表中的数据将会显示在DBGrid1表格中。如果用户选择【Select语句执行结果】,则可以Memo1组件中输入一条合法的SELECT语句,然后单击【执行命令】按钮,SELECT语句执行的结果将会显示在DBGrid1表格中。

  38. 分析:执行SQL语句可使用TADOQuery组件。可先通过TADOConnection组件建立与当前目录下的“教学.MDB”数据库的连接,然后通过设置TADOQuery组件的Connection属性使它能够通过TADOConnection组件访问数据库。通过一个TDataSource组件把TADOQuery组件和TDBGrid组件联系起来,使命令执行的结果集能够显示在TDBGrid组件中。在“执行命令”按钮的单击事件中,首先根据用户的选择及选择的表名或输入的SELECT语句,设置TADOQuery组件SQL属性,然后调用TADOQuery组件的Open方法得到结果集并显示在TDBGrid组件中。

  39. 【例6-5】设计一个对“教学.MDB”中的“教师表”进行显示和修改的程序,要求能够对教师表中的数据进行立即更新和批量更新。程序的设计界面如图6-23所示,程序的运行界面如图6-24所示。程序运行时,若选中“立即更新”,在编辑框中修改当前记录的内容,然后单击【更新】按钮,可将修改结果存回到数据库中;若选中【批量更新】,在网格控件中可以修改多处内容,然后如果单击【提交】按钮,则所有的修改均存放到数据库中去,如果单击【撤消】按钮,则所有的【修改】将被撤销。【例6-5】设计一个对“教学.MDB”中的“教师表”进行显示和修改的程序,要求能够对教师表中的数据进行立即更新和批量更新。程序的设计界面如图6-23所示,程序的运行界面如图6-24所示。程序运行时,若选中“立即更新”,在编辑框中修改当前记录的内容,然后单击【更新】按钮,可将修改结果存回到数据库中;若选中【批量更新】,在网格控件中可以修改多处内容,然后如果单击【提交】按钮,则所有的修改均存放到数据库中去,如果单击【撤消】按钮,则所有的【修改】将被撤销。

  40. 分析:本例涉及立即更新和批量更新两种操作。当使用立即更新时,只要声明当前记录的工作已经完成,系统将会将更改立刻传送到数据库。当使用批量更新时,系统只是收集对记录集的所有更改,直到声明该记录集的修改工作已经完成,更改后的数据才会全部提交给数据库。在提交给数据库之前,可以撤销刚刚对记录集所做的更改。

  41. 小结 • ADO是Micorsoft公司最新的基于OLE DB的数据访问模式,它几乎能够访问目前经常使用的所有格式的数据库。在Delphi 7中,通过ADO组件提供了对ADO的支持,ADO组件中的一部分可以看做对ADO对象模型中的某些对象的封装,然后以可视化的形式使用。ADO组件主要有TADOConnection,TADOCommand,TADODataSet,TADOTable,TADOQuery,TADOStoredProc,TRDSConnection等。TADOConnection组件的主要作用是与数据库建立连接,TADOCommand组件的主要作用是执行不返回结果记录集的SQL命令,TADODataSet组件的作用是形成一个记录集以便访问,TADOTable,TADOQuery和TADOSroredProc功能类似于TTable,TQuery和TStoredProc。本章详细介绍这些组件的属性、方法和事件,对每一种组件都通过实例详细讲解了使用方法。最后通过两个综合实例对本章的内容进行综合,目的是使读者能对使用ADO开发数据库应用程序的方法有一个全面的了解。

  42. 感谢聆听! Thanks for your time!

More Related