数据库

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.EOFTrue,表示记录过滤后无数据,重新打开原来的基本情况表。

注意:代码中的两处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.mdbRecordSource属性空缺,各文本框的DataSource=Data1DataField属性分别设置为学号、姓名、课程、成绩,而照片字段绑定图形框。

本例要求从基本情况中选择学生的学号、姓名、照片,从学生成绩表中选择该学生的课程和成绩来构成记录集,可在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控件和一个网格控件MSFlexGrid1Data1DatabaseName属性指定数据库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=Adodc1DataField属性分别设置为学号、姓名、课程、成绩,而字段照片绑定图形框。

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控件。

    要绘制图表,可使用绑定控件MsChartMsChart控件也是一个Active X控件,需要通过工程部件菜单命令,将MsChart控件添加到工具箱中。要将作图数据传送到Mschart控件,只需要设置MsChart1.DataSource=Adodc1。如果只要选择部分数据作图,可以将作图数据存入到数组,再设置MsChart1.Data=数组名即可。

     AdodclRecordSource属性设置为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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值