登陆注册
36209800000028

第28章 数据库应用程序设计(2)

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属性

同类推荐
  • 黑客就在你身边

    黑客就在你身边

    互联网络正在改变着我们的生活,每个人都处在互联网的天罗地网之中。本书以轻松的笔调,向人们介绍了有关“黑客”的知识。当你读完这本书后,你会发觉“黑客”一点都不神秘,他们渴望全社会对他们有一个公正的评价。
  • 条形码技术与应用

    条形码技术与应用

    条形码是一种可供电子仪器自动识别的标准符号,是由一组黑白相间、粗细不同的条、空符号按一定编码规则排列组成的标记,用以表示一定的信息,确认某个物体或规定它的移动,能正确快速地为产、供、销各环节在采集、处理和交换信息时提供标识。
  • 体感交互技术

    体感交互技术

    本书提出了体感计算的研究,探讨了基于体验性认知的个性化电子学习方式,并且分析了面向儿童的艺术创造体验,在体感虚拟化身的帮助下,用户可以通过身体运动,促进情感心智的全面发展,
  • 办公软件高级应用

    办公软件高级应用

    日新月异的信息技术使计算机的应用渗透到各行各业,融入到我们的工作、学习和生活中,特别是在办公领域中运用计算机技术,可以实现办公自动化,成倍地提高工作效率。在众多的办公软件中,微软公司的Office系列软件是办公自动化软件中的佼佼者,其强大的功能深受全世界广大用户的青睐。根据当前业界的需求以及办公软件的实际应用范围,本书针对Office2003系列产品,深入讲解其高级应用知识和操作技能。
  • 爱上我的“手机女友”

    爱上我的“手机女友”

    本书共有五个部分:第一章:千娇百媚的我—手机门类大搜索第二章:了解我的心—手机“芯”理学第三章:不一样的我不一样的美—手机的万种风情第四章:命中注定我爱你—神秘手机星座解读第五章:有求必应贴心女友—手机的绝世武功通过这本书,想要购入手机的你会知道哪款手机女友更适合你,已有心仪手机的你可以让手机女友懂得更多变得更聪明。希望这本书能够帮助你在手机选购上和手机使用上更舒心、安心、贴心。
热门推荐
  • 易烊千玺之一生玺爱

    易烊千玺之一生玺爱

    烊哥哥长大娶我可好,好,长大以后千玺去找她找不到后,就不爱说话,后出道她就在电视上看到了她的烊烊哥哥
  • 杀手穿越之霸道王爷好妖孽

    杀手穿越之霸道王爷好妖孽

    她是顶尖杀手,刚结婚,只因背叛自己所爱之人,想不开而跳河自杀,一朝穿越,竟成了沐府的大小姐。说姐打了鸡血,不好意思,姐姐我就是来虐人的。
  • 坐看年华似水流

    坐看年华似水流

    我们曾在青春里经历过的那些欢笑和泪水,欣喜和烦恼,都会似水匆匆流逝。我们能留下的,只有那些看似明媚、实则哀伤的记忆……
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 星空奇旅

    星空奇旅

    18岁的文松成为了史上最年轻的宇航员,参加了国家的远程航行计划。飞往目的地的途中却被吸入类似虫洞的神秘天体。醒来后他发现自己来到一个陌生的世界。这个世界的人们不仅能够使用一种叫做“灵气”的神秘力量,而且还发展出了和地球极为相似的文化。为了找到回到地球的方法,文松只能慢慢探索这个陌生的世界……
  • 星空远行

    星空远行

    2058年,噩梦之年,鼎盛一时的临梦忽然销声匿迹,而所有超级源能者似乎也在同时消失不见。后世再无超级源能者诞生。百年后的今天,封印所有超级源能者的葬眠之地濒临瓦解,而守护葬眠之地百年之久的庞家也将面临巨大的风云变换。而即将回归的临梦之人,又会将面临混乱世界带向一个怎么样的境地?是平静?还是更加混乱?而身为所有超级源能者敌视的庞家后人,庞神秀又将在这个世界如何活下去?
  • 棱岛实录

    棱岛实录

    在国外逍遥多年的俞元亮,现已身无分文,他为了取出父亲秘密小金库里的财物,重新过上花天酒地的生活,毅然决定偷渡回国。然天有不测风云,谁能想到,人蛇船居然翻了!他独自漂流到一蛮荒大岛,并卷入一场史无前例的斗争中。狼族、狮族、豹族、再加上一只神秘的古代军队,他能安然无恙的回到文明社会中吗?
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 若无来路可有归途汤步里波著

    若无来路可有归途汤步里波著

    恋爱时总喜欢说点狠话,仿佛说的越狠才代表爱的越深
  • 紫墙

    紫墙

    本书是“京味文学丛书”中的一册,“京味文学”还不是一个成熟的概念,以及它的涵盖范围等等,历来有着争论和岐议。有关这些问题,尽可仁者见仁,智者见智。以北京为写作背景,熟练准确地运用了北京语言特色,反映了各个不同时期北京人的生活与思想情感的作品。有着风格迥异的鲜明个性。无论在思想内容和艺术风格上都得到了社会的承认和读者的喜爱,有的甚至成为代表一个时代的经典之作。