说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB用类来编写数据库程序

HTML文档下载 WORD文档下载 PDF文档下载
VB用类来编写数据库程序


类模块使VB编程更为简洁。通过封装技术将复杂的代码同程序的其它部分分隔开,
并通过方法和属性同程序的其它部分对话。对于类的种种好处,相信大家都非常清
楚了。本文主要介绍类在数据库编程方面的应用。

通过类模块的封装,你可以只需要书写一次那些冗长繁人的SQL查询语句,并能方
便地同他人分享你的代码。本文向你介绍如何利用类模块创建SQL查询对象。本文
用到Northwind数据库。数据访问技术用的是DAO。


工程目的
本工程的目的是要建立一个查询,该查询将从Northwind数据库中返回Beverage供
应商的信息。这些信息包括哪种饮料是由哪些供应商供应的。看上去很简单,但你
得对三个表进行操作,这三个表分别是Suppliers, Categories和Products, 因此
你需要写一串很长的SQL查询语句,所以你只希望写一次就够了。
设计类模块
首先确认你已添加了对Microsoft DAO 3.5 Object Library的引用。接下来在工程
中添加一个类模块。将该类模块重命名为ClsSQL。
让我们先为这个类创建两个新的公共属性,代码如下:

Public CompanyName As String 'Object property
Public CategoryName As String 'Object property


添加一个公用变量,名为strMsg。该变量用来保存对象返回给用户的信息。
Public CompanyName As String 'Object property
Public CategoryName As String 'Object property

Public strMsg As String


现在为这个类编写RunQuery方法。
Sub RunQuery()

Dim strSQL As String
Dim db As Database
Dim qdfTemp As QueryDef
Dim rsResults As Recordset

'Construct the SQL string
strSQL = "SELECT DISTINCTROW Suppliers.CompanyName, " & _
"Products.ProductName FROM Suppliers INNER JOIN " & _
"(Categories INNER JOIN Products ON Categories.CategoryID = " & _
"Products.CategoryID) " & _
"ON Suppliers.SupplierID = Products.SupplierID " & _
"WHERE (((Suppliers.CompanyName)='" & CompanyName & "') AND " & _
"((Categories.CategoryName)='" & CategoryName & "'))"



Set db = OpenDatabase("C:\MSOffice\Access\Samples\Northwind.mdb")

Set qdfTemp = db.CreateQueryDef("")
qdfTemp.SQL = strSQL

Set rsResults = qdfTemp.OpenRecordset(dbOpenSnapshot)
rsResults.MoveFirst

'Enumerate the recordset
With rsResults
Do While Not .EOF
Debug.Print .Fields(0); " "; .Fields(1)
strMsg = strMsg & .Fields(1) & vbCrLf
.MoveNext
Loop
End With

rsResults.Close
qdfTemp.Close

End Sub


现在让我们来简单地分析一下上面的代码。在上面的代码中数据库的路径是用的绝
对路径。如果Northwind数据库的路径同你机器上的不同,你需要修改这个路径,
以便程序能找到这个数据库。
SQL代码是在Access中建立好然后粘贴到程序中来的。这样做不仅免去你书写代码
的麻烦,而且还不容易出错。在粘贴完之后,将原来在SQL代码中的"Bigfoot
Breweries" 和 "Beverages"用公共变量CompanyName和CategoryName替换掉。

在定义了QueryDef之后,程序枚举记录集。记录集的信息不仅在立即窗口中显示出
来,同时被写入strMsg变量中。

在结束对类模块的编码之前,我们还需要对类模块的Terminate事件编写代码。将
下面的代码放到该事件中。

Private Sub Class_Terminate()

MsgBox strMsg, Title:="Beverage Results for " & CompanyName, buttons:=
vbExclamation

End Sub


现在我们已结束了对类模块的编程。接下来在窗体中添加一个命令按钮。将该命令
按钮的Caption属性设置为&Run Query。将下面的代码放在命令按钮的鼠标单击事
件中。
Private Sub Command1_Click()

Dim objSQL As ClsSQL

'Set the object variable
Set objSQL = New ClsSQL

