第亻2章sαL数据库程序设计 本章要点: 回 Query组件的属性 区 Query组件的方法 区SQL语言基础 回 Query组件利用SQL语言的增、删、改、查操作 区综合实例:学生信息管理程序
本章要点: Query组件的属性 Query组件的方法 SQL语言基础 Query组件利用SQL语言的增、删、改、查操作 综合实例:学生信息管理程序 第12章 SQL数据库程序设计
121 Query组件的属性和方法 SQL语言,又称为结构化查询语言,它在数据库程序设 计中是十分重要的。任何一门支持数据库程序设计的语言必 定提供对SQL语言的支持, Delphi7.0也不例外。在 Delphi 7.0中提供了很多支持SQL语言操作的组件, Query组件就是 其中之一。 Query组件是BDE数据集组件之一,在 Delphi7.0 组件选择板上BDE选项卡上,与 Table组件具有很多共同的 特性。第11章已经对 Table组件的使用较详细地进行了介绍 Query组件在SQL编程中占据十分重要的地位,实现了 Delphi7.0对SQL语言的支持。在 Delphi7.0开发的数据库应 用中,SQL语句是通过 Query部件传递到要访问的数据库系 统的数据库引擎中,由数据库引擎具体执行SQL语句,以实 现对数据的操作。而不是传递给Deph7.0中的BDE,由 BDE实施具体的SQL动作。本章内容重点讲解如何用 Query 组件米进S0i言的作/mn/ se Depht
12.1 Query组件的属性和方法 SQL语言,又称为结构化查询语言,它在数据库程序设 计中是十分重要的。任何一门支持数据库程序设计的语言必 定提供对SQL语言的支持,Delphi 7.0也不例外。在Delphi 7.0中提供了很多支持SQL语言操作的组件,Query组件就是 其中之一。Query组件是BDE数据集组件之一,在Delphi 7.0 组件选择板上BDE选项卡上,与Table组件具有很多共同的 特性。第11章已经对Table 组件的使用较详细地进行了介绍。 Query 组件在 SQL 编程中占据十分重要的地位,实现了 Delphi 7.0对SQL语言的支持。在Delphi 7.0开发的数据库应 用中,SQL语句是通过Query部件传递到要访问的数据库系 统的数据库引擎中,由数据库引擎具体执行SQL语句,以实 现对数据的操作。而不是传递给Delphi 7.0中的BDE,由 BDE实施具体的SQL动作。本章内容重点讲解如何用Query 组件来进行SQL语言的操作
1211 Query组件的常用属性(1) 1. DataBase name属性 跟 Table组件一样, Query组件也是通过 Data BaseName属性来链接数据 库的。可以是某个数据库别名也可以是某个数据表的路径。详细方法可以参 照Tabe组件的用法。 2.SQL属性 αuery组件是通过SQL属性对数据集进行操作,而不是通过指定一个 TableName属性的值直接指向一个表。SQL是一个字符串对象,可以给该属 性设置SQL语句,从而让Quey组件使用SQL语句操纵数据库。例如,在 SQL属性中输入了合法的 Select查询语句,然后可以将 Query组件的 Active 属性设置为True或者调用open方法就可以打开数据集。SQL属性还提供了 设置SQL语句的各种方法,如Add、 Clear等方法分别用来添加和清除SQL语 句,在程序中运用十分广泛 3. Filter属性 该属性是用来过滤记录的,就是按照某个字段的具体值进行过滤记录 它有点类似于査询,也称为筛选记录。具体格式如下: Query1. Filter:='字段名=字段值 或者可以直接在对象浏览器中找到 Filter属性,并输入“性别='男'”,注意不 Inprise Dephi
12.1.1 Query组件的常用属性(1) 1. DataBaseName属性 跟Table组件一样,Query组件也是通过DataBaseName属性来链接数据 库的。可以是某个数据库别名也可以是某个数据表的路径。详细方法可以参 照Table组件的用法。 2. SQL属性 Query组件是通过SQL属性对数据集进行操作,而不是通过指定一个 TableName属性的值直接指向一个表。SQL是一个字符串对象,可以给该属 性设置SQL语句,从而让Query组件使用SQL语句操纵数据库。例如,在 SQL属性中输入了合法的Select查询语句,然后可以将Query组件的Active 属性设置为True或者调用Open方法就可以打开数据集。SQL属性还提供了 设置SQL语句的各种方法,如Add、Clear等方法分别用来添加和清除SQL语 句,在程序中运用十分广泛。 3. Filter属性 该属性是用来过滤记录的,就是按照某个字段的具体值进行过滤记录。 它有点类似于查询,也称为筛选记录。具体格式如下: Query1.Filter := '字段名=字段值' 或者可以直接在对象浏览器中找到Filter属性,并输入“性别= '男' ”,注意不
1211 Query组件的常用属性(2) 带双引号,但过滤字段值“男”字必须用单引号括起来。但在代码中, 要用两个连续的单引号表示一个单引号。 另外,要让 Filter属性设置的过滤条件有效,则必须设置另外一个属性 Filtered。只有当 Filtered属性值为True时, Filter属性设置才有效。 其实,在 Table:组件中也包含了 Filter和 Filtered属性。所以, Table组件和 Query组件的很多属性都是相同的,而且用法也一样,如 Active、Feds 等,可以参考Tabe组件中的相关用法 121.2 Query组件的常用方法 1.Open方法 用于打开或激活 Query数据集。一般只执行 Select查询语句。 2 ExecSQL方法 执行 Query组件中的SQL语句,不仅可以执行 Select查询语句, 而且可以执行其他的SQL命令,如 I Insert、 Update、 Delete等SQL 命令。关于Open方法和 EXeCSQL方法的区别本书将在后面的章节 里进一步地加以讨论。 3. Close方法 关闭数据集 Inprise Dephi
12.1.1 Query组件的常用属性(2) 带双引号,但过滤字段值“男”字必须用单引号括起来。但在代码中, 要用两个连续的单引号表示一个单引号。 另外,要让Filter属性设置的过滤条件有效,则必须设置另外一个属性 Filtered。只有当Filtered属性值为True时,Filter属性设置才有效。 其实,在Table组件中也包含了Filter和Filtered属性。所以,Table组件和 Query组件的很多属性都是相同的,而且用法也一样,如Active、Fields 等,可以参考Table组件中的相关用法。 12.1.2 Query组件的常用方法 1. Open方法 用于打开或激活Query数据集。一般只执行Select查询语句。 2. ExecSQL方法 执行Query组件中的SQL语句,不仅可以执行Select查询语句, 而且可以执行其他的SQL命令,如Insert、Update、Delete等SQL 命令。关于Open方法和ExecSQL方法的区别本书将在后面的章节 里进一步地加以讨论。 3. Close方法 关闭数据集
1211 Query组件的常用属性(3) 4.SQL属性的两个基本方法 (1)Ad方法 给 Query组件的SQL属性添加SQL命令语句,以供 Query组件执行。Add 是SQL属性中的一个方法。如下列语句: Query 1. SQL Add('select* from student) Query1. SQL Add( order by学号’);/在前一句SQL语句的基础上追加 SQL语句 这里也可以把以上两句语句合成一句,如下所示。这两种方法是等效的。 Query1. SQL Add( select' from student order by学号’); (2)Cear方法 Clear方法是清除 Query组件的SQL属性值。它也是SQL属性中的一个方 法。一般在用Add方法添加SQL语句前,先要用 Clear方法将SQL属性清 空,然后再添加全新的SQL语句。 Inprise Dephi
12.1.1 Query组件的常用属性(3) 4. SQL属性的两个基本方法 (1)Add方法 给Query组件的SQL属性添加SQL命令语句,以供Query组件执行。Add 是SQL属性中的一个方法。如下列语句: Query1.SQL.Add(‘select * from student’); Query1.SQL.Add(‘ order by 学号’);//在前一句SQL语句的基础上追加 SQL语句 这里也可以把以上两句语句合成一句,如下所示。这两种方法是等效的。 Query1.SQL.Add(‘select * from student order by 学号’); (2)Clear方法 Clear方法是清除Query组件的SQL属性值。它也是SQL属性中的一个方 法。一般在用Add方法添加SQL语句前,先要用Clear方法将SQL属性清 空,然后再添加全新的SQL语句
1211 Query组件的常用属性(4) 【例12-1】使用 Query组件显示 student db中全部记录内容。设计窗体如 图12-1所示,程序运行效果如图12-2所示。 5Quey组件使用 密 杨盛芳女1981 ∞m周女19891211田员湖南39 图12-1窗体设计界面 图122程序运行界面 这个例子要求用 Query组件结合SQL语句显示 student. db中全部记录内容,并 显示在 DBGrid组件中。具体实现步骤如下。 s在应用窗体中放置一个Quey部件( Query1)、一个 TData Source部件 ( Data Source1)和一个 TData Grid部件( DBGrid1),并将它们链接起来; 链接方法:将 Data Source1组件的 Dataset属性设置为 Query1;将 DBGrid1组 件的 Data Source属性设置为 Data Source1。 设置窗体 Query部件 Query1的 DatabaseName属性值为数据库别名 stu data 双击对象查看器 Object Inspector窗口中 Query1的SQL属性, Delphi7.0将 显示 String List Editor对话框。 Inprise Dephi
12.1.1 Query组件的常用属性(4) 【例12-1】 使用Query组件显示student.db中全部记录内容。设计窗体如 图12-1所示,程序运行效果如图12-2所示。 图12-1 窗体设计界面 图12-2 程序运行界面 这个例子要求用Query组件结合SQL语句显示student.db中全部记录内容,并 显示在DBGrid组件中。具体实现步骤如下。 在应用窗体中放置一个Query部件(Query1)、一个TDataSource部件 (DataSource1)和一个TDataGrid部件(DBGrid1),并将它们链接起来; 链接方法:将DataSource1组件的DataSet属性设置为Query1;将DBGrid1组 件的DataSource属性设置为DataSource1。 设置窗体Query 部件Query1的DatabaseName属性值为数据库别名 stu_data 双击对象查看器Object Inspector窗口中Query1的SQL 属性, Delphi 7.0将 显示 String List Editor对话框
1211 Query组件的常用属性(5) 【例12-1】使用 Query组件显示 student. db中全部记录内容。设计窗体如 图12-1所示,程序运行效果如图12-2所示 Quy组件使用 凯水军 苏海北西南工 I,,圈1 口000绑女191211田员湖南3 图12-1窗体设计界面 图12-2程序运行界面 这个例子要求用 Query组件结合SQL语句显示 student. db中全部记录内容, 并显示在 DBGrid组件中。具体实现步骤如下 s在应用窗体中放置一个Quey部件( Query1)、一个 TData Source部件 ( Data Source1)和一个 TData Grid部件( DBGrid1),并将它们链接起来; 链接方法:将 Data Source1组件的 Dataset属性设置为 Query1;将 DBGrid1组 件的 Data Source属性设置为 Data Source1。 设置窗体 Query部件 Query1的 DatabaseName属性值为数据库别名 stu data 双击对象查看器 Object Inspector窗口中 Query1的SQL属性, Delphi7.0将 显示 String List Editor对话框。 Inprise Dephi
12.1.1 Query组件的常用属性(5) 【例12-1】 使用Query组件显示student.db中全部记录内容。设计窗体如 图12-1所示,程序运行效果如图12-2所示。 图12-1 窗体设计界面 图12-2 程序运行界面 这个例子要求用Query组件结合SQL语句显示student.db中全部记录内容, 并显示在DBGrid组件中。具体实现步骤如下。 在应用窗体中放置一个Query部件(Query1)、一个TDataSource部件 (DataSource1)和一个TDataGrid部件(DBGrid1),并将它们链接起来; 链接方法:将DataSource1组件的DataSet属性设置为Query1;将DBGrid1组 件的DataSource属性设置为DataSource1。 设置窗体Query 部件Query1的DatabaseName属性值为数据库别名 stu_data 双击对象查看器Object Inspector窗口中Query1的SQL 属性, Delphi 7.0将 显示 String List Editor对话框
1211 Query组件的常用属性(6) 5tUEd眈a s在图12-3中的 String List Editor对话框中输入SQL语句: by学号 Select* from student order by s单击OK按钮,关闭 String List Editor对话框。 s设置 Query的open属性为True 图123 String List Edto对话框 这样,就可以将 student .db数据表中全部记录内容显示在 Data grid1组 件中。这是一种用SQL语句査询数据集中记录内容的方法,另外在 Delphi 7.0中用得最多的还是在程序代码中用相应的方法来实现SQL语句的查询。 利用代码执行SQL语句,在一般的数据库程序设计中用得很广泛,而且 很灵活。但值得注意的是在添加SQL属性前首先要用Cose方法关闭数据集: 在应用程序中为SQL属性设置新的SQL命令语句时,必须要调用Cear方法 以清除SQL属性中现存的SQL命令语句,如果不调用 Clear方法,可调用Add 方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在 现存SQL命令语句后面,但在程序运行时常常会出现出乎意料的查询结果, 甚至程序无法运行下去。 Inprise Dephi
12.1.1 Query组件的常用属性(6) 在图12-3中的String List Editor对话框中输入SQL语句: Select * from student order by 学号 单击OK按钮,关闭String List Editor对话框。 设置Query的Open属性为True。 图12-3 String List Editor对话框 这样,就可以将student.db数据表中全部记录内容显示在DataGrid1组 件中。这是一种用SQL语句查询数据集中记录内容的方法,另外在Delphi 7.0中用得最多的还是在程序代码中用相应的方法来实现SQL语句的查询。 利用代码执行SQL语句,在一般的数据库程序设计中用得很广泛,而且 很灵活。但值得注意的是在添加SQL属性前首先要用Close方法关闭数据集; 在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法 以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,可调用Add 方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在 现存SQL命令语句后面,但在程序运行时常常会出现出乎意料的查询结果, 甚至程序无法运行下去
122动态SQL语句的编程(1) αueⅣy组件提供了强大的SαL语言支持功能,这大大提高了数据库应用 程序的执行效率。 Query组件不仅可以执行静态的SQL语句,而且可以执行 动态的SQL语句。静态SQL语句在程序设计时便已固定下来,它不包含任何 参数和变量。而动态SQL语句,被称为参数化的语句,其中包含着表示字段 名或表名的参数。在实际程序设计中使用得更多的是动态SQL语句。在这 节将重点介绍如何给动态SQL语句的参数赋值,以及在应用程序中灵活地使 用SQL语句 通常采用以下三种途径来为它赋值,这三种途径都是在程序代码中实现 的 1采用字符串连接符号“+连接组成完整的SQL语句 这里用到字符串连接符号“+"进行字符串的连接操作。具体表示方法 如下: XM=赵凯 Query1. SQL Add( select* from student where姓名="'+ⅩM+"") 注意,在 Delph7.0语言的字符串中,连续两个单引号表示一个单引号 上述SQL语句中由两个字符串连接符号“+”,三个字符串连接而成,组成 了一句完整的査询语句。读者要读懂字符串连接的含义。 Inprise Dephi
12.2 动态SQL语句的编程(1) Query组件提供了强大的SQL语言支持功能,这大大提高了数据库应用 程序的执行效率。Query组件不仅可以执行静态的SQL语句,而且可以执行 动态的SQL语句。静态SQL语句在程序设计时便已固定下来,它不包含任何 参数和变量。而动态SQL语句,被称为参数化的语句,其中包含着表示字段 名或表名的参数。在实际程序设计中使用得更多的是动态SQL语句。在这一 节将重点介绍如何给动态SQL语句的参数赋值,以及在应用程序中灵活地使 用SQL语句。 通常采用以下三种途径来为它赋值,这三种途径都是在程序代码中实现 的。 1. 采用字符串连接符号“+”连接组成完整的SQL语句 这里用到字符串连接符号“+”进行字符串的连接操作。具体表示方法 如下: XM='赵凯' Query1.SQL.Add('select * from student where 姓名 = '' ' + XM + ' '' '); 注意,在Delphi 7.0语言的字符串中,连续两个单引号表示一个单引号。 上述SQL语句中由两个字符串连接符号“+”,三个字符串连接而成,组成 了一句完整的查询语句。读者要读懂字符串连接的含义
122动态SQL语句的编程(2) Query组件提供了强大的SQL语言支持功能,这大大提高了数据库应用 程序的执行效率。 Query组件不仅可以执行静态的SQL语句,而且可以执行 动态的SQL语句。静态SQL语句在程序设计时便已固定下来,它不包含任何 参数和变量。而动态SQL语句,被称为参数化的语句,其中包含着表示字段 名或表名的参数。在实际程序设计中使用得更多的是动态SQL语句。在这 节将重点介绍如何给动态SQL语句的参数赋值,以及在应用程序中灵活地使 用SQL语句 通常采用以下三种途径来为它赋值,这三种途径都是在程序代码中实现 的 1采用字符串连接符号“+连接组成完整的SQL语句 这里用到字符串连接符号“+"进行字符串的连接操作。具体表示方法 如下: XM=赵凯 Query1. SQL Add( select* from student where姓名="'+ⅩM+"") 注意,在 Delph7.0语言的字符串中,连续两个单引号表示一个单引号 上述SQL语句中由两个字符串连接符号“+”,三个字符串连接而成,组成 了一句完整的査询语句。读者要读懂字符串连接的含义。 Inprise Deph
12.2 动态SQL语句的编程(2) Query组件提供了强大的SQL语言支持功能,这大大提高了数据库应用 程序的执行效率。Query组件不仅可以执行静态的SQL语句,而且可以执行 动态的SQL语句。静态SQL语句在程序设计时便已固定下来,它不包含任何 参数和变量。而动态SQL语句,被称为参数化的语句,其中包含着表示字段 名或表名的参数。在实际程序设计中使用得更多的是动态SQL语句。在这一 节将重点介绍如何给动态SQL语句的参数赋值,以及在应用程序中灵活地使 用SQL语句。 通常采用以下三种途径来为它赋值,这三种途径都是在程序代码中实现 的。 1. 采用字符串连接符号“+”连接组成完整的SQL语句 这里用到字符串连接符号“+”进行字符串的连接操作。具体表示方法 如下: XM='赵凯' Query1.SQL.Add('select * from student where 姓名 = '' ' + XM + ' '' '); 注意,在Delphi 7.0语言的字符串中,连续两个单引号表示一个单引号。 上述SQL语句中由两个字符串连接符号“+”,三个字符串连接而成,组成 了一句完整的查询语句。读者要读懂字符串连接的含义