在vb数据库编程中,SQL使用SELECT语句实现查询,SELECT语句基本上是数据库记录集的定义语句。Data控件的RecordSource属性不—定是数据表名,可以是数据表中的某些行或多个数据表中的数据组合。可以直接在Data控件的RecordSource属性栏中输入SQL,也可在代码中通过SQL语句将选择的记录集赋给数据控件的RecordSource属性,也可赋予对象变量。
使用SQL语句查询只要将例9.5中命令按钮Command5_Click事件写为如下代码:
Private Sub Command5_Click()
Dim mzy As String
mzy = InputBox$("请输入专业", "查找窗")
Data1.RecordSource = "Select * From 基本情况 Where 专业 = '" & mzy & "'"
Data1.Refresh
If Data1.Recordset.EOF Then
MsgBox "无此专业!", , "提示"
Data1.RecordSource = "基本情况"
Data1.Refresh
End If
End Sub
程序中“Select *”选择表中所有字段(也可以指定选择部分列);“From基本情况”短语指定数据来源;“Where 专业 = '" & mzy & "'"”短语构成查询条件,用于过滤表中的记录;Data1.Refresh方法激活这些变化。此时,若Data1.Recordset.EOF为True,表示记录过滤后无数据,重新打开原来的基本情况表。
注意:代码中的两处Refresh语句不能合用为一句,这是因为在执行了Select命令后,必须激活这些变化,然后才能判断记录集内有无数据。
也可用SQL语句实现模糊查询,命令按钮Command5_Click事件改为如下代码:
Private Sub Command5_Click()
Dim mzy As String
mzy = InputBox$("请输入专业", "查找窗")
Data1.RecordSource = "Select * From 基本情况 Where 专业 like '*" & mzy & "*'"
Data1.Refresh
If Data1.Recordset.EOF Then
MsgBox "无此专业!", , "提示"
Data1.RecordSource = "基本情况"
Data1.Refresh
End If
End Sub
例9.9 用SQL语句从Student.mdb数据库的两个数据表中选择数据构成记录集,并通过数据控件浏览记录集。
在窗体上放置与例9.2类似的控件,如图9.20所示。Data控件的DatabaseName属性指定数据库Student.mdb,RecordSource属性空缺,各文本框的DataSource=Data1,DataField属性分别设置为学号、姓名、课程、成绩,而照片字段绑定图形框。
本例要求从基本情况中选择学生的学号、姓名、照片,从学生成绩表中选择该学生的课程和成绩来构成记录集,可在Form_ Load事件中使用SQL语句,通过“Where 学生成绩表.学号=基本情况.学号”短语实现两表之间的连接,用Select命令从学生成绩表中选择课程、成绩字段,从基本情况表中选择学号、姓名和照片字段构成记录集:
Private Sub Form_Load()
Data1.RecordSource = "Select 基本情况.学号,基本情况.姓名,基本情况.照片,学生成绩表.课程,学生成绩表.成绩 From 学生成绩表,基本情况 Where 学生成绩表.学号=基本情况.学号"
End Sub
当窗体启动后,数据控件上的箭头按钮可改变记录位置。如果要求显示的记录按一定的顺序排列,可使用ORDER BY子句。
注意:当FROM子句列出多个表时,它们出现的顺序并不重要。Select短语中字段的排列决定了所产生的记录集内每一列数据的排列顺序。为了提高可读性可以重新排序表中的字段。
例9.10 用SQL指令按专业统计Student.mdb数据库中各专业的人数,要求按图9.20所示形式输出。
在窗体上放置一个Data控件和一个网格控件MSFlexGrid1。Data1的DatabaseName属性指定数据库Student.mdb,网格控件的DataSource=Data1。
为了统计各专业的人数,需要对基本情况表内的记录按专业分组。“Group By专业”可将同一专业的记录合并成一条新记录。要记录统计结果,需要构造一个输出字段,此时可使用SQL的统计函数Count()作为输出字段,它按专业分组创建摘要值。若希望按用户要求的标题显示统计摘要值,可用As短语命名一个别名。“按专业统计人数”按钮的指令代码为:
Private Sub Command1_Click()
Data1.RecordSource = "select 专业,count(*) as 人数 from 基本情况 group by 专业"
Data1.Refresh
End Sub
有时,我们只要返回一定数量的记录,如获取平均成绩最好的前5名,则“按平均成绩统计前5名” 按钮的指令代码为:
Private Sub Command2_Click()
Data1.RecordSource = "select top 5 学号,avg(成绩) as 平均成绩 from 学生成绩表 group by 学号 order by avg(成绩) desc"
Data1.Refresh
End Sub
这里,“Group by 学号”短语将同一学生的各门课程的记录合并成一条记录,由Avg(成绩)计算出该学生的平均成绩,“Order By Avg(成绩) Desc”短语按平均成绩的降序排列数据,“Top 5”短语返回最前面的5条记录。如果不包括ORDER BY子句,查询将从学生成绩表中返回随机的5条记录。“恢复原表内容”按钮的指令代码为:
Private Sub Command3_Click()
Data1.RecordSource = "基本情况"
Data1.Refresh
End Sub
以上介绍的是在Data控件上使用SQL,如果要在ADO数据控件上使用SQL语句,最好通过代码配合ADO数据控件完成数据库的连接,这可给程序带来更大的灵活性。
Data控件改用ADO数据控件,用SQL语句从Student.mdb数据库的两个数据表中选择数据构成记录集。
数据库设计书籍将Data控件改用ADO数据控件Adodc1,各文本框的Datasource=Adodc1,DataField属性分别设置为学号、姓名、课程、成绩,而字段照片绑定图形框。
ADO数据控件的ConnectionString属性设置为与数据源连接的相关信息,通过操作完成与student.mdb的数据连接(此时,可查看到ConnectionString属性的内容);DataSource指定连接的数据库文件名。
即DataSource属性使用SQL语句:
select 学生成绩表.*,基本情况.姓名,基本情况.照片 from 学生成绩表,基本情况 where 学生成绩表.学号=基本情况.学号
程序执行后将产生与图9.22所示相同的效果。
例9.12 设计一个窗体,计算Student.mdb数据库内学生成绩表中每个学生的平均成绩,产生姓名、平均成绩和最低成绩三项数据,按平均成绩降序排列数据,并用该数据作图。
学生成绩表中没有平均成绩和最低成绩这两项数据,可以在SELECT子句内使用统计函数AVG()和Min()产生,“Group By学号”可将同一学生的记录合并成一条新记录。学生成绩表中没有姓名字段,故需要通过条件“基本情况.学号=学生成绩表.学号”从基本情况表取得。然后,将产生的记录集连接到ADO数据控件上。
要显示作图数据,可在窗体上放置一个网格控件(选择工程→部件中Microsoft Data Grid Control 6.0 (OLEDB)),设置网格的DataSource=Adodcl,将其绑定到ADO数据控件上。此例将Adodc1控件的Visible属性设为False,故在图9.22中看不到Adodc1控件。
要绘制图表,可使用绑定控件MsChart。MsChart控件也是一个Active X控件,需要通过“工程→部件”菜单命令,将MsChart控件添加到工具箱中。要将作图数据传送到Mschart控件,只需要设置MsChart1.DataSource=Adodc1。如果只要选择部分数据作图,可以将作图数据存入到数组,再设置MsChart1.Data=数组名即可。
将Adodcl的RecordSource属性设置为SQL语句,代码如下:
”select 基本情况.姓名,avg(成绩) as 平均成绩,min(成绩) as 最低成绩 from 学生成绩表,基本情况 where 学生成绩表.学号=基本情况.学号 group by 学生成绩表.学号,基本情况.姓名 order by avg(成绩) desc”
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29057434/viewspace-768031/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29057434/viewspace-768031/