'Set properties of the new object
With objSQL
.CompanyName = "Bigfoot Breweries"
.CategoryName = "Beverages"
End With

'Retrieve the properties
Debug.Print objSQL.CompanyName
Debug.Print objSQL.CategoryName

'Call a method of the object
objSQL.RunQuery

'Destroy the object
Set objSQL = Nothing

End Sub


在上面的语句中,我们首先定义了一个对象变量,接下来将这个对象变量初始化为
我们刚建立的类的一个实例。我们也可以用下面这一条语句来实现。
Dim objSQL As New ClsSQL

紧接着我们设置该对象的属性。CompanyName = "Bigfoot Breweries"和
CategoryName = "Beverages", 将这两个值在立即窗口中显示出来。这样做仅仅为
了验证而已。然后调用对象的RunQuery方法。
objSQL.RunQuery

最后释放该对象,触发对象的Terminate事件,弹出消息框,显示查询结果。
MsgBox strMsg, Title:="Beverage Results for " & CompanyName, buttons:=
vbExclamation

结论
现在你已对用类模块进行数据库编程的好处有了初步的认识。当然你也可以用标准
模块来实现同样的功能。但是用标准模块远不如用类模块简洁。用类模块,你可以
为每个查询初始化一个新的对象,而复杂的SQL代码则被封装在类中。用标准模块,
你必须将控制权交给模块。最后,类模块更易于移植。


