Delphi数据库编程新手指南(07)
来源:互联网 发布:双色球算法必中6红147 编辑:程序博客网 时间:2024/05/29 16:03
用AOD查询
SQL with TADOQuery
TADOQuery组件通过调用SQL语句,来获取ADO数据库中一个或多个表的数据。
这些SQL语句可以是DDL(数据定义语言)语句,如CREATE TABLE、ALTER INDEX等等;也可以是DML(数据操纵语言)语句,如SELECT、UPDATE和DELETE。不过,最常用的还是SELECT语句——生成一个类似使用Table组件时的视图。
注意:虽然ADOQuery组件也可用来执行指令,但更恰当的方式是用ADOCommand组件。因其不会返回结果集,常用来执行DDL指令或存储过程(即使对于这样的操作你更应使用TADOStoredProc)。
ADOQuery组件使用的SQL必须与正在使用的ADO驱动程序相匹配。换句话说,你应该熟悉不同SQL间的差异,例如,MS Access和MS SQL。
使用ADOTable组件访问数据库中的数据,必须使其与数据库建立连接——通过它的ConnectionString属性或在Connection属性中指定单独的ADOConnection组件。
创建一个Delphi窗体,使其能从Access数据库中检索数据。简单放置几个相关的数据访问、感知组件,以及ADOQuery,并像前几章那样将它们关联起来即可。数据访问组件:DataSource、ADOConnection以及ADOQuery;数据感知组件:如DBGrid。
如前所述,通过使用ObjectInspector来设置这些组件之间的关系:
DBGrid1.DataSource =DataSource1DataSource1.DataSet = ADOQuery1ADOQuery1.Connection =ADOConnection1//使用第二章的方法来创建ConnectionStringADOConnection1.ConnectionString= ...ADOConnection1.LoginPrompt =False执行一个SQL查询(Doing a SQL query)
TADOQuery组件不像TADOTable那样具有TableName属性。它有一个SQL属性(TStrings类型)——用来存储SQL语句。可以在设计时通过Object Inspector或在运行时通过代码中来设置SQL属性的值。
设计时,在Object Inspector的SQL属性中单击‘…’按钮,调用属性编辑器,并键入以下SQL语句:“SELECT * FROM Authors”。
根据语句的类型,将用下列两种方法之一来执行SQL语句。数据定义语句通常用ExecSQL方法执行。例如,要从某个表中删除某条特定记录,可以写一条DELETE DDL语句,并运行Query的ExecSQL方法。执行(普通)SQL语句,将TADOQuery.Active属性设为True或调用Open方法(它们本质上是相同的)。此方法类似用TADOTable组件检索表数据。
在运行时,可以将SQL属性中的SQL语句作为StringList对象使用:
with ADOQuery1 do begin Close; SQL.Clear; SQL.Add('SELECT * FROMAuthors '); SQL.Add('ORDER BYauthorname DESC'); Open;end;上述代码,在运行期间关闭数据集,清空SQL属性中的SQL字符串,赋给新的SQL指令并通过调用Open方法激活数据集。
注意,用ADOQUERY组件来创建字段对象的持久性列表,显然是没有任何意义的。因在下一次调用Open方法时,SQL可能已完全不同,其整个提交集的名称(和类型)都可能会改变。当然,如果只用ADOQUERY从某个表的固定字段集中取行;以及结果集依赖于该SQL语句的WHERE部分时例外。
动态查询(Dynamic queries)
TADOQuery组件最为突出的优点便是Params属性。参数化查询即在一个SQL语句的WHERE子句中使用参数,进行灵活的行/列选择。该Params属性允许在预置的SQL语句中设置替换参数。一个参数是一个占位符,作为WHERE子句中的值,需在进行查询之前定义。要在查询语句中指定一个参数,可在参数名称前使用冒号(:)。
设计时用Object Inspector设置SQL属性,如下所示:
ADOQuery1.SQL := 'SELECT *FROM Applications WHERE type = :apptype'关闭SQL属性编辑器后,在Object Inspector中单击Parameters属性后的”…”按钮,即可打开参数编辑窗口,呈现出前面SQL语句中被命名为APPTYPE的参数。通过参数编辑窗口我们可以在设计时设置参数集合内的参数值,但在多数情况下,我们需要在运行时改变参数。参数编辑器可用于指定参数的数据类型和默认值。
这些参数可以在运行时被改变,这时,查询将重新执行并刷新数据。为了实现参数化查询,我们需在执行该查询之前为每个参数提供一个值。要修改参数值,我们可以使用Params属性或ParamByName方法。例如下面给定的SQL语句,在运行时,可用以下代码更改参数:
with ADOQuery1 dobegin Close; SQL.Clear; SQL.Add('SELECT* FROM Applications WHERE type =:apptype'); Parameters.ParamByName('apptype').Value:='graphics'; Open;end;
浏览和编辑查询(Navigating andediting the query)
用ADOQUERY返回一组或一个(多个)表中的记录,与通过导航条浏览ADOTable组件中的数据集(“Behind data in datasets”一章中)方法是类似的。
一般来说,当数据集被编辑时,不应使用ADOQUERY组件。因为基于SQL的查询主要用于报表显示,而此时查询返回的结果,可能来至于一个正在被编辑的数据集(造成前后数据不一致)。只有从单一表、且不使用任何SQL聚合函数时,用ADOQUERY还是ADOTAble,其返回的结果集都是相同的。
实例(An example)
我们将编写一个小例子来了解ADOQUERY的一些方法——一个可用于从数据库中的各个表中提取行的查询。要列出数据库中的所有表,我们可以用ADOConnection组件的GetTableNames方法。在窗体的OnCreate事件添加GetTableNames,将得到的字段列表依次增加到ComboBox组件中。按钮(Button)用来关闭查询并重新拾取表检索记录。事件处理程序如下:
procedureTForm1.FormCreate(Sender: TObject);begin ADOConnection1.GetTableNames(ComboBox1.Items);end; procedure TForm1.Button1Click(Sender:TObject);var tblname : string;beginif ComboBox1.ItemIndex < 0then Exit;tblname :=ComboBox1.Items[ComboBox1.ItemIndex];with ADOQuery1 do begin Close; SQL.Text := 'SELECT * FROM ' + tblname; Open;end;end;
注,使用ADOTable的TableName属性会显得更简单。
- Delphi数据库编程新手指南(07)
- Delphi数据库编程新手指南(目录)
- Delphi数据库编程新手指南(01)
- Delphi数据库编程新手指南(02)
- Delphi数据库编程新手指南(03)
- Delphi数据库编程新手指南(04)
- Delphi数据库编程新手指南(05)
- Delphi数据库编程新手指南(06)
- Delphi数据库编程新手指南(08)
- Delphi数据库编程新手指南(09)
- Delphi数据库编程新手指南(10)
- Delphi数据库编程新手指南(11)
- 游戏编程新手指南
- UE4新手之编程指南
- Delphi数据库编程教程(二)
- Delphi数据库编程教程(三)
- Delphi数据库编程教程(四)
- Delphi数据库编程教程(五)
- 青春划过指尖
- js捕捉键盘事件和按键键值
- 心得2--XML约束--DTD精讲
- 对象、list、map、set等转换为json
- Asp.net 2.0 无刷新图片上传+回显
- Delphi数据库编程新手指南(07)
- Mysql的索引和查询优化
- magnto 有用的文档
- eclipse快捷键大全
- emacs+etags and vi shortcut key
- myeclipse8.6安装插件问题
- IIS 7.5 Express 简易服务器
- Struts2中文件file的上传和下载
- 我们都一样