Edit方法设定数据表为编辑状态,此时可对数据表进行编辑。
(14)Post方法
Post方法确认对数据表的修改。
(15)Cancel方法
Cancel方法取消对数据表的修改。
(16)EmptyTable方法
EmptyTable方法删除数据表中的所有记录。
2.Query组件
同Table组件类似,Query组件在组件模板的【BDE】选项卡中(Delphi5是在【DataAccess】选项卡中),它通过BDE与数据表连接,实现对数据表的访问,是数据库应用程序中最常用的组件之一。Query组件是一种用SQL语句访问数据库的组件。同Table组件最大的区别在于,Query组件只用DatabaseName属性指定数据库名,没有用来指定数据表的TableName属性,它访问的数据表名是用它的SQL属性来指定的。因此,Table组件只能访问一个在设计时设定的数据表,而Query组件可以在运行时通过改变其SQL属性,访问多个数据表。
1)Query组件的SQL属性
Query组件的属性和方法,大都和Table组件类似,而SQL属性是Query组件独有的。
(1)SQL语句简介
如前所述,SQL语言是关系数据库通用的结构化查询语言。目前,几乎所有的关系数据库系统都支持SQL语言。
SQL由3部分组成:
数据定义语言,用于定义数据库;
数据操作语言,用于对数据库中的数据进行操作;
数据控制语言,用于提供对数据库安全性的防护。
支持SQL编程是Delphi的一大特征。使用Delphi进行数据库应用程序设计时,可以使用SQL数据操作语言实现对数据库的访问。
SQL数据操作语言的语句有以下4条。
①Select语句。用于从数据库的一个或多个数据表中查询数据,该语句所含元素很多,其语句的基本格式为:
Select字段名列表
From数据表名列表
[Where查询条件]
OrderBy字段名
其中:
部分为可选子句。
“Select字段名列表”子句,按列表中的字段名显示查询结果,其中的字段名列表,可为所有字段,用“”表示;当有多个字段时,多个字段间用逗号分开;可为不同数据表中的字段,表示为“表名.字段名”;可为SQL表达式。
SQL表达式可为“字段名X字段名”形式,其中X为四则算术运算符+(加)、-(减)、(乘)、(除)或逻辑运算符AND(逻辑“与”)、OR(逻辑“或”)、XOR(逻辑“异或”)、NOT(逻辑“非”)。
SQL表达式也可为“内建函数(字段名)”形式,其中内建函数有SUM(求一列总和)、COUNT(求一列中值的个数)、COUNT()(求查询结果的行数)、AVG(求一列的平均值)、MAX(求一列中的最大值)、MIN(求一列中的最小值)。
“From数据表名列表”子句,从列表中的数据表中查询数据,其中的数据表名列表,列出Select子句中字段所在的数据表名;若为多个数据表,则用逗号分开。
“Where查询条件”子句,按其中的查询条件查询数据,查询条件可以使用比较运算符(不等于),如“whereage=30”,查询年龄大于等于30岁的人员记录;也可以用逻辑运算符将两个比较运算连接起来,如“where(age=30)AND(sex=male)”,查询年龄大于等于30岁的男性人员记录;可用模式匹配符Like实现模糊查询,如“Wherenamelike李%”,查询姓“李”的人员记录,这里“%”代表任意多个字符,也可用“李”,这里代表一个任意字符。
“OrderBy字段名ASCDESC”子句,将查询结果按By后面的字段排序,可选部分ASC或DESC指定升序排列或降序排列,默认为ASC,如“OrderByageDESC”,将查询结果按年龄降序排列。
②Insert语句。用于向数据表中添加一个新的记录,其语句格式为:
Insert数据表名[(字段名列表)
Values(字段值列表)其中:
“Insert数据表名[(字段名列表)”子句,向指定数据表中添加一个记录,若缺省字段名列表,则表示记录的所有字段都写入字段值;否则,只对所列字段写入字段值,其他字段空值。
“Values(字段值列表)”子句,指定添加记录的各字段值,若Insert子句中字段名列表缺省,则这里必须给出所有字段的值;否则,只给出字段名列表中字段的值;字段值应和字段名顺序一致。
③Updata语句。用于修改数据表中的某个记录的数据,其语句格式为:
Updata数据表名Set字段值列表Where修改条件其中:
数据表名指定被修改的数据表。
字段值列表格式为:字段名1=字段值1,字段名2=字段值2,…修改条件的格式和Select语句中Where子句的查询条件一样。
④Delete语句。用于删除数据表中符合条件的一个或几个数据记录,其语句格式为:
Delete数据表名
[Where删除条件]
其中:
若“Where删除条件”子句缺省,则删除数据表中的所有记录。
删除条件的格式和Select语句中Where子句的查询条件一样。
需要了解更多SQL语言内容的读者,可以参考SQL方面的专门资料。
(2)设计时设置Query组件的SQL属性
如前所述,同Table组件一样,Query组件也用DatabaseName属性指定要访问的数据库。
但Query组件没有TableName属性指定要访问的数据表,而是用它的SQL属性来指定要访问的数据表。可以在设计时设置Query组件的SQL属性,实现所谓的“静态查询”;也可以在程序代码中设计Query组件的SQL语句,实现程序运行时的动态数据表的访问。这里先介绍设计时设置Query组件的SQL属性的方法。
Query组件的SQL属性是编辑型属性。在放置Query组件的窗体上激活Query组件,按需要可先设置好它的其他属性(同Table组件一样,这时不能设置Active属性),特别是DatabaseName属性,然后在对象检查器中找到SQL属性,单击该属性值栏右端的【…】按钮,弹出【StringListEditor】对话框,如图12-7所示。
按查询要求,在编辑区中输入上面讲的Select语句,然后单击【OK】按钮,关闭对话框。
若以上的设置没有问题,这时可以将组件的Active属性值设置为True。如果窗体上已经设计了DataSource组件和相关的数据控制组件,这时静态查询的结果就会立即显示在窗体中。
(3)程序代码中设计Query组件的SQL语句
在程序代码中设计Query组件的SQL语句,实现程序运行时的动态数据表的访问是数据库应用程序访问数据库的主要形式。
程序代码中设计的SQL语句的格式为:
下面对代码段做进一步的解释。
Close是Query组件的方法,要改变Query组件的SQL属性,先用方法Close关闭组件。
Clear是Query组件的方法,要为SQL属性赋新SQL语句,先用方法Clear清除原SQL语句。
Add是Query组件的方法,用于为Query的SQL属性赋予新的SQL语句。
Add(SQL语句)中的SQL语句,可以用一行代码给出一条完整的SQL语句;为避免代码行过长,也可以用几行代码给出一条完整的SQL语句,每行都冠以SQL.Add。
也可表示为:
在程序代码中设计SQL语句,允许使用可变参数。如从公司职员表(zhiyuan)中静态查询姓名为张华的职员,SQL语句格式为:
SelectFromzhiyuanWherename=张华。
要在程序运行中输入查询职员的姓名,实现动态查询,就要使用可变参数,SQL语句格式变为:
SelectFromzhiyuanWherename=:varname这里用“:”表示“varname”为可变参数,然后用方法ParamByName为可变参数赋值:
ParamByName(varname).AsString:=inputname;
Inputname为字符串变量,在SQL语句前动态赋值,该语句将Inputname变量值赋给可变参数varname,实现动态查询。所以该语句为可选,有几个可变参数,就有几条该语句;若无可变参数,则不用该语句。
Prepare为Query组件的方法,用来通知BDE,参数设置完毕,准备执行SQL语句。
Open和ExecSQL都是Query组件的方法,用来打开Query组件,执行SQL语句,只是执行SQL语句后,若有返回值,如执行Select语句,用Open方法;若无返回值,如执行Insert、Updata、Delete语句,用ExecSQL方法。
3.StoredProc组件
StoredProc组件在组件模板的【BDE】选项卡中(Delphi5中是在【DataAccess】选项卡),它通过操作远程数据库服务器中的存储过程,实现对数据库的访问。
存储过程是存放于数据库服务器上的一组数据库操作命令,用来在数据库中完成一系列频繁重复的操作,并将操作结果传送给客户程序。存储过程需要必要的输入参数,操作结果用输出参数的形式返回。StoredProc组件通过Params方法将输入参数传送给存储过程,输出参数通过与StoredProc组件连接的DataSource组件传送给数据控制组件显示出来。
1)StoredProc组件的属性
StoredProc组件的主要属性有以下几个。
(1)DatabaseName属性
DatabaseName属性用于指定StoredProc组件要访问的数据库。该属性的属性值可以在对象检查器属性值栏的编辑框中直接输入,也可以在其下拉列表中选择。
(2)StoredProcName属性
StoredProcName属性用于指定StoredProc组件要操作的存储过程。该属性的属性值可以在对象检查器属性值栏的编辑框中直接输入,也可以在其下拉列表中选择。
(3)Active属性
Active属性决定StoredProc组件的状态。该属性为布尔型属性,若其值为True,则StoredProc组件被激活,可以操作存储过程;若其值为False,则不能操作存储过程。在StoredProc组件的DatabaseName属性和StoredProcName属性设置之前,不能将该属性值设置为True;反之,在将该属性设置为True之后,若修改DatabaseName属性或StoredProcName属性,该属性值自动变为False。
(4)Params属性
Params属性包含着StoredProc组件所操作存储过程的输入参数。当设置了StoredProc组件的DatabaseName属性和StoredProcName属性之后,单击Params属性值栏右端的【…】按钮,弹出【EditingStoredProc组件名.Params】对话框,可以看到该StoredProc组件所操作存储过程的输入参数。
(5)Prepared属性
Prepared属性表明服务器是否做好执行存储过程的准备。该属性为只读布尔型属性,若其值为True,则表示服务器做好准备;若其值为False,则没有做好准备。用StoredProc组件的Prepare方法,可以使服务器准备好。其默认值为False。
2)StoredProc组件的方法
StoredProc组件的主要方法有以下几种。
(1)ParamByName方法
ParamByName方法用来在动态查询中为可变参数赋值。
(2)Prepare方法
Prepare方法通知服务器做好执行存储过程的准备。
(3)Close方法
Close方法关闭StoredProc组件。
(4)ExecProc方法
ExecProc方法执行存储过程。
(5)Open方法
Open方法打开StoredProc组件,执行存储过程。
这两个方法的区别在于,ExecProc只返回参数,而Open返回存储过程的执行结果集。
3)StoredProc组件的使用方法
(1)在数据库服务器上创建存储过程。
(2)在窗体中放置StoredProc组件。
(3)按前面介绍的方法设置StoredProc组件的属性,主要是DatabaseName、StoredProcName、Active等属性。
(4)在窗体中添加其他组件并设置它们的属性。
(5)设计StoredProc组件调用存储过程的程序代码:
这里存储过程只有一个输入参数,用StoredProc1.Params[1].AsString:=inputname语句将参数传送给存储过程。
(6)访问输出参数和结果集。
如上所述,存储过程有一个输出参数,是一个指示存储过程执行是否成功的整数类型的代码,为0表示执行成功。访问输出参数用如下语句,输出参数是作为第一个(序号为0)参数。
存储过程的执行结果集用如下形式的语句实现,假设某一结果通过一编辑框显示。
其中n为该结果在结果集中的序号,序号从0开始。
12.2.2DataSource组件
DataSource组件位于组件模板的【DataAccess】选项卡中,是一个不可见组件。
DataSource组件的使用比较简单,但却是Delphi数据库应用程序中最重要的组件之一。
DataSource组件是连接数据集组件和数据控制组件的桥梁,一个Delphi数据库应用程序至少有一个DataSource组件。
DataSource组件的属性不多,主要有以下3个。
1.DataSet属性