• 1. 第9章 使用TQuery组件和SQL语言编程 本章要点:     TQuery组件的常用属性与方      使用TQuery组件执行SQL语言的语句的方法    使用TQuery组件执行静态查询的方法       使用TQuery组件执行动态查询的方法 参数查询的含义与其实现
  • 2. 9.1 TQuery组件的作用 利用TQuery组件能够实现的功能有: (1)通过执行Insert、Update、Delete等SQL语句实现记录的增加、修改、删除等操作,这类操作不会生成数据集; (2)通过执行SQL–Select语句来实现静态查询; (3)通过执行带有变量的SQL–Select语句来实现动态查询; (4)通过执行带有参数的SQL–Select语句来实现动态参数查询; (5)如果是产生数据集的TQuery组件,还可以通过它的记录指针的移动来浏览数据集的内容。
  • 3. 9.2 TQuery组件的属性和方法 9.2.1 TQuery组件的常用属性 1. DataBaseName属性 2. SQL属性 3. Active属性 4. Filter属性该属性在程序中设置的具体格式如下: Query1.Filter := '字段名=字段值'
  • 4. 9.2.2 TQuery组件的常用方法 Open方法 2. ExecSQL方法 3. Close方法 4. Prepare方法 5. SQL属性的两个基本方法 (1)Add方法 (2)Clear方法
  • 5. 9.3 使用TQuery组件实现静态查询 所谓静态查询就是指SELECT语句中的所有成份都是确定的,使用的数据均是常量。 【例9-2】 通过TQuery组件从“教学.MDB”数据库中查询每个学生的学生姓名(假设姓名无重复)和平均成绩,并按平均成绩的降序排列。要求通过程序代码执行SQL语句实现该查询。该程序的设计界面如图9-5所示,运行时单击“执行查询”按钮将把查询的执行结果显示在DBGrid1组件中,如图9-6所示。
  • 6. 分析:学生姓名存放在学生表中,学生成绩存放在成绩表中,应根据学号相等建立这两个表的内部联结。由于要求出每个学生的平均成绩,应根据姓名进行分组,使用统计函数AVG()来求每个学生的平均成绩。降序排序使用带有DESC关键词的ORDER BY子句。实现的一般步骤如下。 (1)执行TQuery组件的SQL属性的Clear方法,清除原来的SQL语句。 (2)通过TQuery组件的SQL属性的Add方法,把要执行的SQL语句添加到该属性中。 (3)调用TQuery组件的Open方法(返回数据集)或ExecSQL方法(不返回数据集)以执行SQL语句。
  • 7. (本页无文本内容)
  • 8. 9.4 使用TQuery组件实现记录的静态增加、删除和修改 【例9-3】 设计一个应用程序,程序的设计界面如图9-7所示。程序运行界面如图9-8所示。程序刚运行时只有“增添”按钮可用,单击该按钮将向学生表中插入一条新记录,然后“增添”按钮不可用,“删除”按钮可用;单击“删除”按钮将删除学生表中的一条指定记录,然后“删除”按钮不可用,“修改”按钮可用;单击“修改”按钮把所有的男生的年龄增加1岁,“修改”按钮不可用。
  • 9. (本页无文本内容)
  • 10. 9.5 使用TQuery组件实现动态查询 9.5.1 使用字符串连接符“+”实现动态查询 【例9-4】 设计一个查询教师授课情况的应用程序。程序的设计界面如图9-9所示,程序的运行界面如图9-10所示。程序运行时,在“教师编号”后面的编辑框中输入一个教师号后单击“动态查询”按钮,该教师的授课情况将在DBGrid1组件中显示出来。 分析:本题是动态查询,在运行时用户输入的教师编号存放在Edit1的Text属性中,应根据Edit1的Text属性值形成查询语句,注意两个单引号在字符串中作为一个单引号。
  • 11. (本页无文本内容)
  • 12. 9.5.2 使用Params属性实现参数查询 【例9-5】 编写一个根据用户输入的学生姓名查询该学生的所有课程成绩的程序。程序的设计界面如图9-11所示,程序的运行界面如图9-12所示。程序运行时,在“学生姓名”文本框中输入一个学生姓名后单击“动态查询”按钮,该学生所有课程的成绩将在DBGrid1组件中显示出来,显示的内容包括学号、学生名、课程号和成绩。 分析:本例涉及的两个表中的数据,查询结果中的姓名包含在学生表中,成绩包含在课程表中,应在这两个表之间根据学号相等建立内部联结。本例使用参数查询的方法,在调用TQuery组件的Open方法之前,应给参数赋值。
  • 13. (本页无文本内容)
  • 14. 9.5.3 使用ParamByName方法实现参数查询 还可以使用TQuery组件的ParamByName方法也可以为参数赋值。ParamByName方法是一个函数,其参数是一个动态SQL语句的参数名,故使用该语句必须要知道动态SQL语句参数的名字。 使用Params属性和ParamByName方法均可给参数赋值实现动态查询功能。使用Params属性给参数赋值,必须知道参数出现的先后次序,在赋值时要和数组元素的下标对应起来。使用ParamByName方法给参数赋值,要指定参数的名称,较为直观,容易理解。
  • 15. 9.6 使用TQuery组件开发数据库应用程序综合实例 【例9-6】 用Database Desktop应用程序设计一个工资表“GZB”,表的结构如图9-13所示,表中的数据采用用户输入的模拟数据。 程序的主要功能如下:程序运行时在表格中显示工资表GZB中的内容,窗口的上半部分各组件用来显示当前记录的内容。当在数据表格组件中单击某一单元格时,被选中的记录的相应字段将显示在窗口上半部分的相应组件中。程序刚运行的时候,各组件中显示的内容无法进行修改。当单击“插入”按钮的时候,可以输入一条记录的值,然后单击“确定”按钮把输入的记录保存到表中,单击“取消”按钮取消插入操作。当单击“修改”按钮后,可修改当前记录的值,修改后单击“确定”或“取消”按钮将对当前的修改进行存盘或取消。单击“删除”按钮删除当前记录。单击“查询”按钮,弹出如图9-16所示的“按职称查询窗口”,在该窗口中的列表框中选择相应的职称时,显示相应职称的人员工资信息。注意操作时按钮的可用状态也要进行相应的变化,变化情况请参照例8-14。
  • 16. 分析:根据要求,在主界面中,为了使用SQL语言的语句进行插入、修改和删除操作,可在主界面上添加一个TQuery组件,用来执行相应的SQL语言的语句:“插入”操作可使用“Insert Into”语句、“修改”操作可使用“Update”语句,“删除”操作可使用“Delete From”语句。为了能够立即显示操作的结果,在主界面上增添一个TTable组件和一个数据表格组件,通过设置使表格组件能够显示GZB的内容。删除操作需要条件,否则删除的是全部记录,为实现当前记录的删除,可先用一个变量记下当前记录的“编号”字段的值,然后在“删除”语句中设置条件为“编号等于该变量的值”。要查询窗口中,为实现“选中列表框中的一个职称值时,在表格组件中显示相应职称的人员的信息”,可使用“SELECT”语句来进行查询。
  • 17. (本页无文本内容)
  • 18. (本页无文本内容)
  • 19. 小结 查询是数据库应用程序中最重要的操作之一,基本上所有的数据库应用程序都需要进行查询操作。查询可以通过SQL语句的Select语句来实现,在Delphi中可通过TQuery组件来执行SQL语言的命令。本章首先介绍TQuery组件的常用属性和方法,然后在此基础上以具体实例的形式讲解了通过TQuery组件执行SELECT、UPDATE、DELETE、INSERT等SQL命令的方法。本章的重点是动态SQL查询,应熟练掌握参数查询的概念和实现方法。本章的最后通过一个实例,对利用TQuery组件进行数据库应用程序开发进行了综合。