1. 查询数据库
这部分介绍能够通过SQL语句访问数据库的TQuery构件。
在客户端运行的封装了SQL语句的TQuery构件可以检索、插入、更新和删除数据。SQL是符合工业标准的关系数据库语言,可以用于远程的基于服务器的数据库,如Sybase、Oracle、InterBase和Microsoft SQL Server,也可以用于本地数据库如Paradox、dBASE、FoxPro和Access以及符合ODBC的数据库
这部分主要包含以下的内容:
(1)有效地使用查询
(2)使用TQuey构件可以查询哪些数据库
(3)如何使用使用TQuery构件
(4)指定要执行的SQL语句
(5)设置查询的参数
(6)执行查询
(7)准备查询
(8)释放SQL语句占用的资源
在客户端运行的封装了SQL语句的TQuery构件可以检索、插入、更新和删除数据。SQL是符合工业标准的关系数据库语言,可以用于远程的基于服务器的数据库,如Sybase、Oracle、InterBase和Microsoft SQL Server,也可以用于本地数据库如Paradox、dBASE、FoxPro和Access以及符合ODBC的数据库
这部分主要包含以下的内容:
(1)有效地使用查询
(2)使用TQuey构件可以查询哪些数据库
(3)如何使用使用TQuery构件
(4)指定要执行的SQL语句
(5)设置查询的参数
(6)执行查询
(7)准备查询
(8)释放SQL语句占用的资源
(9)异构查询
(10)提高查询的效率
(11)查询结果
(10)提高查询的效率
(11)查询结果
2. 有效地使用查询
要有效地使用查询,必须熟悉以下的内容
(1)标准的SQL语言以及所使用的服务器对SQL-92的限制和扩展
(2)熟悉BDE。
如果你已经是一个熟练的桌面数据库使用者,现在希望开发基于服务器的应用程序,可以参考“基于桌面的查询”。如果从来没有使用过SQL,需要学习这方面的知识。
如果你已经是一个熟练的基于数据库服务器的开发者,现在想使用Delphi开发客户端应用程序。此时虽然你对SQL和服务器比较熟悉,但也许不熟悉BDE,那么就需要学习一些BDE方面的资料。
本部分包括以下内容
要有效地使用查询,必须熟悉以下的内容
(1)标准的SQL语言以及所使用的服务器对SQL-92的限制和扩展
(2)熟悉BDE。
如果你已经是一个熟练的桌面数据库使用者,现在希望开发基于服务器的应用程序,可以参考“基于桌面的查询”。如果从来没有使用过SQL,需要学习这方面的知识。
如果你已经是一个熟练的基于数据库服务器的开发者,现在想使用Delphi开发客户端应用程序。此时虽然你对SQL和服务器比较熟悉,但也许不熟悉BDE,那么就需要学习一些BDE方面的资料。
本部分包括以下内容
(1)基于桌面的查询
(2)查询远程数据库
2.1查询桌面数据库
作为一个桌面开发者,已经对数据表、记录和字段的概念有所了解。可以使用TTable构件访问任何数据表中的任何记录和每一个字段。设置了TTable构件的TableName属性,就可以访问数据表中的数据了。
还可以使用TTable的范围和过滤功能在数据表中选择一部分记录。“范围”用于选择一块记录的值在一个特定的范围内的记录,比如选择雇员的名字大于Boll小于Smith的记录;“过滤”用于选择符合特定条件的非连续记录,比如选择客户编号的E-mail地址是California的。
查询非常类似于“过滤”。不同的是,查询要用到TQuery构件和SQL属性,有时可能用到Params属性,来返回,增加,删除,修改数据。从功能上讲,查询比“过滤”功能更强大,主要体现在:
(1)可以同时查询几个数据表
(2)可以让查询结果中只返回部分字段,而“过滤”将返回所有字段。这样的话提高了查询的效率和安全。内存不再消耗在无用的数据上,也防止了访问那些不允许用户查看和修改的
(2)查询远程数据库
2.1查询桌面数据库
作为一个桌面开发者,已经对数据表、记录和字段的概念有所了解。可以使用TTable构件访问任何数据表中的任何记录和每一个字段。设置了TTable构件的TableName属性,就可以访问数据表中的数据了。
还可以使用TTable的范围和过滤功能在数据表中选择一部分记录。“范围”用于选择一块记录的值在一个特定的范围内的记录,比如选择雇员的名字大于Boll小于Smith的记录;“过滤”用于选择符合特定条件的非连续记录,比如选择客户编号的E-mail地址是California的。
查询非常类似于“过滤”。不同的是,查询要用到TQuery构件和SQL属性,有时可能用到Params属性,来返回,增加,删除,修改数据。从功能上讲,查询比“过滤”功能更强大,主要体现在:
(1)可以同时查询几个数据表
(2)可以让查询结果中只返回部分字段,而“过滤”将返回所有字段。这样的话提高了查询的效率和安全。内存不再消耗在无用的数据上,也防止了访问那些不允许用户查看和修改的
数据。
查询也可以带参数,此时称为参数化查询。所谓参数,类似于变量,它的实际的值由BDE在执行SQL语句之前赋值。参数化查询的好处是,不需要修改SQL语句,只要修改参数的值,就能执行不同的查询功能,因此查询具有很大的灵活性。大部分情况下,使用TQuery构件是为了在数据表中选择一部分字段和记录(这和TTable构件相似),但也可以使用SQL语句实现更新、插入和删除记录的功能,并且查询通常不返回记录,这是与TTable构件的一个区别。
要了解使用SQL属性指定SQL语句,可参看“指定要执行的SQL语句”.要了解使用参数化查询,可参看“设置查询参数”,要了解如何执行查询,可查看“查询的执行”
2.2查询远程数据库
作为数据库的设计者,你对SQL已经很熟悉了。所谓的查询就是可以用来访问数据的SQL语句。
SQL属性和其参数是TQuery语句中最重要的组成部分。TQuery构件的SQL属性用于指定要执行的SQL语句, Params属性用于提供参数。TQuery构件的功能并不只限于SQL语句和参数,它还是BDE与应用程序之间的接口。
查询也可以带参数,此时称为参数化查询。所谓参数,类似于变量,它的实际的值由BDE在执行SQL语句之前赋值。参数化查询的好处是,不需要修改SQL语句,只要修改参数的值,就能执行不同的查询功能,因此查询具有很大的灵活性。大部分情况下,使用TQuery构件是为了在数据表中选择一部分字段和记录(这和TTable构件相似),但也可以使用SQL语句实现更新、插入和删除记录的功能,并且查询通常不返回记录,这是与TTable构件的一个区别。
要了解使用SQL属性指定SQL语句,可参看“指定要执行的SQL语句”.要了解使用参数化查询,可参看“设置查询参数”,要了解如何执行查询,可查看“查询的执行”
2.2查询远程数据库
作为数据库的设计者,你对SQL已经很熟悉了。所谓的查询就是可以用来访问数据的SQL语句。
SQL属性和其参数是TQuery语句中最重要的组成部分。TQuery构件的SQL属性用于指定要执行的SQL语句, Params属性用于提供参数。TQuery构件的功能并不只限于SQL语句和参数,它还是BDE与应用程序之间的接口。
客户端应用程序使用TQuery构件形成SQL语句和参数,指定要查询的数据库,执行查询。TQuery构件调用BDE执行查询,与数据库服务器建立联系(主要是SQL Links),远程服务器把查询结果返回给BDE,再由BDE返回给客户端应用程序。
当使用TQuey构件的时候,必须意识到用来描述BDE的一些术语可以造成错觉。比如说,BDE经常使用“别名”来描述数据库服务器的标准名称。其实,BDE别名是保存在一个配置文件中,是在TQuery构件的DatabaseName属性中设置
同时,BDE的帮助文件(位于\Borland\Common Files\BDE\BDE32.HLP)中建议使用查询的时候最好使用参数查询。
要了解使用SQL属性指定SQL语句,可参看“指定要执行的SQL语句”。要了解使用参数化查询,可参看“设置查询参数”;要了解如何准备查询,可参看“查询的准备”;要了解如何执行查询,可查看“查询的执行”。
当使用TQuey构件的时候,必须意识到用来描述BDE的一些术语可以造成错觉。比如说,BDE经常使用“别名”来描述数据库服务器的标准名称。其实,BDE别名是保存在一个配置文件中,是在TQuery构件的DatabaseName属性中设置
同时,BDE的帮助文件(位于\Borland\Common Files\BDE\BDE32.HLP)中建议使用查询的时候最好使用参数查询。
要了解使用SQL属性指定SQL语句,可参看“指定要执行的SQL语句”。要了解使用参数化查询,可参看“设置查询参数”;要了解如何准备查询,可参看“查询的准备”;要了解如何执行查询,可查看“查询的执行”。
3. 使用TQuey构件可以查询哪些数据库
TQuery构件可以访问以下的数据库:
(1)Paradox或dBASE,这是通过BDE内置的Local SQL实现的。Local SQL是SQL-92
TQuery构件可以访问以下的数据库:
(1)Paradox或dBASE,这是通过BDE内置的Local SQL实现的。Local SQL是SQL-92
标准的一个子集,支持大部分DML和DDL。可参看“LOCALSQL.HLP”查询更详细的内容。
(2)本地InterBase Server(通过InterBase引擎实现)
(3)远程数据库,如Oracle、Sybase、MS-SQL Server、InFormix、DB2和InterBase。但是,必须安装相应的SQL Links驱动程序和客户端软件。不同的服务器对标准SQL都有不同的限制和扩展,在查询远程数据库之前,务必要查阅它的相关文档。
(4)Delphi 4还支持异构查询。可以同时查询几个不同类型的数据库(比如说,从Oracle和Paradox数据表之间进行查询)。当创建了异构查询的时候,BDE使用本地的SQL执行查询。可参看“创建异构查询”
(2)本地InterBase Server(通过InterBase引擎实现)
(3)远程数据库,如Oracle、Sybase、MS-SQL Server、InFormix、DB2和InterBase。但是,必须安装相应的SQL Links驱动程序和客户端软件。不同的服务器对标准SQL都有不同的限制和扩展,在查询远程数据库之前,务必要查阅它的相关文档。
(4)Delphi 4还支持异构查询。可以同时查询几个不同类型的数据库(比如说,从Oracle和Paradox数据表之间进行查询)。当创建了异构查询的时候,BDE使用本地的SQL执行查询。可参看“创建异构查询”
4. 如何使用TQuery构件
要在设计期间使用TQuery构件,需要:
(1)把一个TQuery构件放到数据模块(TDataModule)上,设置它的Name属性
(2)设置TQuery构件的DatabaseName属性为指定要查询的数据库。对于Paradox和dBASE来说,DatabaseName属性可以设为BDE别名或者数据表所在的路径,或者是TDatabase构件的DatabaseName属性中设定的值。
(3)在SQL属性指定要执行的SQL语句,有必要的话还可以在Params属性设置相关的参
要在设计期间使用TQuery构件,需要:
(1)把一个TQuery构件放到数据模块(TDataModule)上,设置它的Name属性
(2)设置TQuery构件的DatabaseName属性为指定要查询的数据库。对于Paradox和dBASE来说,DatabaseName属性可以设为BDE别名或者数据表所在的路径,或者是TDatabase构件的DatabaseName属性中设定的值。
(3)在SQL属性指定要执行的SQL语句,有必要的话还可以在Params属性设置相关的参
数。可查看“在设计期间指定TQuery构件的SQL属性”。
(4db2数据库sql语句)如果要把查询的结果显示在数据控件上,需要把TDataSource构件放到数据模块上,设置它的DataSet属性为指定的TQuery构件。TDataSource构件是用来从查询构件中返回查询的结果,并且把查询的结果显示在数据控件中。最后,需要设置数据控件的DataSource和DataField属性。
(5)执行SQL语句。如果希望查询返回结果,需要把Active属性设为True,或者运行期调用Open;如果不需要返回查询结果,调用ExecSQL。在调用Open或ExecSQL之前,最好先调用Prepare通知服务器作好准备。
在运行期间第一次执行查询,需要:
(1)关闭TQuery构件
(2)在SQL属性中提供SQL语句。如果在设计期间没有设置SQL属性或者在运行的时候需要修改SQL语句都必须这样做。如果要使用设计期间提供的SQL语句,此步可以忽略。要了解如何设置SQL属性,可参看“指定要执行的SQL语句”。
(3)直接在Params属性中或者调用ParamByName方法设置相关的参数和参数的值。如
(4db2数据库sql语句)如果要把查询的结果显示在数据控件上,需要把TDataSource构件放到数据模块上,设置它的DataSet属性为指定的TQuery构件。TDataSource构件是用来从查询构件中返回查询的结果,并且把查询的结果显示在数据控件中。最后,需要设置数据控件的DataSource和DataField属性。
(5)执行SQL语句。如果希望查询返回结果,需要把Active属性设为True,或者运行期调用Open;如果不需要返回查询结果,调用ExecSQL。在调用Open或ExecSQL之前,最好先调用Prepare通知服务器作好准备。
在运行期间第一次执行查询,需要:
(1)关闭TQuery构件
(2)在SQL属性中提供SQL语句。如果在设计期间没有设置SQL属性或者在运行的时候需要修改SQL语句都必须这样做。如果要使用设计期间提供的SQL语句,此步可以忽略。要了解如何设置SQL属性,可参看“指定要执行的SQL语句”。
(3)直接在Params属性中或者调用ParamByName方法设置相关的参数和参数的值。如
果查询不包含参数,或者不需要改变设计期间指定的参数和参数的值,那么此步可以忽略。可参看“设置查询参数”
(4)调用Prepare方法初始化BDE和把参数的值绑定到查询中。虽然是强烈建议这样做,但是此步也是可以忽略的。可参看“准备查询”。
(5)调用Open执行查询并且返回结果,或者调用ExecSQL执行查询但不返回结果。可参看“查询的执行”。
在已经执行了一次查询后,只要不改变SQL语句,应用程序将在关闭查询和重新打开,重新执行查询执行之间循环,此时,不再需要“准备”查询。可参看“查询的执行”。
(4)调用Prepare方法初始化BDE和把参数的值绑定到查询中。虽然是强烈建议这样做,但是此步也是可以忽略的。可参看“准备查询”。
(5)调用Open执行查询并且返回结果,或者调用ExecSQL执行查询但不返回结果。可参看“查询的执行”。
在已经执行了一次查询后,只要不改变SQL语句,应用程序将在关闭查询和重新打开,重新执行查询执行之间循环,此时,不再需要“准备”查询。可参看“查询的执行”。
5. 指定要执行的SQL语句
设置SQL属性指定要执行的SQL语句。在设计期间,只要把Active属性设为True,就会自动执行SQL语句。在运行期间,首先要调用Prepare通知服务器,然后调用Open或ExecSQL执行SQL语句。
SQL属性本身是一个TStrings对象,是一个字符串数组和一系列属性,事件,方法的集合。SQL属性可以分成几行写,TQuery构件会自动把几行字符串合并成一条可执行的SQL语句。把SQL语句分成几行写的好处是,可以把SQL语句分割成几个“逻辑单元”,逻辑结构比
设置SQL属性指定要执行的SQL语句。在设计期间,只要把Active属性设为True,就会自动执行SQL语句。在运行期间,首先要调用Prepare通知服务器,然后调用Open或ExecSQL执行SQL语句。
SQL属性本身是一个TStrings对象,是一个字符串数组和一系列属性,事件,方法的集合。SQL属性可以分成几行写,TQuery构件会自动把几行字符串合并成一条可执行的SQL语句。把SQL语句分成几行写的好处是,可以把SQL语句分割成几个“逻辑单元”,逻辑结构比
较清楚,有利于今后维护和调试。因此,SQL语句的SELECT部分和WHERE部分一般都不在同一行上。
SQL语句可以不带参数,把字段名称和值固定在SQL语句中。SQL语句也可是一个参数化查询,其中包含有可在执行时指定替换值的参数。例如,下面这个SQL语句就是硬写(Hard-Coded)的:
SELECT * FROM Customer WHERE CustNo = 1231
“硬写”语句对那些需要执行确定的,每次运行已知的查询是非常有用的。在设计期间或者运行期间,可以很容易地使用另外一个“硬写”语句或者参数化查询代替原来的“硬写”语句。每当SQL属性发生变化的时候,查询自动关闭。
注意:如果要查询的是本地数据库(使用BDE引擎),并且SQL语句中的字段名包含空格或其他特殊符号,必须用引号括起来,前面还要加上数据表名称和小圆点。
如果用参数的话,查询就灵活得多。使用参数查询,应用程序不需要改写SQL语句本身,只要修改参数的值,就能使SQL语句执行不同的查询功能。在执行SQL语句之前,TQuery构
SQL语句可以不带参数,把字段名称和值固定在SQL语句中。SQL语句也可是一个参数化查询,其中包含有可在执行时指定替换值的参数。例如,下面这个SQL语句就是硬写(Hard-Coded)的:
SELECT * FROM Customer WHERE CustNo = 1231
“硬写”语句对那些需要执行确定的,每次运行已知的查询是非常有用的。在设计期间或者运行期间,可以很容易地使用另外一个“硬写”语句或者参数化查询代替原来的“硬写”语句。每当SQL属性发生变化的时候,查询自动关闭。
注意:如果要查询的是本地数据库(使用BDE引擎),并且SQL语句中的字段名包含空格或其他特殊符号,必须用引号括起来,前面还要加上数据表名称和小圆点。
如果用参数的话,查询就灵活得多。使用参数查询,应用程序不需要改写SQL语句本身,只要修改参数的值,就能使SQL语句执行不同的查询功能。在执行SQL语句之前,TQuery构
件会自动把实际的值替换SQL语句中的参数,即使并没有显式地调用Prepare函数。
下面这条SQL语句是典型的参数化查询:
SELECT * FROM Customer WHERE CustNo = :Number
其中,Number就是一个参数,它的前面必须加冒号。在运行期间,应用程序必须提供Number参数的值,每次执行SQL语句时,Number参数的值可以不同。
实际赋给Number参数的值是通过TQuery的Params属性提供的。
技巧:最好把参数的名称和实际字段的名称设置为相同
可参看:
在设计期间指定SQL属性
在运行期间指定SQL属性
5.1在设计期间指定SQL属性
下面这条SQL语句是典型的参数化查询:
SELECT * FROM Customer WHERE CustNo = :Number
其中,Number就是一个参数,它的前面必须加冒号。在运行期间,应用程序必须提供Number参数的值,每次执行SQL语句时,Number参数的值可以不同。
实际赋给Number参数的值是通过TQuery的Params属性提供的。
技巧:最好把参数的名称和实际字段的名称设置为相同
可参看:
在设计期间指定SQL属性
在运行期间指定SQL属性
5.1在设计期间指定SQL属性
在设计期间,要指定SQL语句,可以在“对象观察器”中单击SQL属性边上的省略号按钮,弹出一个字符串列表编辑器。
SQL语句可以分成几行写,但同一单词不能分开。分成几行写的好处是易读,易改,易调试。
一般情况下,SQL属性只能包含一条完整的SQL语句,虽然这些SQL语句是相当复杂的(比如:在Where语句中包含多个And Or逻辑编辑符)。但有些服务器允许同时执行几条SQL语句,这种情况下,可以输入多条SQL语句。
提示:如果使用Delphi 4的C/S版本或Enterprise版本,可以使用SQLBuilder这个可视化的工具来建立SQL语句。要使用SQL Builder,选中TQuery构件,单击鼠标右键,在弹出的菜单中选择“SQL Builder”。如何使用"SQL Builder",需要查在线帮助。
5.2在运行期间设置SQL属性
在运行期间,要指定SQL属性有三种方式:
(1)直接设置SQL属性
(2)调用LoadFromFile从文件中读取SQL语句
(3)从另一个TStrings对象中获得SQL语句
SQL语句可以分成几行写,但同一单词不能分开。分成几行写的好处是易读,易改,易调试。
一般情况下,SQL属性只能包含一条完整的SQL语句,虽然这些SQL语句是相当复杂的(比如:在Where语句中包含多个And Or逻辑编辑符)。但有些服务器允许同时执行几条SQL语句,这种情况下,可以输入多条SQL语句。
提示:如果使用Delphi 4的C/S版本或Enterprise版本,可以使用SQLBuilder这个可视化的工具来建立SQL语句。要使用SQL Builder,选中TQuery构件,单击鼠标右键,在弹出的菜单中选择“SQL Builder”。如何使用"SQL Builder",需要查在线帮助。
5.2在运行期间设置SQL属性
在运行期间,要指定SQL属性有三种方式:
(1)直接设置SQL属性
(2)调用LoadFromFile从文件中读取SQL语句
(3)从另一个TStrings对象中获得SQL语句
5.3直接设置SQL属性(运行期间)
(1)调用Close函数。即使在改变SQL属性的时候会自动关闭查询,不过最好在修改SQL语句之前调用Close方法
(2)如果原来的SQL语句不再有用,调用Clear方法。
(3)如果创建新的SQL语句或者向SQL语句中增加一行,可以调用Add方法;如果要修改某行,需要使用使用SQL属性,并且把索引号设置为要修改的行号,给这行赋予新值。比如:
CustomerQuery.SQL[1] := 'WHERE Company = "Light Shopp"';
把CustomerQuery的SQL语句的第2行内容修改为Light Shopp
(4)调用Open或者ExecSQL执行查询
举例:
with CustomerQuery do
begin
Close; { close the query if it's active }
(1)调用Close函数。即使在改变SQL属性的时候会自动关闭查询,不过最好在修改SQL语句之前调用Close方法
(2)如果原来的SQL语句不再有用,调用Clear方法。
(3)如果创建新的SQL语句或者向SQL语句中增加一行,可以调用Add方法;如果要修改某行,需要使用使用SQL属性,并且把索引号设置为要修改的行号,给这行赋予新值。比如:
CustomerQuery.SQL[1] := 'WHERE Company = "Light Shopp"';
把CustomerQuery的SQL语句的第2行内容修改为Light Shopp
(4)调用Open或者ExecSQL执行查询
举例:
with CustomerQuery do
begin
Close; { close the query if it's active }
with SQL
do begin
Clear; { delete the current SQL statement, if any }
Add('SELECT * FROM Customer'); { add first line }
Add('WHERE Company = Light Diver'); { ... and second line }
end;
Open; { activate the query }
end;
提示:
如果带有参数查询,必须在打开或者执行查询之前调用Prepare方法设置这些参数的初始值。显式地调用Prepare方法对于同一个SQL语句被多次重复调用是非常有用的,否则的话这个SQL会自动由TQuery构件调用。
5.4调用LoadFromFile从文件中读取SQL语句
也可以调用LoadFromFile从文件中获取SQL语句,这主要是因为TStrings对象支持文件操
do begin
Clear; { delete the current SQL statement, if any }
Add('SELECT * FROM Customer'); { add first line }
Add('WHERE Company = Light Diver'); { ... and second line }
end;
Open; { activate the query }
end;
提示:
如果带有参数查询,必须在打开或者执行查询之前调用Prepare方法设置这些参数的初始值。显式地调用Prepare方法对于同一个SQL语句被多次重复调用是非常有用的,否则的话这个SQL会自动由TQuery构件调用。
5.4调用LoadFromFile从文件中读取SQL语句
也可以调用LoadFromFile从文件中获取SQL语句,这主要是因为TStrings对象支持文件操
作。LoadFromFile会自动把原来的SQL语句清掉。比如:
CustomerQuery.Close;
CustomerQuery.SQL.LoadFromFile('c:\');
CustomerQuery.Open;
5.5从另一个TStrings对象中获得SQL语句
还可以从另一个TStrings对象中获取SQL语句,需要调用TStrings的Assign方法。Assign 会自动把原来的SQL语句清空。比如:
CustomerQuery.Close;
CustomerQuery.SQL.Assign(Memo1.Lines);
CustomerQuery.Open
CustomerQuery.Close;
CustomerQuery.SQL.LoadFromFile('c:\');
CustomerQuery.Open;
5.5从另一个TStrings对象中获得SQL语句
还可以从另一个TStrings对象中获取SQL语句,需要调用TStrings的Assign方法。Assign 会自动把原来的SQL语句清空。比如:
CustomerQuery.Close;
CustomerQuery.SQL.Assign(Memo1.Lines);
CustomerQuery.Open
6.
设置查询的参数
参数化查询的SQL语句中包含了参数(或者称为变量),而参数的值可以在设计期间或者运行期间指定。通常,参数代表传递到SQL语句中的数据的值(类同于函数或者过程中的参数的含义)。比如,
INSERT INTO Country (Name, Capital, Population)
VALUES (:Name, :Capital, :Population)
其中,:Name、:Capital和:Population是三个参数。而这三个参数的实际值是在运行期间由应用程序来提供。在第一次执行查询之前,应用程序必须调用Prepare方法把参数的当前值绑定到SQL语句中。“绑定”意味着BDE和服务器预先为SQL语句及其参数分配好资源,以加快查询速度。比如:
with Query1 do
begin
Close;
Unprepare;
参数化查询的SQL语句中包含了参数(或者称为变量),而参数的值可以在设计期间或者运行期间指定。通常,参数代表传递到SQL语句中的数据的值(类同于函数或者过程中的参数的含义)。比如,
INSERT INTO Country (Name, Capital, Population)
VALUES (:Name, :Capital, :Population)
其中,:Name、:Capital和:Population是三个参数。而这三个参数的实际值是在运行期间由应用程序来提供。在第一次执行查询之前,应用程序必须调用Prepare方法把参数的当前值绑定到SQL语句中。“绑定”意味着BDE和服务器预先为SQL语句及其参数分配好资源,以加快查询速度。比如:
with Query1 do
begin
Close;
Unprepare;
ParamByName('Name').AsString := 'Japan';
ParamByName('Capital').AsString := 'Tokyo';
ParamByName('Population').AsInteger := 40000;
Prepare;
Open;
end;
可参看
(1)在设计期间提供参数
(2)在运行期间提供参数
(3)从另一个数据表获得参数
6.1 在设计期间提供参数
在设计期间,SQL语句中出现的参数(必须先在SQL语句中先指定参数)是在TQuery构件的Params属性中保存的,其本身是一个TParam对象。可以使用“对象观察器”设置其相关的属性。而如果SQL语句中没有任何参数的话,在Params属性中是没有任何内容的。但是
ParamByName('Capital').AsString := 'Tokyo';
ParamByName('Population').AsInteger := 40000;
Prepare;
Open;
end;
可参看
(1)在设计期间提供参数
(2)在运行期间提供参数
(3)从另一个数据表获得参数
6.1 在设计期间提供参数
在设计期间,SQL语句中出现的参数(必须先在SQL语句中先指定参数)是在TQuery构件的Params属性中保存的,其本身是一个TParam对象。可以使用“对象观察器”设置其相关的属性。而如果SQL语句中没有任何参数的话,在Params属性中是没有任何内容的。但是
也可以运行期间动态增加参数。
要在设计期间访问参数
(1)选中TQuery构件
(2)单击Params属性边上的省略号按钮,弹出如下图所示的“参数编辑器”。
(3)在“参数编辑器”中,选中需要设置的参数
(4)在“对象观察器”中浏览或者修改参数的属性
如果SQL语句中没有包含任何参数,则上图所示的编辑器就是空白的。这个编辑器的工具栏总是禁止的。如果在SQL中已经定义了参数,那么所有的参数都会出现在“参数编辑器”中
注意:当在“参数编辑器”中单击右键的时候,也会出现"Add"和"Delete",但是我们注意到
要在设计期间访问参数
(1)选中TQuery构件
(2)单击Params属性边上的省略号按钮,弹出如下图所示的“参数编辑器”。
(3)在“参数编辑器”中,选中需要设置的参数
(4)在“对象观察器”中浏览或者修改参数的属性
如果SQL语句中没有包含任何参数,则上图所示的编辑器就是空白的。这个编辑器的工具栏总是禁止的。如果在SQL中已经定义了参数,那么所有的参数都会出现在“参数编辑器”中
注意:当在“参数编辑器”中单击右键的时候,也会出现"Add"和"Delete",但是我们注意到
在TQuery构件,永远也不可以选择这两项。也就是说,要在设计期间添加和删除参数必须通过SQL属性
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论