delphi使用SQL的教程3

17.3.3 通过TQuery部件如何获得活动的数据 
  
我们在前面的章节里介绍TTable部件时,我们知道通过TTable部件从数据库中获得的数据都是活动的,也就是说用户可以直接通过数据浏览部件对这些数据进行编辑修改。而通过TQuery部件可以获得两种类型的数据: 
● “活动”的数据 
这种数据就跟通过TTable部件获得的数据一样,用户可以通过数据浏览部件来编辑修改这些数据,并且当调用Post方法或当焦点离开当前的数据浏览部件时,用户对数据的修改自动地被写回到数据库中,详细情况请参看第四章“数据浏览部件的应用及编程”。 
● 非活动的数据(只读数据) 
用户通过数据浏览部件是不能修改其中的数据。在缺省情况下,通过TQuery部件获得的查询结果数据是只读数据,要想获得“活动”的数据,在应用程序中必须要设置TQuery部件的RequestLive属性值为True,然而并不是在任何情况下(通过设置RequestLive的属值True)都可以获得“活动”的数据的,要想获得“活动”的数据,除了将TQuery部件的RequestLive属性为True外,BDE要能够返回“活动”的数据,相应的SQL命令语句还要满足附录C中的语法规则和下列的约束条件: 
TQuery部件获得“活动”的查询结果数据的约束条件: 
  
当查询Paradox或dBASE数据库中的表: 
● 查询只能涉及到一个单独的表 
● SQL语句中不能包含ORDER BY命令 
● SQL语句中不能含聚集运算符SUM或AVG 
● 在Select后的字段列表中不能有计算字段 
● 在Select语句WHERE部分只能包含字段值与常量的比较运算,这些比较运算符是: Like,>,<,>=,<=,各比较运算之间可以有并和交运算:AND和OR。 
  
当通过SQL语句查询数据库服务器中的数据库表: 
● 查询只能涉及到一个单独的表 
● SQL语句中不能包含ORDER BY命令 
● SQL语句中不能含聚集运算符SUM或AVG运算 
  
另外,如果是查询Sybase数据库中的表,那么被查询的表中只能有一个索引。 
如果在应用程序中要求TQuery部件返回一个“活动”的查询结果数据集,但是SQL 命令语句不满足上述约束条件时,对于本地数据库的SQL查询,BDE只能返回只读的数据集。对于数据库服务器中的SQL查询,只能返回错误的代码。当TQuery 部件返回一个“活动”的查询结果数据集时,它的CanModify属性的值会被设置成True。 
  
表17.1 TQuery部件返回查询结果数据的类型 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
RequestLive属性值 CanModify属性值 查询结果的类型 
──────────────────────────────── 
False False 只读数据 
True(SQL语句满足约束条件) True “活动”数据 
True(SQL语句不满足约束条件) False 只读数据 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
  
当TQuery部件返回只读的查询结果数据集,而用户又希望修改这只读的数据集时,一般这样来处理,在应用程序中另外增加一个 TQuery 部件 Query2( 假设获得只读结果的TQuery部件的名字是Query1),在Query2中设置修改语句UpDATE对Query1 中的数据进行修改操作,这样会实现对只读数据的修改。 
  
17.4 动态SQL语句的编程 
  
在17.3节中,我们已经介绍了动态SQL语句(又被称为参数化的SQL语句),在其中包含在程序过程中可以变化的参数,在实际的程序设计中使用得更多的是动态SQL语句,因而在这一节里我们重点介绍如何给动态SQL语句的参数赋值,以在应用程序中灵活地使用SQL语句。动态SQL语句的编写、执行等等与17.3节中介绍的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语句中的参数名相匹配的字段值赋给其对应的参数。 
这三种方法我们将在下面的三小节中具体地介绍 

转载于:https://www.cnblogs.com/JTeacher/archive/2012/11/19/2776903.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值