com组件,query组件

Query组件
Query组件是一个数据集部件,和Table组件有很多相同的属性、事件、方法。Query组件实现了对SQL语言的支持,SQL语句通过Query组件传递到要访问的数据库的引擎中,由对应的数据库引擎执行SQL语句实现对数据库的操作。由于标准SQL语言不是针对某一种关系数据库而定,所以大部分数据库管理系统又在标准SQL基础上进行了扩充。因此,在不同的数据库系统之间移植SQL语句时必需了解要移植的SQL代码是标准的还是扩充的。
Query组件的常用属性:
1. Active属性和DataBaseName属性
Active属性在设计时设置为True,就可以立即进行SQL操作,相当于运行期间执行Query.Open方法。DataBaseName属性指定数据库名称或别名,参见Table。
2. SQL属性
SQL属性是一个TString对象,在这里可写上SQL语句。单击SQL属性[Tstrings]后的省略号可打开用于输入SQL语句的String list editor窗口,书写完毕关闭它,将Active属性设置为true可立即执行。用户还可以单击String list editor中的“Code Editor…”按钮,在代码窗口中编写SQL语句。
3. Params属性
用于为SQL语句中的参数赋值。在前面的SQL属性中,SQL语句可以包含参数,含有参数的SQL语句称为动态SQL语句。单击Params属性后的省略号,可以打开参数编辑对话框,所有的参数都列在此处,用鼠标单击选中一个参数,在左边的属性窗口中可以为此参数设定类型、数值等。
Params参数还可以在程序中设定,如下句:
Query1.Params[0].AsString:=‘男’;
●Params是一个变量数组,下标从0开始,依次对应动态SQL语句中的参数。
●当参数较多用索引号来赋值时,若弄错一个就可能会导致多个参数赋值错误。为了直观地给参数赋值,Delphi提供了一个函数ParamByName,比如在程序中可以这样参数赋值:
Query1.ParamByName(‘xb’).AsString:=‘男’
在上面的这个语句中可以明确知道给xb的赋值为‘男’,比前面的Params[0]对应‘男’要容易理解,也很安全。
4. DataSource属性
DataSource属性的使用可以说是一种比较高级的技巧。虽然此属性本身的设置并不复杂,将它赋值为一个数据源组件的名字即可,比如DataSource2.但如何使用它呢?
在前面Params属性中对SQL语句的参数赋值有了了解,上面提供的赋值方法的特点是在执行SQL语句前已为参数赋了具体值,但在某些情况下参数的值是无法确定的,这种情况下,DataSource属性就有了用场。当SQL语句存在没有赋值的参数时,Delphi会自动把没有赋值的参数与DataSource属性所指定的组件(一般是DataSource组件)中的字段比较,然后自动将相应字段的值传递给SQL语句中没有赋值的参数。下面举个例子说明使用方法。
在窗体中放置DBGrid、DataSource组件各两个,Table、Query组件各一个:
DBGrid1、DataSource1、Table1 用来显示所有员工情况
DBGrid2、DataSource2、Query1 用来显示某个员工的劳保发放记录情况
Query1.DataSource属性设定为DataSource1, Query1.SQL属性可这样写:
Select ffjl.ygbh,ffjl.lbmc from ffjl where ffjl.ygbh=:ygbh
“ffjl”为一个保存员工劳保发放情况的数据表,ygbh 为员工编号,lbmc为 劳保名称。 在这里不对ygbh变量赋值, Delphi自动到DataSource属性指定的数据源DataSource1中找出与ygbh相匹配的参数,而DataSource1中有一个ygbh字段,每当DataSource1中的记录指针移动时,参数ygbh值变化,对应的劳保发放记录也跟着变,很方便吧。
5. RequestLive属性
确定查询结果能否编辑。缺省情况下不能编辑查询的结果数据,要使之成为可能,必须首先设置RequestLive属性为True。除此之外还有一些限制,一般限制如下:
a. 查询只能涉及一个表;
b. SQL语句中不能包含Order By命令、SUM或AVG运算符;
c. Select后的字段列表中不能含有计算字段。Where部分只能包含字段值或常量的比较运算。
通过检查Query部件的CanModify属性可获得有关信息,若其值为True,说明返回的查询结果是“活动”的,可以编辑。
Query组件的常用方法
1. ExecSQL方法
用来执行SQL代码,也就是说执行你在SQL属性编写好的SQL语句。Query组件还有一个Open方法,也是用来执行SQL代码的,但二者之间有不同之处:Open方法只能用来执行SQL语言的查询语句(Select命令),并返回一个查询结果集。ExecSQL方法除了可执行Select语句外还可执行其它SQL语句(如Update、Insert、Delete等),此方法不返回执行的结果。用法: Query.ExecSQL
●在程序设计过程中,有时不能确定SQL语句是否会返回一个查询,所以一般采用Try…Except模块保证程序的正确运行。
Try
Query1.Open
Except
Query1.Exec SQL
END
上面的代码执行顺序是:首先用Open方法执行,如果有错误,则会用Exec SQL方法执行。
2. Prepare、UnPrepare方法
Prepare方法调用后会将带参数的SQL语句传给其对应的数据库引擎,对SQL语句进行语法分析和优化。调用Prepare方法会提高SQL语句的执行性能,特别是要反复执行同一条动态SQL语句时,其优越性更加明显。
在执SQL语句前,如果没有使用Prepare方法,Delphi会隐式调用Prepare方法,调用Prepare方法会消耗数据库资源,因此当完成一个查询之后,最好调用UnPrepare方法释放占用的数据库资源。在程序中改变Query组件的SQL属性时,Delphi会自动调用Close方法和UnPrepare方法,以撤消上次的查询。

