来源:远方网络 | 2005-12-31 9:36:20 | (有1895人读过)
3 SQL语言编程概述
在Delphi应用程序中的SQL命令语句是包含在TQuery部件的SQL属性中,TQuery部件的SQL属性是TString类型的,也就是说SQL属性值是一个字符串列表,这个字符串列表非常类似于一个字符串类型的数组,有关TString类型的信息请参看联机帮助。在前一节里我们介绍了TQuery部件可以执行两种SQL语句:
● 静态SQL语句
● 动态SQL语句
静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量,例如下面的语句便是一条静态SQL语句:
Select * From Cusromer Where CustNo = 1234;
而动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,例如下面的语句是一条动态SQL语句:
Select * From Customer Where CustNo =: Number;
其中的变量Number便是一个参数变量,它由一个冒号引导,在程序运行过程中,必须要为该参数赋值,该条SQL语句才能正确执行,每次运行应用程序时可以为该参数变量赋予不同的值。
3.1 SQL命令文本的编写
1. 使用String List Editor编写
我们要为TQuery部件的SQL属性设置SQL命令文本时,可以在应用窗体中选择TQuery部件且双击Object Inspector窗口中的SQL属性,这样便打开了String List Editor 窗口,在该窗口中我们便可以编写各种SQL命令,如图17.3所示。
在编写完适当的SQL语句之后,选择 OK 按钮便可以将编辑器中的 SQL 命令文装入到TQuery部件的SQL属性中,选择SAVE按钮可以将编写好的SQL命令保存到一个文件中供以后编程时使用。我们在编写SQL命令文本时还可以选择Load按钮从一个 SQL 命令文件中调入SQL命令。在程序运行过程中,要想设置TQuery部件的SQL属性,必须首先调用Close方法,关闭TQuery部件,然后再调用Clear方法清除SQL属性中现存的SQL命令语句,最后再调用Add方法为SQL属性设置新的SQL命令语句。例如:
Query1.Close {关闭Query1)
Query1.SQL.Clear {清除SQL属性中的SQL命令语句}
Query1.SQL.Add('Select * From Country');
Query1.SQL.Add('Where Name ="ARGENTINA" ');
在为TQuery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery部件已经被关闭了,调用Close方法时不会产生任何影响。在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面,在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去。
在这里要特别注意的,一般情况下TQuery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句。当然有些数据库服务器也支持在TQuery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句。
2. 使用Visual Query Builder编写
客户/服务器版本的Delphi还包含一个可视化的查询构造器Visual Query Builder ,用这个可视化的工具我们只能编写Select语句。在应用程序窗体中选择TQuery部件后,单击鼠标右键,弹出一个弹出式菜单,从中选择Run Visual Query Builder后便会弹出一对话框提示你选择要访问的数据库,选择想要访问的数据库之后选择OK按钮,紧接着会出现一个弹出式对话框提示你选择要查询的数据库表,一次可以选择多个数据库表,若要选择多个数据库表,每选择一个表之后单击Add按钮,接着选择另一个表,选择完要查询的表之后单击Close按钮,这样,可视化的查询构造器中将会显示出用户选择的数据库表。
有关如何使用可视化的查询构造器Visual Query Builder 请参看联机帮助信息, 在Visual Query Builder中构造完一个查询并退出Visual Query Builder时,其中的SQL 命令语句会自动地写入相应的TQuery部件的SQL属性。
3.2 SQL程序的执行
在为TQuery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序。
在设计过程中,设置完TQuery部件的SQL属性之后将其Active属性的值置为True,这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果。
在应用程序运行过程中,通过程序调用TQuery部件的Open方法或ExecSQL 方法可以执行其SQL属性中的SQL程序。Open方法和ExecSQL方法是不一样的。大家在程序设计过程中一定要注意。Open方法只能用来执行SQL语言的查询语句(Select命令),并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如Insert、UPDATE、 DELETE等命令)例如:
Query1.Open (这样会返回一个查询结果集)
如果调用Open方法,而没有查询结果时,会出错。此时应该调用ExecSQL 方法来代替Open方法。如:
Query1.ExecSQL (没有返回结果)
当然在设计应用程序时,程序设计人员是无法确定TQuery部件中的SQL 语句是否会返回一个查询结果的。对于这种情况应当用Try…Except模块来设计程序。在 Try 部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行。
例如:
Try
Query1.Open
Except
Query1.ExecSQL
End
在应用程序中使用TQuery部件时,还可以设置它的UniDirectional属性为True,这样会加快检索数据库表的速度,但是这样只能往一个方向移动记录指针, 在缺省情况下,UniDirectional属性的值为False。
|