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

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


可以直接用API改变textbox的扩展样式-VB资料 快速读取TextBox第N行的数据 -VB资料 VB利用 API 可以直接拨号 VB利用API 使Text框只读 VB利用API创建文件目录 VB利用API函数实现VB特殊窗体的两种方法 VB利用API函数实现无TittleBar窗体的移动 VB利用API在VB5.0中实现清除文档名 VB利用App.PrevInstance防止同一程序执行多次 VB判断应用程序是否仍在运行并设置焦点 巧用VISUAL BASIC的RND()函数 让你的程序不在任务栏中显示 -VB资料 VB如何不用API使文本框属性只读? VB如何从文件中提取图标 VB如何关闭/重新启动计算机? VB如何建立快捷方式? VB如何让窗口始终在最前面? VB如何使你的程序同文件扩展名建立关联? VB如何提高调用WINDOWS API函数编程技巧 VB如何为你的应用程序设置热键? VB如何隐藏鼠标指针 VB如何用api检查任务栏中有多少种输入法 VB如何在函数中传递数量不定的参数? VB使用 kb_event 函数模拟键盘操作 VB使用API获取颜色 VB使用标签控件调出浏览器 VB使用调用外部程序函数实现API函数高级功能 未公开API函数揭秘——通用对话框-VB资料 显示文件属性对话框-VB资料 VB用 API 打开打印对话框 VB用API函数改进ListView控件的显示效果 指点!在PB中怎样用程序作成一张动态的交叉表 编辑控件怎样才能显示那些怪字符? 有没有人喜欢郑智化 大家推荐好听的几首歌吧! 请教:怎么学c++? 高手点拨! 各位网络高手.如何在程序里讲ip地址转化为域名 有什么方法,可使表单内的组件背景变成透明的而文字不透明,请看例子: 编辑控件怎样才能显示那些怪字符???? swall(壹心) 你还在深圳特区吗? 如何设置Session的密码?请高手指点迷经^^^^^ 哪位可以解释一下下面的代码? perl 的人气太差。罢了罢了。找本perl自己搞定 MsSQL7.0 当日志文件大小未限制而变得很大时,怎样清日志文件,使其减小? 请教诸位牛兄牛姐牛夫人---有难度哦(着急出活!) 基本问题:如何将一个.txt中的内容读入到内存再从内存中读出并存为另一个文件?谢了先!!!! 高手帮帮忙!!!!!!!!!!!!!! 又有台风了。。。。 在zip包中加入ASP推荐的PAD File有用吗????? PB连接SQL数数库,为什么显示的表会不全 如何把一个文件file.dat里的数据写入软盘0磁道0磁头1扇区. 我要骂人! chris2001(牛虻),不是东西 华为工程师 谁知道 vb 的序列号?????? VS.NET 有开了个新铺子。为什么我的ejb/j2ee还没有开张。气愤。 老大们:我是菜鸟,有问题要问,不过不要笑我。一定给分的 再次发问:关于在SQL SERVER中的某张表上建立触发器...... 没有有这样的病毒,或者文件 各位老大,如果有asp、sql基础学jsp和php是不是比较容易一些呀?言者有分哦! dll中怎样调用主程序中的函数? 新手请教接口聚合!!!!!!!!! 高分求教!有没有谁编写过WEB服务器程序? 微软OfficeXp女孩 请教一个报表问题? 小技巧!!! delphi中调用MessageBox出错,高手指点一下。 大家好,这是我提的第一个问题!我学DELPHI才两周!对您的指点,小弟万分感激! 请问sybase12。0中,游标能不能用动态sql申请 紧急求助:如何调用父对话框的函数 各位好,我在VB下做了一个ACTIVE 控件,但是加不到CBUILDER 上,但能加到VB里,为什么? 婚介所 关于C++打开文件的问题? 请教一下关于多表查询的问题 求助:中文Delhpi帮助 为什么我的rose装好后没有html帮助?还有安装时应该选择client还是administrator? cathy0505;chenkane;zhangshicun;swall;(_2_);riluo;wt13;MonkeyLin;seedundersnow;qancy_chen;cathy0505;acute 一个很简单的问题,怎样把一个php字符串变量转为实型变量 用过2K/NT DDK的大侠:如何在2000的内核里编程向硬盘里写文件,如:写c:\a.txt到C上,给我一段代码? 我急需一个“医院生殖中心病历管理软件”,sbf2000@363.net 怎样在vb中用insert ,updata语句进行数据库操作?????????? ra和rm 及ram格式有何区别呢 管道压力表、真空压力表一般与何种阀门连接?现在有两种阀门Z43F-16C Q41F-16C 压力表一般和哪种阀门连接啊. 0.1mol的铜与足量的浓硫酸反应生成SO2的体积约为22.4 L 氢气为什么在测定1mol气体体积被选为被测气体 φ76的管道,压力0.5Mpa每分钟流多少方水 常温常压下 1mol二氧化硫的体积小于22.4l这句话正确,为什么 用化学反应气体体积测定仪测定1mol氢气的体积,实验数据记录如下:镁带质量为0.120g,注入10ml稀硫酸,液体量瓶的读数为130.0ml.则(1)该温度下,1mol氢气的体积测定值为___ 管道φ219,压力0.4-0.5MPa流量150m3/h需提高压力1.0mpa用多大管道增压泵 在20度温度下,压强为101kpa时1mol的氧气和1mol的二氧化碳为什么所含的分子数相等?不是2和3吗? 用化学反应气体体积测定仪测定1mol H2体积时,向气体发生器加料口注射稀硫酸后,拔出注射器时针头脱落而仍然扎在橡皮塞上,使结果偏大还是偏小?为什么? 给水管道试验压力是如何确定说明其合格标准 1mol氢气和0.5mol氧气在相同状况下混合,求混合气体中氢气的体积分数,物质的量分数和质量分数 测定1mol气体的体积误差分析请给我这个实验所有可能的误差分析,怎样怎样做使结果偏小、怎样怎样做使结果偏大,用这种形式给我写出来.认真回答, 请问进气管道压力5MPa 管子直径10毫米,忽略阻力,求1小时流量是多少?出口0.1MPa,空气,管道长度1米 同温同压下,分别为1mol的氢气和氧气,它们的〔 〕(A)质量相同,体积不同 (B)分子个数相同,质量不同 (C)体积相同,分子数不同 (D)体积相同,分子数也相同 为什么不是D? 求温度为27摄氏度时,一摩尔氧气具有多少内能?R=8.31J.MOL-1.K-1,注-1是次方 溢流阀的选择 我做实验用的,液体压力要维持在3mpa,4mpa,6mpa等,溢流阀选哪种合适呢,可调可控就是我设定一个值,到达那个值后就溢流,不到继续上压 差压变送器测流量用的温压补偿公式设计温度和设计压力是怎么来的?有没有通用数值的?我们厂的煤气管道就是露天的,夏天最高有45度,冬天最低-5度吧.另外是不是说不同的管道这2个参数不同 下列物质中所含微粒物质的量最多的是A 3.01×10∧23个镁原子 B 1mol氮气 C 4克氢气 D 36克氧气 在精馏操作中,塔釜压力为什么是一个重要的参数?塔釜压力与什么因素有关? 孔板流量计为什么要加压力补偿和温度补偿 标准状态下,1mol的水体积是多少?存在22.4升的水蒸气吗?化学里面的确是说标准状况下没水蒸气没错,但是物理题目里动不动就来个“标准状况下1mol的水蒸气体积是22.4升,请问此时水分子间的 很多地方提到高压反应釜,到底承受多少压力才算是高压反应釜.有高压就有中压和低压吧,如何区分? 孔板流量计上的NM3是什么单位 1mol水的体积和1mol冰的体积哪个大 酯化反应釜操作压力问题我设计的反应釜酸酐进料压力0.1Mpa,醇进料压力i0.1Mpa,出料0.9Mpa.1.搅拌釜内操作压力是0.2Mpa还是0.9Mpa呢?2.夹套内用水蒸气加热,工作压力是该温度下水蒸气的饱和蒸汽压 谁讲一下跟孔板流量计相关的知识, 1. 1mol的二氧化碳和1mol的水在相同状态下体积一定相等吗? 1mol的二氧化碳和1mol的水在相同状态下体积一定相等吗?不同的气体,若体积不等,则它们所含的分子数一定不等吗? 搪瓷反应釜、搪玻璃反应釜的性能 请问孔板流量计的测量原理? 1mol的氧气、1mol的水和1mol的铁哪个体积大 压力反应釜正负压怎么做 孔板流量计安装条件孔板流量计(流量计油表)安装管道在安装的时候有没有什么条件 0.1mol氢气和0.1mol水所含的分子数相同,在标准状况占体积都约是2.24L ;0.1mol任何气体标况下V都是2.24L这两句话 哪句错了啊? 请说下理由 谢谢! 什么样的压力容器需要型式试验,搪玻璃反应釜需要吗?新容规上说蓄能器等需要做型式试验,这个等包括反应釜吗? 在标准状况下1mol任何气体的体积都是22.4L那么在标准状况下11.2L氢气中的分子数是多少个 葡萄糖发生加成反应? 带夹套的不锈钢反应釜是不是需要检测的压力容器?蒸汽加热,需要温度105 容器内为常压,所需蒸汽压力2公斤请提供解释或依据夹套内为水蒸气,容器内为水和肉(猪肉、牛肉或羊肉),它是低压 在标准状况下,1mol任何气体的体积都是22.4L.那么,在标准状况下,11.2L氢气中的分子数是几个 酯和氢气能否发生加成反应,条件是什么 搪瓷反应釜是几类压力容器 在标准状况下1moL水的体积是22. 葡萄糖与氢气反应的化学方程式 半管加热的反应釜是否属于压力容器? 标准状况下1mol的混合气体的体积怎么是22.4L.分子间有较大的间隔.像酒精和水一样混合了不是会体积减少么 1mol苯可以与多少摩尔氢气发生加成反应?还有,氧化铝和氧化铁是不是两性化合物? 甲醇对20号压力容器用钢材有没有腐蚀性? 是不是当1mol气体的体积为22.4L时,它就一定处在标况下麽?1mol水蒸气在标况下的体积是22. 1mol萘最多与几mol氢气发生加成反应 求一反应釜各管道连接图 标准状况下,1mol任何气体所占的体积为22.4L 在标况下,1mol任何体积所占的体积约为22.4L多了一个约,为什么不同的题目上都对 1mol有机物能与1mol氢气发生加成反应,产物是,此有机物的结构简式可能有? 压力表连在管道上,为什么压力表与管道连接处之间管道是弯成一个圆的样子 标况下,1mol三氧化硫的体积为22.4L 1mol苯乙烯与氢气完全发生加成反应需要几mol氢气啊苯环只有5个H啊,为什么还需要3mol, 管道压力表怎样装 1MOL SO2在20度 体积大于22.4L为什么是错的? 1mol维生素A分子最多可跟几mol氢气发生加成反应 请问有没有关于化工设备(比如精馏塔,反应釜,管道等)的国家标准可查? 这种说法对吗?1mol三氧化硫和1mol二氧化硫体积均为22.4L如题 下列测定常温下1mol氢气体积的操作中,使测定结果偏大的是()?A.装置接口处有气体漏出B.称好镁带后用砂皮擦去表面的氧化膜C.硫酸注入量不足10mL,使镁带有剩余D.计算液体体积时,液体量瓶
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn