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

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代码则被封装在类中。用标准模块,
你必须将控制权交给模块。最后,类模块更易于移植。


下一个被黑客攻击的对象—无线路由器 Windows Blue开始按钮或将回归,你怎么看? Evernote推孵化器 不占股权 基于C++和Lua的移动游戏引擎Leadwerks 3发布 苹果秘密测试iOS 7与iPhone 6 或将6月发布 酷6 CTO 陆坚:请先信任你的程序员 从电信联手i-Free,看运营商渠道的加速整合 “Animory”开发者分享HTML5游戏开发经验 Appflood SDK:连接中国与海外App流量交互平台 Apache Subversion 1.7.9正式发布! 微软IE浏览器5大动向 加速吸引开发者 开源的简繁转换库OpenCC支持Node.js 继Opera之后,Adobe表示将支持Google Blink 提高大型软件项目质量的一些实用型技术分享 谷歌推出Mirror API,开发者可为Google Glass开发应用 无需999,也不要499,99美元Linux超级计算机带回家 微软反击AWS:推出EC2并大幅降价,“价格战”正酣 Operation InVersion:拯救了LinkedIn的大修项目 五步走战略——Avocado在最初几周内迅速扩大30倍 NoSQL产品测评:Cassandra、MongoDB、Couchbase和Aerospike 谷歌眼镜开箱评测:比想象更精致 Pinterest谈实战经验:如何在两年内实现零到数百亿的月访问 初创公司Instart Logic:专为电子出版商和网站站长解决“痛点” 未来即卖芯片又卖服务!Intel收购软件厂商Mashery 继MSN之后,微软又开始整合Skype与Lync服务 阿里将推AMOS智能机 斥资10亿鼓励开发App AMPLab开发重构的Hadoop版本Tachyon:吞吐量要比HDFS高300多倍 一名理科生的创业路 十大界面原型与布局工具 Google产品经理Kenneth Norton:如何与工程师共事 如何创建自适应系统来增强用户体验 如何实现在linux下面对声音的控制! 如何获取当前操作系统是什么?(98、2000、NT或是其它) 有没有喜欢用ShortString与Byte类型的人?好像很少?~呵呵~大家评论一下有什么不好的吗? 请各位帮忙!! 一个applet的问题!70分,在线等待 当字段的值为null时,怎样获取? 向各路高手求助,哪里有novell网操作方面的书籍或者资料 ********很久没来这了,我今天升级两颗星啦,心情高兴,大散分啦!******** 哪里有比较好的网上书店?(计算机类) 请看这句有什么问题 dll的路径常识,大家帮我回答一下 在Web Forms里用Windows Forms控件 大家想一想! 在校程序员的困惑 要把服務器放在家里.現有條件:ADSL,LINUX 7.3,國際域名一個.可以嗎?還要什麼設置?thx 怎样消除11001#socket错误? 如何得到文件的长度,很简单的问题 脚本错误? 物化视图的数据整理问题 如何实现把一个BMP等比例缩放. 强烈建议版主封掉 theHanOfCC(我流) 的ID,他是一个人渣!! 同意的请进来签名!!! 在校程序员的困惑 有关PB数据窗口的检索参数 哪里有比较多的计算机书籍下载,请推荐几个。 急~~~高分求救~! 谢谢duduwolf,请来领分 类似这样的字符串“Thu Sep 5 14:05:56 2002”,怎么转化为Date对象? 安装问题,很简单,小弟菜鸟,望各位兄长多多关照啦!谢了! MDI窗口出错 新手请教。如何在cgi程序中得到由url传递过来的值 ISA 2K发布多个WEB 服务器问题,(我都要疯了) 我的xp怎么不能装vc6.0?再线等待!(20分) 急~~~高分求救~! 请教各位师兄。这个可以实现吗? 向高手请教(如何把客户端的图片传到服务器?) 各位大虾.水晶报表的关键一步了.实现了我就可以水晶报表的打印了! 急急!!!!怎样才能取得java函数传过来的参数呢? %%%%非高手勿進%%% CSDN有些人素质太差! IShellFolder::GetDisplayNameOf 如何获得全名? 代理Type分别为transparent,anonymous,high anonymity,优劣? 为感谢computersim在大力相助,特奉送100分,快来拿啊 请教网上书店系统的设计思想和例子。 VC中使用FLASH的OCX控件如何取得Movie的原始大小,且如何按指定比例缩放?问题解决后必给分。 有关“隐藏”,“覆盖”的一些问题: 如何把A库中A表原样复制到B库中去? 怎样取得鼠标点击DataGrid控件时是哪一行,哪一列呢?(C#) ISA 2K发布多个WEB 服务器问题,(我都要疯了)高分求救 这个问题怎么办?? (ADO OPEN) Up 有分! 母亲生日,你觉得送什么礼物为好? 用c++ 写的 hello 程序在unix g++ 编译通过后,运行出错 人体内的微量铁元素呈几价 英语翻译别用软件啊亲,翻得好多给100分,谢啦说到做到如下:为了提振低迷的美国经济,9·11事件之后美联储实行了低利率政策,实际上是一种极度宽松的货币政策,从2001年9月开始,美联储连续降 缩写下文(去掉定语从句、宾语从句、插入语) Self reflection means stopping the mad rush of activityand calming yourself and your mind so your brain can evaluate(评价) the input it has already received.Some people prefer to do th 怎样背化学元素表 英语翻译:国际金融与商业中心 怎么写reflection 体内铁元素过低怎么办 国际金融组织方面的英文翻译The 2007 Surveillance Decision is grounded in Article IV and anchors surveillance in the concept of “external stability”—a country-level proxy for “orderly exchange arrangements and a stable system of ex 请高手帮忙写几句类似rush to the dead summer的英文,谢谢.要求:每句话包括一个季节,句式最好和例句一样,谢谢大家了. A+O2=B+O2=C+H2O=D+铜生成B.A为非金属单质,在常温下是固体!推出ABCD是什么物质 解决中小企业融资难意义在于? 会车灯是什么灯? a-e都为硫的化合物.1,a+NAOH-----B+H2O 2,B+O2----D 3,C+NAOH--D+H2O 4 ,E+NAOH不足量---C+H2O 昨天老师给那个男孩颁奖 英语翻译 必须有award 汽车车灯灯泡问题想换对灯泡,谁知道飞利浦的银战士好还是欧司朗的夜行者好啊?我不想换氙气灯! 怎样巧记化学方程式和化学元素? 2个氮原子2个氢气分子亚铁离子氢氧根离子+2价的钙元素五氧化二磷写上以上的化学符号 这个车灯符号是指什么灯?如题. 化学元素急记或者把元素写成唐诗宋词之类的?谁可以提供?THANKS! 氢氧根离子.2个氢分子.亚铁离子.+2价的钙元素用化学符号表示. 现在还有哪些汽车车灯是跳灯的?哪些车带前跳灯的汽车,最好是实用的汽车. 90吨电弧炉是否用90吨废钢来炼钢? 根据自己的理解描述一下计算机操作系统的作用及其重要性. 除铁除锰对地下水处理超标的问题?大神们帮帮忙 食品添加剂使用时应符合什么基本要求? 我想自己录唱歌想找一个简单操作的,但处理声音也较好,有很多功能的软件,谁有? 车灯的灯泡一般在多少瓦之间? :[Cu(H2O)4]2+是什么意思 生命有多长 怎么调节水的PH值?用什么?我主要用于除铁除锰的水处理中 配价和物中的[Cu(H2O)4]2+的铜离子形成原子轨道形成的类型是怎样的?为什么?我们老师不知道555 配价和物中的[Cu(H2O)4]2+的铜离子 [Ag(NH3)4]2+的银离子 形成空轨道是怎样的?为什么?我们老师不知道 各种鱼类的英文名今天要和老外去日本餐厅.谁能告诉我各种常见鱼类的英文名谢谢 第三节 元素周期表的应用【填表格】 [Cu(H2O)4]2+ 中铜离子和水分子之间的相互作用力是什么 生命有多长啊 There __an NBA basketball game in ten minutes.为什么选will be不选is going to have? Cu(H2O)4 ^2+什么颜色? 个人认为现在的中学英语教学有一点问题.我们知道了一大堆“高级词汇”,却对生活中常见事物不知其英文名.请提供尽可能多的鱼类动物的英文名. 第三节 元素周期表的应用【只填第一个表格】第一竖行第一个:F 第一竖行2个:CL 第一竖行3个:Br 第一竖行4个: I 从生物学角度,人体内铁元素过量会导致乳酸中毒,为什么?还有,硼元素与花粉管的萌发有关是怎么回事?受精与受粉的区别是什么,最好从花的受精和受粉来答.人体内钠元素过少会怎么样? 有个铸造厂要碳素废钢,碳,硅,锰,硫,磷的含量都有标准,我应该咋给厂子送废钢啊? 生命到底有多长其实生命只在呼吸间 人体内的元素缺少、过多人体内各基本元素缺少和过多时人会有什么症状或疾病 废钢 中废 重废 轻废各是什么意思?废钢 高手帮起个英文名~(和“鱼”谐音的)英文高手帮忙给起个英文名吧,要求要和瑜字谐音~~~~~ 世界上哪个国家发现的恐龙化石数量最多? 肾水不足是怎么形成的 黄狐狸鱼英文名 adobe photoshop中文意思 you can start your j___ when you want to,and. 有木有和鱼或者三月有关的英文名字~ 汉字PS/2什么意思 Even now I still love you crazy 帮我翻译 喝水为什么会打噶 人铁元素过多怎么办 Matlab命令 cat解释下面的Matlab命令com=cat(2,md ',shot);eval(com); 等质量的二氧化碳和一氧化碳,则两者所含氧元素的质量比是________. 老是记不住化学元素表,怎么办怎么办 安装建筑物避雷器的意义及作用? Self reflection means stopping the mad rush of activity and calming yourself and your mind 汉语意思Self reflection means stopping the mad rush of activity and calming yourself and your mind so your brain can evaluate the input it has already rece
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