前面的学习中,我们已经学习了一些VB6.0操作SQL Server的基本操作,原文链接如下:
VB6.0操作SQL Server(一)——如何连接数据库
VB6.0操作SQL Server(二)——数据录入
VB6.0操作SQL Server(三)——数据删除
VB6.0操作SQL Server(四)——数据修改
今天,我们来学习,数据查询:
VB中查询数据库中的数据不仅可以通过执行SQL语句实现,也可以通过控件或对(如ADO)限定检索数据的条件来实现。
1.简单查询
简单查询可以通过Select语句限定数据源来实现。在Select语句中使用关键字、子句等实现。
下面对几种常用的简单查询进行介绍:
1)使用AS改变查询数据的列名
多数情况下,在SQL Server中创建表的字段都是以英文命名的,这些字段名在显示时给一般用户带来不便,那么可以在查询中采用AS来改变字段在显示时的名称。
例:使用AS改变查询数据的列名
PrivateSub cmdModify_Click() Adodc.RecordSource="select ID as 编号,Mailbox as 电子邮箱 from Mail_Info" Adodc.RefreshEnd Sub
2)计算查询的结果
VB编写的程序中,往往需要将数据库中的数据进行计算,以便获得所需的数值。
通过在查询语句中使用算术运算符,在配合AS为计算出的字段设置名称,即可在查询结果中显示计算得到的数据。
例:计算查询的结果
PrivateSub cmdAcount_Click() Adodc.RecordSource="select 卡号,每小时上机费用,上机时间(每小时上机费用*上机时间)as 收费金额 from 学生上机收费金额表" Adodc.RefreshEnd Sub
3)比较条件查询
在查询语句中可以包含比较运算,常用的比较运算符有=、<、>、<>、!>、!<、>=、<=、!=。使用这些运算符连接表达式形成一个比较条件,系统将根绝该查询条件返回的布尔值来判断数据是否满足该查询条件,只有满足条件的数据才会出现在查询的结果集中。
这些比较条件在查询语句中需要与where子句连用,但是VB提供Filter属性为Recordset中的数据指定筛选条件。该属性根据条件可选择性地屏蔽Recordset对象中的记录,该属性语法如下:Recordset.Filter=字符串
例:通过Filter属性实现比较条件查询
'设置连接、数据源与初始化程序PrivateSub Form_Load() Adodc.connectionString="provider=SQLOLEDB;Data Source=.;InitailCataLog=student;UID=sa;PWD=123456" Adodc.Recordset="select stuID as 学号,stunameas 姓名,stuage as 年龄 from student_info" set DataGrid.DataSource=Adodc Combo1.AddItem"学号" Combo1.AddItem"姓名" Combo1.AddItem"年龄" Combo2.AddItem">" Combo2.AddItem"<" Combo2.AddItem">=" Combo2.AddItem"<=" Combo2.AddItem"="End Sub '查询信息以及错误处PrivateSub cmdQuery_Click() On Error Resume Next If Combo1.text<>"" andCombo2.text<>"" then Adodc.Recordset.Filter=Adodc.Recordset.Fields(Combo1.ListIndex).Name& Combo2.Text & "" & Trim(txtQuery.text) &"" End If If Err then Msgbox"请输入正确信息!",vbOKOnly,"警告"End Sub
2.模糊查询
模糊查询是通过在VB中查询与所给查询内容相似的信息。
实现模糊查询可以通过执行SQL语句中的Like语句实现。Like语句用来确定给定的数据信息是否与指定的模式匹配。(模式可以包含常规字符和通配符字符。)Like也可以在ADO的Filter属性中使用。
下面介绍在Filter属性中使用Like与通配符的几种方法:
3.日期和时间查询
对日期和时间的数据查询,可以通过VB中的ADO的Filter属性限定筛选条件,或执行查询SQL语句实现。
1)查询指定日期时间的数据
在SQL语句中,可以使用运算符(>、=、<、Like等)查询日期/时间类型的数据。日期时间字符串的书写要符合一定的格式,例如“2012-08-13 0:00:01”。
例:查询指定日期时间的数据
PrivateSub cmdQuery_Click() On Error Resume Next Adodc.Recordset.Filter="出生日期="'& Trim(txtYear.Text) & "-" & Trim(txtMonth.Text) &"-" & Trim(txtDay.Text) & "0:00:00"' If Err thenMsgbox"请输入正确信息!",vbOKOnly,"错误"End sub PrivateSub Form_Load() Adodc.ConnectonString="Provider=SQLOLEDB;Data Source=.;InitailCatalog=student;UID=sa;PWD=123456" Adodc.RecordSource="select stuID as 学号,stuNameas 姓名,stuAge as 年龄,stuBornDate as 出生日期 from Student_Info" set DataGrid.DataSource=AdodcEnd Sub
2)分别按年、月、日等查询数据
在设计数据库系统应用程序时,往往需要查询某一年、某个月或某一天的数据。如果采用指定日期时间的方式来查询,虽然可以实现,但是过程是很麻烦的。这时可以采用Year、Month、Day等函数,对数据库中日期时间数据提取年、月、日等相关信息;然后结合指定日期时间的查询方式,即可方便地查询到某一年、某个月或者某一天的数据。
例:按年、月、日等查询数据
Private Sub cmdQuery_Click() Dim stc as string On Error Resume Next Select Case combo1.ListIndex Case 0 stc="year" Case 1 stc="month" Case 2 stc="day" End Select Adodc.RecordSource="select stuID as 学号,stuName as 姓名,stuAge as 年龄,stuBornDate as 出生日期 from Student_Info where " & stc & "(stuBornDate)='" & txtQuery.Text & "'" Adodc.Refresh If Err then Msgbox"请输入正确信息!",vbOKOnly,"错误"\End SubPrivate Sub Form_Load() Adodc.ConnectonString="Provider=SQLOLEDB;Data Source=.;Initail Catalog=student;UID=sa;PWD=123456" Adodc.RecordSource="select stuID as 学号,stuName as 姓名,stuAge as 年龄,stuBornDate as 出生日期 from Student_Info" set DataGrid.DataSource=Adodc combo1.AddItem"按年" combo1.AddItem"按月" combo1.AddItem"按日"End Sub
通过VB6.0操作SQL Server进行数据查询的内容就先介绍这么多,不知道您是否能够理解,如果有什么好的意见或建议,还望不吝赐教。
- 21楼Atto_1小时前
- 请问,代码那块的编辑格式怎么弄的?
- Re: linlin802306191小时前
- 回复Atto_n编辑页面有个插入代码的按钮,点一下,选择自己要插入的语言,然后写代码就可以了。
- 20楼liqingmei1017882小时前
- 学习了!很好
- Re: linlin802306192小时前
- 回复liqingmei101788n谢谢~
- 19楼wwwwenhuan昨天 20:38
- 挺好的,加油!
- Re: linlin802306192小时前
- 回复wwwwenhuann3Q~[e04]
- 18楼wp562846864昨天 20:27
- 很好,很不错。。
- Re: linlin80230619昨天 20:27
- 回复wp562846864n谢谢~
- 17楼gwblue昨天 19:13
- 挺好加油!
- Re: linlin80230619昨天 19:31
- 回复gwbluen谢谢~
- 16楼jiuqiyuliang昨天 17:45
- 够详细,挺好
- Re: linlin80230619昨天 17:45
- 回复jiuqiyuliangn欢迎查漏补缺~
- 15楼昨天 17:09
- 学习了,很棒,加油啊。
- 14楼lfmilaoshi昨天 15:44
- 系列文章,很老道!米老师
- Re: linlin80230619昨天 16:54
- 回复lfmilaoshin还有很多不足的地方呢~哈哈~
- 13楼liujiahan629629昨天 15:44
- 这么厉害了,还不吝赐教,额!
- Re: linlin80230619昨天 15:44
- 回复liujiahan629629n取长补短呀~不能闭门造车~
- 12楼dxxang昨天 14:36
- 学习了
- Re: linlin80230619昨天 15:43
- 回复dxxangn互相学习~
- 11楼han_yankun2009昨天 14:24
- 学习了
- Re: linlin80230619昨天 14:29
- 回复han_yankun2009n互相学习~
- 10楼xiaoduishenghuogo昨天 11:24
- 层层深入、循序渐进,做的不错!
- Re: linlin80230619昨天 11:25
- 回复xiaoduishenghuogon多谢涛哥夸奖~
- 9楼lishehe昨天 11:22
- 学习了,呵呵,加油[e03]
- Re: linlin80230619昨天 11:22
- 回复lishehen互相学习~
- 8楼hejingyuan6昨天 10:22
- 学习了
- Re: linlin80230619昨天 11:05
- 回复hejingyuan6n互相学习~
- 7楼liujiahan629629昨天 10:16
- 不过还是送你一个[e10]
- 6楼lzh1110昨天 10:15
- 嗯,不错!
- Re: linlin80230619昨天 10:16
- 回复lzh1110n咩哈哈~
- 5楼lidaasky昨天 10:15
- 模糊查询和正则表达式有关系,可以学学
- Re: linlin80230619昨天 10:15
- 回复lidaaskyn好的~谢谢啦~
- 4楼zuozuo1245昨天 09:21
- 不错,学习了
- Re: linlin80230619昨天 10:15
- 回复zuozuo1245n互相学习~
- 3楼wall0619昨天 08:24
- 写的挺全面的!也有自己的思考!不错!推荐了!
- Re: linlin80230619昨天 08:24
- 回复wall0619n[e04]
- 2楼leimengyuanlian昨天 08:10
- 好详细,学习了
- Re: linlin80230619昨天 08:13
- 回复leimengyuanliann互相学习~
- 1楼wangyongxia921昨天 07:52
- 学习!
- Re: linlin80230619昨天 08:05
- 回复wangyongxia921n互相学习~