1 / 26

Visual FoxPro 程序设计教程

Visual FoxPro 程序设计教程. 第 12 章 检 索 数 据. 1. 查询的本质. SELECT-SQL 语句是 SQL 查询的心脏。其语法格式为: SELECT [ALL | DISTINCT] [Alias.] Select_Item [AS Column_Name] [, [Alias.] Select_Item [AS Column_Name] ...] FROM [DatabaseName!]Table [[AS] Local_Alias]

sorley
Download Presentation

Visual FoxPro 程序设计教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual FoxPro 程序设计教程

  2. 第12章 检 索 数 据 1 查询的本质 SELECT-SQL语句是SQL查询的心脏。其语法格式为: SELECT [ALL | DISTINCT] [Alias.] Select_Item [AS Column_Name] [, [Alias.] Select_Item [AS Column_Name] ...] FROM [DatabaseName!]Table [[AS] Local_Alias] [[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN DatabaseName!] Table [[AS] Local_Alias][ON JoinCondition ]] [[INTO Destination] | [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]]

  3. [PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE JoinCondition [AND JoinCondition ...][AND | OR FilterCondition...]] [GROUP BY GroupColumn [, GroupColumn ...]] [HAVING FilterCondition] [UNION [ALL] SELECTCommand] [ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]] 其中各子句的说明可以参见联机帮助。使用“查询设计器”可以快速创建一个查询,通过察看“查询”中的语句可以帮助我们学习SELECT-SQL语法;反过来,掌握了SELECT-SQL语法又可以更加灵活地建立“查询”。 总复习教学进程

  4. 2 用“查询设计器”创建查询 建立查询的步骤为: ① 使用“查询设计器”开始建立查询。 ② 选择出现在查询结果中的字段。 ③ 设置选择条件来查找可给出所需结果的记录。 ④ 设置排序或分组选项来组织查询结果。 ⑤ 选择查询结果的输入类型:表、报表、浏览等等。 ⑥ 运行查询。 总复习教学进程

  5. 启动“查询设计器” 启动“查询设计器”的步骤如下: ① 从“文件”菜单中选择“新建”命令,或者单击常用工具栏上的“新建”按钮。 ② 在“新建”对话框中,选中“查询”单选钮,然后单击“新建文件”按钮。 ③ 在创建新查询时,系统打开“添加表或视图”对话框,提示从当前数据库或自由表中选择表或视图,如图12-1。 依次选择所需要的表或视图,按“添加”按钮,最后按“关闭”按钮,Visual FoxPro将显示“查询设计器”窗口,如图12-2所示。 总复习教学进程

  6. 图12-1 选择要查询的表或视图 图12-2 “查询设计器”窗口 若要添加和移去表,其操作步骤为: ① 选择当前表,再选择“查询设计器”工具栏上的“移去表”按钮。 ② 从“查询设计器”工具栏上选择“添加表”按钮,再选择想要的的表或视图。 总复习教学进程

  7. 3 查询的SQL语句 在查询中添加注释 如果想以某种方式标识查询,或对它作一些注释说明,可以在查询中添加备注,这对以后确认查询及其目的很有帮助。给查询添加注释的步骤如下: ① 从“查询”菜单中选择“备注”。 ② 在“备注”框中,键入任何与查询有关的附注,如图12-9所示。 图12-9 在查询中添加注释 ③ 选择“确定”。 总复习教学进程

  8. 4 在表单中使用查询 【例12-1】设计一个数据查询表单,可以查询数据库中优秀学生的成绩、平均成绩前5名以及成绩不及格的学生名单。如图12-12所示。 其中成绩优秀是指某门课程的成绩 > 85分。 图12-12 数据查询表单 总复习教学进程

  9. 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 创建数据环境。 (3) 编写程序代码。 编写表单的Load事件代码: THIS.Tag="SELECT Student.学号, Student.姓名, Bj.班级名称, Kc.课程名, Cj.成绩 "; + "FROM bj INNER JOIN student "; + " INNER JOIN cj "; + " INNER JOIN kc "; + " ON Kc.课程号 = Cj.课程号 "; + " ON Student.学号 = Cj.学号 "; + " ON Bj.班级编号 = Student.班级编号 "; + " ORDER BY Student.学号 INTO CURSOR Qu" 总复习教学进程

  10. 编写表单的Activate事件代码: WITH THIS.Grid1 .Top = THIS.OptionGroup1.Height .Left = 0 .Width = THIS.Width .Height = THIS.Height - .Top ENDWITH 编写表格Grid1的Init事件代码: THIS.RecordSource = THISFORM.Tag 编写按钮组中第1个按钮Option1的Click事件代码: THISFORM.Grid1.RecordSource=THISFORM.Tag THISFORM.Grid1.Refresh 总复习教学进程

  11. 编写按钮组中第2个按钮Option1的Click事件代码:编写按钮组中第2个按钮Option1的Click事件代码: THIS.Tag = "SELECT Student.学号, Student.姓名, Bj.班级名称, Kc.课程名, Cj.成绩 "; + "FROM 学生管理!bj INNER JOIN 学生管理!student "; + " INNER JOIN 学生管理!cj "; + " INNER JOIN 学生管理!kc "; + " ON Kc.课程号 = Cj.课程号 "; + " ON Student.学号 = Cj.学号 "; + " ON Bj.班级编号 = Student.班级编号 "; + " WHERE (Kc.课程名 = '大学' "; + " AND Cj.成绩 > 85) "; + " OR (Kc.课程名 = '高等' "; + " AND Cj.成绩 > 85) "; + " ORDER BY Student.学号 "; + " DESC INTO CURSOR Que" THISFORM.Grid1.RecordSource = THIS.Tag THISFORM.Grid1.Refresh 总复习教学进程

  12. 编写按钮组中第3个按钮Option1的Click事件代码:编写按钮组中第3个按钮Option1的Click事件代码: THIS.Tag="SELECT TOP 5 Student.学号,Student.姓名,Bj.班级名称,AVG(Cj.成绩) as 平均成绩 "; + " FROM 学生管理!bj INNER JOIN 学生管理!student "; + " INNER JOIN 学生管理!cj "; + " INNER JOIN 学生管理!kc "; + " ON Kc.课程号 = Cj.课程号 "; + " ON Student.学号 = Cj.学号 "; + " ON Bj.班级编号 = Student.班级编号 "; + " GROUP BY Student.学号 ORDER BY 平均成绩 DESC INTO CURSOR Que" THISFORM.Grid1.RecordSource = THIS.Tag THISFORM.Grid1.Refresh 总复习教学进程

  13. 编写按钮组中第4个按钮Option1的Click事件代码:编写按钮组中第4个按钮Option1的Click事件代码: THIS.Tag = "SELECT Student.学号, Student.姓名, Bj.班级名称, Kc.课程名, Cj.成绩 "; + " FROM 学生管理!bj INNER JOIN 学生管理!student "; + " INNER JOIN 学生管理!cj "; + " INNER JOIN 学生管理!kc "; + " ON Kc.课程号 = Cj.课程号 "; + " ON Student.学号 = Cj.学号 "; + " ON Bj.班级编号 = Student.班级编号 "; + " WHERE (Kc.课程名 = '大学' "; + " AND Cj.成绩 < 60) "; + " OR (Kc.课程名 = '高等' "; + " AND Cj.成绩 < 60) "; + " ORDER BY Student.学号 "; + " DESC INTO CURSOR Que" THISFORM.Grid1.RecordSource=THIS.Tag THISFORM.Grid1.Refresh 总复习教学进程

  14. 【例12-2】设计一个数据查询表单,可以按“班级”和“课程”的组合查询数据库中的数据。如图12-13所示。【例12-2】设计一个数据查询表单,可以按“班级”和“课程”的组合查询数据库中的数据。如图12-13所示。 图12-13 数据查询表单 总复习教学进程

  15. (1) 创建数据环境。 (2) 建立应用程序用户界面与设置对象属性 (3) 编写程序代码。 ●表单的Load事件代码: THIS.Tag="SELECT Student.学号, Student.姓名, Bj.班级名称, Kc.课程名, Cj.成绩 "; + "FROM bj INNER JOIN student "; + " INNER JOIN cj "; + " INNER JOIN kc "; + " ON Kc.课程号 = Cj.课程号 "; + " ON Student.学号 = Cj.学号 "; + " ON Bj.班级编号 = Student.班级编号 "; + " ORDER BY Student.学号 INTO CURSOR Qu" 总复习教学进程

  16. ● 表单的Activate事件代码: WITH THIS.Grid1 .Top = THIS.Container1.Height .Left = 0 .Width = THIS.Width .Height = THIS.Height – .Top ENDWITH ●编写组合框Combo1的Click事件代码: THIS.Tag = THIS.DisplayValue DO CASE CASE THIS.Parent.Check1.Value = 0 AND THIS.Parent.Check2.Value = 0 qa1 = " .T. " CASE THIS.Parent.Check1.Value = 1 AND THIS.Parent.Check2.Value = 0

  17. qa1 = "Student.班级编号 = THIS.Tag " CASE THIS.Parent.Check1.Value = 0 AND THIS.Parent.Check2.Value = 1 qa1 = " Cj.课程号 = THIS.Parent.Combo2.Tag " CASE THIS.Parent.Check1.Value = 1 AND THIS.Parent.Check2.Value = 1 qa1 = "Student.班级编号 = THIS.Tag AND Cj.课程号 = THIS.Parent.Combo2.Tag “ ENDCASE THISFORM.Tag = "SELECT Student.学号, Student.姓名, Bj.班级名称, Kc.课程名, Cj.成绩 "; + "FROM 学生管理!bj INNER JOIN 学生管理!student "; + " INNER JOIN 学生管理!cj "; + " INNER JOIN 学生管理!kc "; + " ON Kc.课程号 = Cj.课程号 ";

  18. + " ON Student.学号 = Cj.学号 "; + " ON Bj.班级编号 = Student.班级编号 "; + " WHERE " + qa1 ; + " ORDER BY Student.学号 DESC INTO CURSOR Que" THISFORM.Grid1.RecordSource=THISFORM.Tag THISFORM.Grid1.Refresh ●编写组合框Combo2的Click事件代码: THIS.Tag = THIS.DisplayValue DO CASE CASE THIS.Parent.Check1.Value=0 AND THIS.Parent.Check2.Value=0 qa1 = " .t. " CASE THIS.Parent.Check1.Value=1 AND

  19. THIS.Parent.Check2.Value=0 qa1 = " Student.班级编号 = THIS.Parent.Combo1.Tag " CASE THIS.Parent.Check1.Value=0 AND THIS.Parent.Check2.Value=1 qa1 = " Cj.课程号 = THIS.Tag " CASE THIS.Parent.Check1.Value=1 AND THIS.Parent.Check2.Value=1 qa1 = " Student.班级编号 = THIS.Parent.Combo1.Tag AND Cj.课程号 = THIS.Tag " ENDCASE THISFORM.Tag = "SELECT Student.学号, Student.姓名, Bj.班级名称, Kc.课程名, Cj.成绩 ";

  20. + "FROM 学生管理!bj INNER JOIN 学生管理!student "; + " INNER JOIN 学生管理!cj "; + " INNER JOIN 学生管理!kc "; + " ON Kc.课程号 = Cj.课程号 "; + " ON Student.学号 = Cj.学号 "; + " ON Bj.班级编号 = Student.班级编号 "; + " WHERE " + qa1 ; + " ORDER BY Student.学号 DESC INTO CURSOR Que" THISFORM.Grid1.RecordSource=THISFORM.Tag THISFORM.Grid1.Refresh ●编写复选框Check1的Click事件代码: THIS.Parent.Combo1.Click ●编写复选框Check2的Click事件代码: THIS.Parent.Combo2.Click ()

  21. 【例12-3】修改例10-7,使用下拉列表框来输入“班级编号”(如图12-14)。【例12-3】修改例10-7,使用下拉列表框来输入“班级编号”(如图12-14)。 图12-14 使用下拉列表框输入“班级编号

  22. 在例10-7的基础之上进行修改,具体步骤如下:在例10-7的基础之上进行修改,具体步骤如下: (1) 在表单中增加一个数组属性ss(1),用来存放查询所得到的班级编号。 (2) 修改表单, (3) 修改组合框的属性 (4) 修改自定义方法disi()的代码: LPARAMETERS L THIS.PageFrame1.Page1.SetAll("Enabled",IIF(L,.T.,.F.),"TextBox") THIS.PageFrame1.Page1.SetAll("Enabled",IIF(L,.T.,.F.),"OptionGroup") THIS.PageFrame1.Page1.SetAll("Enabled",IIF(L,.T.,.F.),"Editbox") THIS.PageFrame1.Page1.SetAll("Enabled",IIF(L,.T.,.F.),"Combobox") THIS.CommandGroup1.Enabled=IIF(L,.F.,.T.)

  23. (5) 编写窗体的Load事件代码: SELECT DISTINCT Student.班级编号 FROM student INTO ARRAY THIS.ss (6) 修改“增加”按钮Command1的Click事件代码: IF THIS.Caption = "添加" THIS.Caption = "保存" THIS.Parent.Command2.Caption = "取消" THISFORM.disi(.t.) THIS.Parent.Tag = STR(RECNO()) APPEND BLANK ELSE

  24. THIS.Caption="添加" THIS.Parent.Command2.Caption="编辑" THISFORM.disi(.f.) TABLEUPDATE() SELECT DISTINCT Student.班级编号 FROM student INTO ARRAY THISFORM.ss ENDIF THISFORM.PageFrame1.Refresh (7) 编写组合框Combo1的KeyPress事件代码: LPARAMETERS nKeyCode, nShiftAltCtrl THISFORM.xx=THIS.DisplayValue IF nkeycode = 13 AINS(THISFORM.ss,1) THISFORM.ss(1) = THIS.DisplayValue ENDIF

  25. 习题12 12.1 设计一个查询,输出职工数据库中各部门的人数以及工资总数。 12.2 设计一个查询,输出职工数据库中各部门的男职工人数以及平均工资。 12.3 设计一个查询,输出职工数据库中的中级职称的人数以及平均工资。 12.4 在表单中使用习题12.1、12.2、12.3所设计的查询。如图12-15所示。 12.5 修改习题12.4,使用SQL语句代替查询文件。 12.6 修改习题10.10,使用SQL语句代替SET FILTER进行对数据的筛选。

  26. 图12-15 调用查询

More Related