动态使用SQL语句的几点技巧:
动态SQL语句,就是SQL语句中参数会变化的SQL语句,一般在程序中要根据用户的需要随时改变其参数值,对于动态SQL语句必须注意以下几点:
●先调用Close方法,关闭Query组件。如果Query组件已经关闭,调用Close方法不会出错, 也没有其它影响。
●再调用Clear方法,清除SQL属性中的现存SQL语句,如果不调用Clear方法,用Add方法为SQL属性设置SQL语句时,就会追加到原有的SQL语句后,造成错误。
●调用Add方法为SQL属性设置新SQL语句。
●调用Open或ExecSQL方法执行查询操作。
一般情况下,SQL属性只能包含一条SQL语句,有些数据库服务器可支持多条SQL语句。

SQL中日期型字段的查询技巧:
在SQL中查询时,对于日期型字段有特殊的表示方法,否则查询中会出现错误。比如下面的语句:
select * from DEMO where PPDate = 25/07/1999
上面这个查询语句在执行时就会出现错误,因为PPDate = 25/07/1999这个表达式不正确。正确的写法是:
select * from DEMO where PPDate = #25/07/1999#,
如果在查询语句中使用日期型变量,比如:
select * from DEMO where PPDate = :MyDate
那么,事先对MyDate这个变量做日期类型定义是很必要的,否则在以后的参数传递中也会出现问题。单击Query组件Params属性后的省略号,打开参数编辑对话框,选择“MyDate”这个参数,在左边的Object inspector窗口中,此参数有一个DataType属性,从中选择ftDate型即可。在中文WIN9X中,SQL语句中日期类型的常数只能为:“年—月—日”和“月—日—年”这两种格式。

在SQL中处理带空格的字段技巧:
在数据库的创建中,字段名中允许使用空格,这方便了用户,用户可以从字段名称上看出字段的含义,如Species Name、Species No,但同时为查询带来了一些问题,比如下面的查询语句:
SELECT Species No, Category, Species Name, Notes FROM BIOLIFE
这个查询语句会出现错误,需要对上面的查询语句做如下修改才可以:将查询的字段用引号引起来(单引号和双引号都可以),在其前面加上数据表的名称。修改后的语句如下:
SELECT BIOLIFE."Species No", BIOLIFE."Category", BIOLIFE."Species Name", BIOLIFE."Notes" FROM "BIOLIFE.DB" BIOLIFE
上面的语句中BIOLIFE是数据表的别名"BIOLIFE.DB" 。当然对于没有空格的字段可以不加引号,上面的字段都加上了引号。
Tags:  java组件 太阳能电池组件 太阳能组件 qt组件 com组件

延伸阅读

最新评论

发表评论