寓教于乐 给代码审查者的几点建议 裁员4千、总裁员人数超过7.5万,难掩思科锋芒 物联网离普罗大众还有多远? 悼念斯诺登使用的加密电邮服务——Lavabit架构解析 运营商上阵OTT “一笑泯恩仇”后路在何方 [企业开源系列]后起之秀Facebook凭什么挑战互联网霸主Google? 谷歌推出免费标签管理应用Tag Manager McAfee CTO Phyllis Schneck被任命为NPPD副部长 Bootstrap 3.0发布 更好地支持移动端和响应式开发 国内创业公司QingCloud的魄力:做一个世界级的IaaS服务 从毫秒到微妙,纯硬的闪存阵列IBM Flash System来了! 中科创达邹鹏程:黑客精神逐渐被人遗忘 有点让人感伤 通过讲故事的方式来设计优秀网站 “肮脏的”IT工作排行榜 Clank:带有SCSS的高效率移动应用原型框架 欧朋 CTO 罗志宇:谈Sphinx游戏引擎的前世今生 John Carmack大神亲手操刀,Oculus Rift SDK即将发布 从南极之争谈软件架构十个技巧,及成功团队具备的气质 Imation重拳出击,推出新型混合存储平台 张建华:FusionSphere不是简单的OpenStack发行版 Chrome 29来了:地址栏变得更“兼容” Android版增WebRTC 工程师谈在Facebook工作最糟糕的事情 用Scala重构19楼——SDCC 2013讲师王治专访 10款最新且超实用的开发框架 创业公司为什么应该写博客? 向iOS SDK看齐:Facebook Android SDK迎来重大更新 闯向海外:对话AppFlood产品总监陈霄 高手爱跨界:联想智能桌面,27寸大Pad抢先试玩 惠普第三季度收入272亿美元同比下降8% 高管重新布局 原来我们会出这个价钱购买“廉价”iPhone Web设计过程中该做和不该做的 怎样在窗口没有显示出来之前将数个小位图“拼成”一个大位图并可以保存,急! win2000的怪问题 快救救我!!!!!!!!!!!!!!! 一个关于c++builder的ado的问题! PACK6是不是有问题? MFC程序的结构问题? 一个酷似chinaasp的社区,需要你的支持。嘿……实在做得很好,送分!!!随便给朋友做做广告 7:30之前一定要交。。。。急。。。。!!!! 文件改名用哪个函数啊? 为什么我的windows2000pro共享文件不能访问????? 在VB.Net中的TabControl有一个OwnerDraw的功能,但不知到如何才能将上面的Item画成有曲线的 一个程序员的路是怎样开始的?我该选择VB还是C语言? 那里有动态加载控件的文章??? 哪位高手告知学习C++/VC++的步骤和各阶段应看的书。 湖北的有查到分数的没有,怎么查,我天天晚上做恶梦,救救我! 能否请高手指教关于开在开机时屏蔽热键的问题(del+alt+ctrl)?高分送上! 请教语音卡高手:并线录音和串线录音有何不同?电压驱动和话音驱动有什么不同? 一个时钟周期是多长时间? 请问各位谁做过(正在做)用MODEM来录电话语音的?进来打个招呼,探讨探讨。 有人用过CIPAddressCtrl这个控件吗?怎么用?为什么MSDN上说它有一个GetAddress的方法,但我在使用中却找不到这个方法? 请问广东省的高程成绩在哪儿查询,怎样才可以查询到呀???? 运行时的这个异常提示,什么意思?如何解决 关于数据库的一个问题 tmd.江西的软考办的人吃虱去了。 各位大哥:如果在使用的时候,字体变大,是什么原因?有什么办法跟踪吗? 救命啊。。。。。。。高手该出手拉。。 可不可以在一个树控件中的一个节点下面再加另外一个结控件?怎么搞? a question about form evaluation about form evaluation 她现在就睡在我的身边,她长的很丑,大脑袋,小眼睛、身子特长腿特短,简直是一无是处,还让我守护着她睡觉,TMD我比死了还难受,好痛苦啊。。。。。。 在excel2000中,如何在单元格中画对角线(就是常见的表头)? 如何使win98登录WIN2K server中? 各位大哥,请问怎样汉化C++Builder中的英文提示框(祥见内容部分)?谢谢! 请问怎么在sqlserver的用户子定义中是用循环啊! 真奇怪,我只是想通过accept得到的sockaddr_in来得到的IP再用gethostbyaddr得到主机名,但是死循环,请我看看错在哪里?我给分的 quickrep建立的报表,一对多表如何设置,为什么我设置报表的dataset属性为从表时,预览出现主表数据无法显示出现unkown错误,而从表可以。 怎样让“星际”通过代理服务器上网? oracle优化 用ADO控件操作数据库,对于关键字重复错误如何捕获? 深圳的朋友,有没有人知道深大通信(深大电话)? 急!!!!!!!!怎样将excel导入数据库(access),重要的是要能在修改后返回excel?而且excel表中的几张表的表头格式不一样? 考考你的UNIX/C 请问server.htmlencode()有什么用处?? 喜欢听白桦林吗? 不好意思,问个问题! 请问如何在下拉框中添加图片?有重谢! 50元找一控件.(在Delphi中怎样把JPG文件插入到SQL Server数据库的Image字段中) 偶想做pb的登录界面,就是填入正确的密码账号方可使用软件,偶把主创体设为mdi frame,登录子窗体为response,但是运行后,不登录子窗体,主窗体也能使用(菜单有响应),怎么版?另外,子窗体右上方的 x 键怎么去掉?//牛虻 在一个页面里调用两个存储过程,并对其中一个存储过程的记录来控制分页显示,请问如何实现 请问在VIEW,APP类和FRAME类中都能接收相同菜单的消息,如newfile?谢了大侠们 linux菜鸟询问小问题,希望回答! 有电路的叠加定理知道,使用叠加定理时,不作用的电压电流源都置零其中电压源处用短路代替,电流源处用开路代替.好了,那么是否意味着电流源所在支路就被视为断开了? 这个虫子是蜱虫吗? 数字压力传感器一般多少钱? 电路叠加定理电压源为什么置零,电流源为什么开路我想知道原理,有例子说明就更好了 这是什么虫子? 求推荐一款数字压力传感器,质量和价格都能接受的? 叠加定理适用于线性电路,电压,电流和功率均可叠加.理由 请问下这是什么虫子,一厘米左右,六条腿,前面有对夹子. 数字压力传感器哪些牌子比较好? 蚊香有毒吗,睡觉的时候经常用蚊香好吗 1小时是什么数 计数 测量 数字压力传感器Maxair的怎么样? 如果蚊香有毒,那是什么毒,每晚睡觉时点蚊香会对身体有什么伤害? 发电机发出的是电压还是电流 只要电路两端有电压电路中就一定有电流,这句话错在哪里恩 电热蚊香片有毒吗 数字定时器的设计!要求用数字电路实现,定时最大为2小时,最小为1分钟. 关于电压下列说法正确的是 A电路两端有电压,电路中就一定有电流 B电路中无电流,电路两端就一定无电压C电路两端必须有电压,才可能有电流D电路中有无电流,与电压无关【说明理由】 什么是红外,红外的原理是什么? 电压控制的电压源和电流控制的电路原在都表达成电压么?如图 关于电流,电压和电阻,下列说法正确的是 A只要导体接入电路,电路中就有电流关于电流、电压和电阻,下列说法正确的是 【 】 A. 只要将导体连入电路,电路中就有电流 B. 酸碱盐的反应规律及条件 红外线的原理有多少说多少,越多越好 msp430 定时器 连续计数模式在连续计数模式下能改初值吗?tar,试验起来感觉能改但改的效果不对呢.书上的意思不是很明确. 神经条件的基本方式是反射,反射是指人体通过——对——产生有规律的反应 谁能告诉我红外测距原理及应用具体是怎样的? 数字定时器设计基本要求:60分可以定时显示现在定时的时间高级要求:40分可以倒记时 酸、碱、盐之间的反应有什么规律?是否全都能反应?条件? 为什么红外线有热效应?求原理! 清洁能源包括哪些 现在的蚊香有毒么 什么是大陆文明?什么是海洋文明? 清洁能源有哪些?氢能源算吗? 压力传感器型号的数字字母代表什么意思?就拿Dynisco来问,型号是PT460E-5M-6/18 其中的5M代表什么?还有其他数字?还要PT4624-M18-5M-6/18这其中的M18又什么意思? 黑格尔认为大陆文明和海洋文明存在着哪儿些不同 使用绿色能源有哪些好处 如何选择压力传感器?应注意哪些参数? 蚊香是不是有毒? 绿色能源有哪些 汽油机机油压力传感器0.3-0.6bar参数是什么含义 什么是马克思利率理论? 关于此电路图中串联并联各电压电流之间的关系 1.我不太明白4个电阻之间的串并联关系,如何看出此图哪个电阻是并哪个电阻是串的方法? 2.r1上的电流900mA 9V和r2,r3,r4上的电流300mA,3V是怎么计 请问压力传感器技术参数中 Pressure Cycles 指标是>100 Million,怎么算作一次? 为什么以马克思主义为理论基础 探究海洋文明与大河文明各有何特点 运用哲学原理论述"我".1200字左右 马克思主义根本的理论特征表现在哪些方面 海洋文明与大河文明的区别 马克思哲学原理概念是什么 如题,马克思主义普遍原理是什么 探究海洋文明与大河文明的特点 没有革命的理论,就没有革命的运动,这句话直接体现的哲学原理是什么 试题1 (6分)【108020】 温家宝总理曾在《人民日报》上发表了题为《仰望星空》的诗文,这里的“仰望星空”其本来含义是指( ).A. 胸怀远大理想B. 前瞻性的思考未来C. 注重理论研究与创 与海洋文明相比,大河文明的突出特点是拜托各位大神与海洋文明相比,大河文明的突出特点是 A,形成了发达的农耕文明 B,工商业极为发达 C,发展更快,长期领先 D,创造了辉煌灿烂的文化 从理论基础的角度看,中国梦体现了马克思主义哲学的哪些原理在考试 电路如图所示,电流源的端电压U为多少? 海洋文明与大河文明 什么是哲学原理 海洋文明的性格特征是什么?高一第一学期历史内容:海洋文明 蜇人的小虫子家里从去年开始天花板上出现一些类似小蚂蚁的虫子,虫子屁股上有毒刺,一碰到人就蜇,然后起个红包,非常难受,现在每天用打杀虫剂,就从天花板上掉下好多,现在不知道用啥办法
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn