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

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


VB用RND()函数加密 VB用SendKeys来捉屏 用VB4.0制作软件封面 用VB5 对Windows 95 任务栏提示区进行编程 用VB5读写注册表实例 用VB5开发商品软件的经验谈 用VB5设计多功能计时器 用VB5制作文字上卷效果 用VB6.0实现打字效果 用VB编写DirectX7.0游戏(上) 用VB创建Excel报表 用VB读取和控制Windows的中文输入法 用VB将命令行软件Windows化 用VB进行移位操作 用VB开发CAI软件的小经验 用VB开发分布式应用 用VB切换三个特殊键 用VB生成EXE文件后,如何在后面加上参数?这个参数怎样传给VB 用VB实现动态显示操作进度程序 用VB实现双向循环链表 用VB实现用户登录密码的修改 用VB与MS-Draw开发通用作图软件 用VB制作TopMost类型窗口 用VB制作Windows风格安装盘 用Visual Basic 6创建基于MTS的商务组件 用Visual Basic实现Windows的重启动 VB用Windows管理技术做你的应用程序 VB用程序给标识字段(ID)赋值的一种简单实现方法 VB用自己的'PROGRAM'测试自己的电脑 有 BitMap 之Menu -VB资料 运行其他程序,并等待执行完毕 -VB资料 我每次都结贴子的,不信你们查一下啊,这次再请帮忙,谢谢哦 在公共文件夹如公告窗体的原件与回复件是如何关联的? delphi中form中放了一副图,怎样让图可见而form不可见? 一个关于vba的应用问题?合并文档 英文版的vb中该如何来把一个项目进行打包呢(想把它安装到一台没有装vb 的电脑上) 删除多余的重复记录 如何获取屏幕尺寸? 有人用过EasyPack的仿真器吗? 关于QuickRpt报表存盘后出现乱码的问题。 邮件监测器要怎么写?? 关于Web Browser控件 如何加快蓝点linux的安装速度 access 表中的datetime型字段在delphi中如何使用? 《windows 网络编程技术》是哪个出版社的 小弟正学socket编程,有个问题请教! 微软专家请看: Sybase数据库中的中文存储问题! 连接池在TOMCAT中不可用吗?我是新人。 简单的问题? SOS!!!!!!!!高分赠送!!请教大虾们一个有关MSSQL一个问题!! 我在VB.NET下调用弹出对话框,可是无论click确定还是取消,结果都一样,我写的有什么错误吗? 紧急寻找?????????高分求助 关于dbgril的问题。简单的问题加分哦 为什么不能编译这个头文件? 寻bmp转gif代码 vb.net做的control能在基于c#的web form中使用吗? 白痴问题:使用java有什么好处? 在线:在程序中加载任一网页,用鼠标点击任一超连接,均能捕获所点击连接的文本。该如何做? 至今,我不明白为什么使用友元(friend)函数!(50分赠送) Access如何外连接多个表 给我一个直接访问DBF文件的控件,在线等待。。。 求一sql语句! 哪位有ORACLE的帮助文件,送50分! 怎样在ListView中实现换行功能 在PB使用Word 模板(.dot)将DW_1(FreeForm风格)转换成Word文件并追加DW_2(Grid)数据 怎样可以在鼠标事件发生时获得鼠标相对应屏幕的坐标? 我想写一个组件在页面下载后将IE的始终用UF8发送项去掉且重启IE? 在视图中动态生成一个非模态对话框后怎么来得到指向该对话框的指针呢?大家来讨论好吗? 怎么实现在多台客户机上接收一台主机的屏幕? 急!!!vc进程与vb进程间通讯的好办法 软件工程硕士!!!!!!!!!!!!! 如何批执行存储过程??? 求助!!! 快找工作了,兴奋加苦恼.来寻求一点安慰. 关于动态链库问题,虽然前讨论过。但都没有得出结果。再次请高手进。 请问与数据库的连接这段程序那里错了??? sql嵌入式编程 在VB中如何修改command按钮上的字体颜色(不要用Label代替) ODBC的小问题 经过中国水利局批准,中国灌水家协会中央委员会重新选举委员,现在处于候选人提名阶段。 javascript如何继承? 可以用数学证明 入射角等于反射角吗?如果能,感激不尽. 我的烦恼 作文200字 概率题:求5双不同的鞋中取出4只,4只中至少两只配成一双的概率?详细步骤 商店以每双6,5元购进批凉鞋,售价每双7,4元,卖到还剩5双时,除成本外还剩44元,这批凉鞋共几双 春游 观察江南植物园作文关于江南植物园作文 300字以上(宜昌对面) 描写不怕困难的格言 以每双6.5元购进一批凉鞋,售价7.4元,卖到还剩5双时,除成本价还获胜利44元,有几双凉鞋 去章丘植物园春游,老师让以感受大自然之美写一篇作文,最少400字 写一句有关不怕困难的名言 如果你希望自己的朋友从原来的胆小懦弱变得勇敢坚强起来,你可以用这样一句名言来规劝他____________ 东湖植物园春游作文600子 描写不怕困难的名言 一个圆形环岛的直径是50m,中间是一个直径为10m的圆形草坪.小明以60米/分的速度绕行环岛一周大约需要多长时间?一年需要修剪草的总面积是多少? 关于光的反射定律,下列说法中正确的是() A反射角一定等于入射角B入射光线与反射面所成的角叫入射角C反射光线和入射光线分居在反射面的两侧D入射光线跟反射面的夹角与入射角相等 怎么写名言? 圆形环岛的直径是20米,中间有一个半径是5米的花坛,其余地方是草坪.如果花坛的四周每隔2米栽一棵树,种一个圆形环岛的直径是20米,中间有一个半径是5米的花坛,其余地方是草坪。如果花 光的反射定律:反射角等于入射角.为了验证此结论的正确性应进行的操作是___________________. 哪里有关与描写美丽景色的作文,要1000字以上的.描写优美的,上人回味无穷的. 一个圆形环岛的直径是20米,中间有一个半径是5米的花坛,其余部分是草坪.如果花坛的四周每隔2米栽一棵 光的反射定律实验中,测量准确后,出现反射角不等于入射角,为什么? 求一句表达女子坚强勇敢的诗句需要七字或者是五字的古诗词句.文字要优美,谢绝过于通俗或者肤浅的诗句.个人原创尤其好,引用古典亦相可.麻烦大家帮我这个忙. 某小区有一个长25米,宽20米的长方形游泳池,请你选择合适的比例尺,游泳池的长和宽分别画多少厘米?最好有计算过程 在光的反射定律中,为什么不能说入射角等于反射角 描写不怕困难的好的句子 以孤独为话题的 作文怎么写 反射角等于入射角,入射角等于反射角吗 愉快的寒假作文500字以上 急…… 以寂寞为话题的作文, 从5双不同的鞋中任取4只,求这4只鞋子中至少有两只鞋子配成一双的概率答案是13/24 还是13/21 愉快的寒假作文 500字 600字的野炊作文 600字 从5双相同的鞋子中任取4只,试求至少有2只能配成一双的概率?是5双相同的鞋子!答案是20/21.. 快乐假期作文的开头 作文:对自己的期望300字左右今天开学老板让我们写“对自己的期望”300字左右今天六点之前写好! 关于春游 野炊的作文我们煮的是火锅哦!字数现在400字左右!马上就要! 爱使我们战胜困难和挫折,以亲身经历写一片作文.500字就可以急,谢谢! 某商店以每双6.5元购进一批凉鞋,售价为7.4元,买到还剩5双时,除成本外还获得44元毛利.这批凉鞋共有多少双?(列方程解答) 作文《思念是一种美丽的孤独》 从5双不同的鞋子中任取4只,这4只鞋子中“至少有两只配成一双”(事件A)的概率是多少? 商店以每双6.5元购进一批凉鞋,售价每双7.4元买到还剩5双时,除成本外还赚44元,这批凉鞋共多少双?解方程应用题 信息世界的烦恼 作文(400字以下、350字以上)急、5月11日六点关闭问题(跪求) 说明不怕困难,努力向上的名言警句急 一个圆形环岛的直径是20米,中间有一个半径是5米的花坛,其余地方是草坪. 有关寂寞的文章是议论文 顽强奋斗名言 教室里有若干名学生,走了10个女生后,男生人数是女生人数的2倍;又走了9个男生后,女生是男生人数的2倍.那么最初有多少名女生? 小作文,有关寂寞的层次分析法模仿写作——运用具体细腻的语言表现某一种情绪或心情或体验或感悟.(300字左右) 寒假里的一件事(作文)小学500字 其中一定要让你有感悟、启发 教室中有若干名学生,走了10女生后,男生人数是女生人数2倍,又走了9个男生后,女生是男生的5倍,最初有女 春游的作文600字复制的不要来!复制的别来! 关于不怕困难的名言 教室内有若干个学生,走了10名女生后,男生人数是女生人数的2倍,又走了6名男生后,女生人数是男生的2倍,教室最初有多少名女生? 战胜困难的300字作文 关于不怕困难的名人名言快(要5句) 商店以每双13元的价格购进了一批凉鞋,售价为每双14.8元,卖到还剩5双时,出去购进这皮凉鞋的费用还获利88元.问这批凉鞋共多少双? 战胜困难的作文300 关于不怕困难的名言警句 商店以每双13元购进一批凉鞋,售价为14.8元,卖到还剩5双时,除去购进这批凉鞋的全部开销外还获利88元.问 我的烦恼作文200字 不怕困难的名言警句
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