欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【动态SQL语句的编程】,下面是详细的分享!
动态SQL语句的编程
动态SQL语句中的参数,我们可以通过两种途径来为它赋值:
1. 利用参数编辑器(Parameter Editor)来为参数赋值
具体方法是:选中TQuery部件,单击鼠标右键,然后从中选择Define Parameters 便可以打开参数编辑器。
例如,在TQuery部件的SQL属性中我们设置如下的SQL语句:
Setect * From Customer Where CustNO=:Number;
TQuery的DatabaseName属性为DBDEMOS,其中Number为参数变量。我们便可以为参数Number赋值,在Datetype组合框中选择该参数的数据类型为整数Integer,在Value编辑框中可以为参数Number赋一个值,也可以单击Null Value检查框为参数Number赋一个空值Null。给参数赋值之后,单击OK按钮,这样TQuery部件中的SQL 查询便准备好了,而且参数值也被赋给了动态SQL语句中相应的参数,此时当把TQuery 部件的Active属性设置成True时,在与TQuery部件相连的数据浏览部件中会显示出查询结果,通过参数编辑器为参数赋值,这种方式缺乏应有的灵活性,在实际应用中用得较少,在实际应用中程序设计人员希望用更灵活方便的方式为参数赋值,那就是我们接下来要介绍的另一种途径:
2. 在运行过程中,通过程序为参数赋值
用这种方式为参数赋值有三种方法:
①根据参数在SQL语句中出现的顺序,设置TQuery部件的Params属性值为参数赋值。
②直接根据SQL语句中各参数的名字,调用ParamByName方法来为各参数赋值。
③将TQuery部件的DataSource属性设置为另一个数据源,这样将另一个数据源中与当前TQuery部件的SQL语句中的参数名相匹配的字段值赋给其对应的参数。
这三种方法我们将在下面的三小节中具体地介绍
17.4.1 使用Params属性为参数赋值
TQuery部件具有一个Params属性,它们在设计时不可用,在程序运行过程中可用,并且是动态建立的,当为TQuery部件编写动态SQL 语句时, Delphi 会自动地建立一个数组Params,数组Params是以0下标开始的,依次对应动态SQL 语句中的参数, 也就是说动态SQL语句中第一个参数对应Params[0],第二个参数对应params[1],依此类推。
例如:一个TQuery部件Query1,我们为它编写的动态SQL语句是:
| 以下为引用的内容:
Insert Into Customer(CustNo,Name,Country) Values(:CustNo,:Name, : Country) |
对于上述这条动态SQL语句中的参数,我们可以利用TQuery部件的params 属性为参数赋值:
| 以下为引用的内容:
Query1.params[0].AsString :="1988"; Query1.params[1].AsString :="Lichtenstein"; Query1.params[2].AsString :="USA"; |
上述语句将把"1988"赋给参数:Cuse_No,"Lichtenstein"赋给参数:Name,"USA"赋给参数:Country。
17.4.2 使用ParamByName方法为参数赋值
ParamByName是一个函数,用动态SQL语句中的参数作为调用ParamByName函数的参数,这样便可以为它们赋值,使用这种赋值方法,必须要知道动态SQL语句参数的名字。
例如在17.4.1节中的例子中,也可以用下述方法给参数赋值:
| 以下为引用的内容:
Query1.ParamByName('CustNo').AsString :="1988"; Query1.ParamByName('Name').AsString :="Lichtenstein"; Query1.ParamByName('Country').AsString :="USA"; |
使用这种方法同样可以为各参数赋值,而且更加直观一些。
17.4.3 使用Datasource属性为参数赋值
上述两种方法的共同特点是:我们在为各参数赋值时,我们是知道各参数对应的具体参数值的。而在具体的应用程序中,有些参数值常常是无法确定的,例如参数值来自于另一个查询结果,对于这种情况,Delphi提供了使用Datasource属性为动态SQL 语句中尚存在没有赋值的参数时, Delphi 会自动检查 TQuery 部件的 Datasource 属性, 如果为Datasource属性设置了属性值(该属性的值是另一个TDatasource部件的名字),Delphi 会把没有赋值的参数与TDatasource部件中的各字段比较,Delphi 会将相应的字段值赋给与其相匹配的参数,利用这种方法也能实现所谓的连接查询,我们在学习使用TTable部件时,便会创建主要--明细型数据库应用,用TQuery部件创建的连接查询与主要- -明细型应用是相似的。
例如:在如图17.7所示的应用中,设置了下列部件:
● 一个TTable部件
名字为Cust,它的DatabaseName属性为DEMOS,TableName属性为Customer。
● 一个TDatasource部件
名字为Custsource,其Dataset属性被设置为Cust。
● 一个TQuery部件
名字为ORDERS,其DatabaseName被设置为DEMOS,SQL属性值为:
Select Orders.CustNo,Orders.OrderNo,Orders.SaleDate FROM Orders
WHERE Orders.CustNo=: CustNo
ORDERS的DataSouce属性被设置为CustSource
● 一个TDatasource部件
名字为OrderSource,其DataSet属性被设置为Orders。
● 两个TDBGrid部件
它们分别连接CustSource和OrderSource。
TQuery部件Orders中的动态SQL语句中的参数:CustNo在程序设计过程中没有给它赋值,当该应用程序运行时Delphi会自动地到其Datasource属性中说明的数据源CustSource中查找与参数:CustNo匹配的字段,而CustSource中正好有一个名字为 CustNo 的字段与参数:CustNo匹配,这样Customer表中的CustNo字段值被赋给了参数 : CustNo , 而当每移动Customer表中的记录指针,参数:CustNo的值会随之改变,而参数:CustNo的值发生改变时,Orders中的动态SQL语句会根据新的参数值重新查询,从数据库表中获取相应的订单数据,这样也变实现了类似于主要--明细型应用。即连接查询。
以上所分享的是关于动态SQL语句的编程,下面是编辑为你推荐的有价值的用户互动:
相关问题:PostgreSQL 动态SQL语句怎么写
答:只是调用执行函数,就是一个select f_name()。 动态执行SQL和Oracle的execute immediate类似,如: execute 'select '''||123||'''' into v_temp; 函数里调用函数可以用perform f_name(); >>详细
相关问题:动态SQL是什么??什么是静态SQL,动态SQL的动态体...
答:首先,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行,二者都是用在SQL嵌入式编程中的,这里所说的嵌入式是指将SQL语句嵌入在高级语言中,而不是针对于单片机的那种嵌入式编程。 在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主... >>详细
相关问题:如何用动态SQL语句给变量赋值
答:在一个问题中遇到的一段精典动态SQL代码:declare @fdate datetimedeclare @sql0 nvarchar(4000)declare @banzhi varchar(4),@num varchar(4),@cur_id intset @cur_id=2497set @sql0=' SELECT @banzhi=b'+case when substring(convert... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
