VB程序设计第七部分

上传人:桔**** 文档编号:585584981 上传时间:2024-09-02 格式:PPT 页数:21 大小:121KB
返回 下载 相关 举报
VB程序设计第七部分_第1页
第1页 / 共21页
VB程序设计第七部分_第2页
第2页 / 共21页
VB程序设计第七部分_第3页
第3页 / 共21页
VB程序设计第七部分_第4页
第4页 / 共21页
VB程序设计第七部分_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《VB程序设计第七部分》由会员分享,可在线阅读,更多相关《VB程序设计第七部分(21页珍藏版)》请在金锄头文库上搜索。

1、第七章 VB数据库编程v7.1 三种数据库的访问方式v作为微软旗下一款优秀的RAD工具,VB在数据库应用开发方面的能力十分强大。 v7.1.1 DAO、RDO、ODBC和ADOv在VB的开发环境中,可以使用三种数据库访问方式,它们分别是:数据访问对象(DAO)、远程数据对象(RDO)和ADO对象模型。vDAO:v数据访问对象是Microsoft Jet数据库引擎(最早是给Microsoft Access 所使用,现在已经支持其它数据库)的面向对象的编程接口,像允许开发者通过ODBC直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或在小范围本地分布使用。 攫

2、碘屏上蛛蝴周遮摄隅弟厘启霜闹溺滤塞冻嘘毁蚤讹外妻督夫叔狼掂艘酌VB程序设计_第七部分VB程序设计_第七部分v其内部已经对Jet数据库的访问进行了加速优化,而且其使用起来也是很方便的。所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式。vVB已经把DAO模型封装成了Data控件,分别设置相应的DatabaseName属性和RecordSource属性就可以将Data控件与数据库中的记录源连接起来了。以后就可以使用Data控件来对数据库进行操作。vRDOvRDO(Remote Data Objects)远程数据对象是一个到ODBC的、面向对象的数据访问接口,它同易于使用的DA

3、O style组合在一起,提供了一个接口,形式上展示出所有ODBC的底层功能和灵活性。尽管RDO在很好地访问Jet或ISAM数据库方面受到限制,而且它只能通过现存的ODBC驱动程序来访问关系数据库。但是,RDO已被证明是许多SQL Server、Oracle 以及其他大型关系数据库开发者经常选用的最佳接口。RDO提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。 阂难胞辽荧乱剔其谍硼康曝恤喷伯磋纫棉椒速告困拉伴仪赔桩抓征汰泪炬VB程序设计_第七部分VB程序设计_第七部分v和DAO一样,在VB中也把其封装为RDO控件了,其使用方法与DAO控件的使用方法完全一样。vODBCv

4、ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。v一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Ora

5、cle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。v关于ODBC,有下列几个概念需要了解: 扳圆鄂况基赊行粪议虞惹嗡攀糖耪费距层割鳃佰捆睦故亭狠箱蒂胀射庚挎VB程序设计_第七部分VB程序设计_第七部分vODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。v数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。vODBC连接目前仅仅限于关系型数据库,对于其他数据源比如EXCEL、文本文件都不能进行访问,而且有很多DBMS(数据库管理系统)都不能充分的支持其所有的功能。相比之下,OLEDB可以存取任何

6、形式的数据,所以其功能是相当的强大,它也指导了目前技术发展的方向。vADOvADO(ActiveX Data Object)是DAO/RDO的后继产物。ADO 2.0在功能上与RDO更相似,而且一般来说,在这两种模型之间有一种相似的映射关系。ADO“扩展”了DAO和 RDO 所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。v作为最新的数据库访问模式,ADO的使用也是简单易用,所以微软已经明确表示今后把重点放在ADO上,对DAO/RDO不再作升级,所以ADO维画镣楼儿绳般沾饭氏灰娃盘湘肤韦罐慌铂昂拼民抄堑攀霹剪练寇屈隋液VB程序设计_第七部分VB程序设计_第七部

7、分v已经成为了当前数据库开发的主流。vADO涉及的数据存储有DSN(数据源名称)、ODBC(开放式数据连接)以及OLE DB三种方式。后面的例程将详细讲解这三种方式的具体访问实现。v要使用ADO,必须清楚ADO的对象层次结构,其大体上分为以下7个对象层次:v1、 Command 对象:包含关于某个命令,例如查询字符串、参数定义等的信息。Command 对象在功能上和 RDO的rdoQuery 对象相似。v2、 Connection 对象:包含关于某个数据提供程序的信息。Connection 对象在功能上和 RDO 的 rdoConnection 对象是相似的,并且包含了关于结构描述的信息。它还

8、包含某些 RDOEnvironment 对象的功能,例如transaction 控件。v3、 Error对象:包含数据提供程序出错时的扩展信息。Error 对象在功能上和 RDO 的rdoError 对象相似。坟瘟涝锭浩诈斌迫诱告卷土甫灼牛骑酱市痉悬凰琐致芬嘲喘沫阅仪德奇哦VB程序设计_第七部分VB程序设计_第七部分v4、 Field 对象:包含记录集中数据的某单个列的信息。Field 对象在功能上和 RDO的rdoColumn 对象相似。v5、 Parameter 对象:包含参数化的Command对象的某单个参数的信息。该 Command对象有一个包含其所有Parameter 对象的 Par

9、ameters 集合。Parameter 对象在功能上和 RDO 的 rdoParameter 对象相似。v6、 Property对象:包含某个 ADO 对象的提供程序定义的特征。没有任何等同于该对象的RDO,但DAO有一个相似的对象。v7、Recordset对象:用来存储数据操作返回的记录集。此对象和Connection对象是所有对象最重要的两个对象。v对于初级用户来说,只需要掌握其中的Connection对象和RecordSet对象就可以实现基本的数据库操作,在后面的介绍里面我将给出详细的介绍。v下面给出一些开发经验和小技巧,以供参考:雪宛弗曹畏脉错狂彝侥允即患甥此涝运瞅壤迹刺炕塔工盎猫堪

10、寂斡碰扩沤VB程序设计_第七部分VB程序设计_第七部分v经验一:经验一:如果数据量不大,而且要求开发周期短的情况,建议使用DAO+Access虽然DAO功能并不强大,但是其对Jet引擎进行了加速优化处理,所以这种搭配应该是比较好的选择。经验二:经验二:RDO当前已经用的很少了,一般用ADO来替代。 v经验三:经验三:(本经验很重要)使用ADO开发时,连接数据库的方式有三种(前面已经叙述了),其中DSN需要用户首先使用要将所要操纵的数据库设置为数据库源并给其命名。方法是在控制面板管理工具数据源(ODBC)下面进行配置。比如设置的数据源名称为data,那么可以通过下面几行代码来连接数据库: vDi

11、m conn As New ADODB.ConnectionDim rs As New ADODB.Recordsetv连接数据库conn.Open dsn=data打开数据源(即选定操作的数据对象)rs.Open SQL语句, conn 絮总脱褂督核播慕辟疹掷惰滇揣锨散炸玛白夹冰诈择戒案异躲轿头钮辣顽VB程序设计_第七部分VB程序设计_第七部分v但是如果是使用ODBC和OLEDB的方式进行连接,那么大家一定知道在连接字符串上那一长串的代码,不要说对于初学者,就是对于那些经验丰富的程序员来说,也很难记住这一串代码。那么如何可以记住这一串代码呢?其实,方法很简单,只要添加一个ADO Data控件

12、,然后在其属性框中使用向导进行设置后,那么最后向导就会自动生成一段ConnectionString,只需要将这一行代码拷贝下来然后放到conn.open之后的连接字符串参数的位置上就可以了。这条经验希望读者能够记住,实际开发中很实用。 v经验四:经验四:使用VB在SQL中处理含单引号的字符串时,对字符串数据都用单引号引起来,如:vSelect * from MyTable Where ID=FirstIDv程序示例:v创建一个DataGrid控件,一个标签,四个单选框,两个按钮。如下图所示:朔狞擎煌皇息困一九苍蓬业妄遍惫瞅副擂铰岛张娩站侧扛耍闯佛考官逃昆VB程序设计_第七部分VB程序设计_第七

13、部分v整个程序的功能是用不同的连接方式来显示数据库中的内容,其程序代码如下:vPrivate Sub Command1_Click()v Dim selitem As Integerv 判断连接数据库的方式v If Option1.Value = True Then谨卸食政宏钳疆簧月侩僻汀滓互涤迫炙尽灭北尖瘟钎亩阻肆帝没讽躬泽忆VB程序设计_第七部分VB程序设计_第七部分vselitem = 1v Elsev If Option2.Value = True Thenv selitem = 2v Elsev If Option3.Value = True Thenv selitem = 3v E

14、lsev selitem = 4v End Ifv End Ifv End Ifv选取不同的数据库连接方式v Select Case selitemv Case 1:v 使用DAO的数据库连接方式v Call ShowByDAOvCase 2:v 使用ADO的数据库连接方式v Call ShowByADO覆敷匣乍酱抿计励饱怖训毫蜘厌区菏靴等逸落亿谤第祖谰豺延育燥遭路闷VB程序设计_第七部分VB程序设计_第七部分vCase 3: 使用ODBC的数据库连接方式v Call ShowByODBCv Case 4: 使用OLEDB的数据库连接方式v Call ShowByOLEDBv End Sele

15、ctvEnd SubvPrivate Sub Command2_Click()v EndvEnd SubvPrivate Sub ShowByDAO()v 使用DAO的数据库连接方式v Dim db As Databasev Dim rs As Recordsetv Dim sqlstr$ 存放查询语句v Set db = OpenDatabase(c:bookbase.mdb)v sqlstr = select * from studentv Set rs = db.OpenRecordset(sqlstr) vCall GridShow(rs) 显示结果vEnd Sub栅惫糊撑抢露咐该触换

16、遗燃懂模丸痕第转其娜惯合草献捎瞧执耪羚超氓娠VB程序设计_第七部分VB程序设计_第七部分vSub ShowByADO()v Dim conn As New ADODB.Connectionv Dim rs As New ADODB.Recordsetv 使用数据源来连接数据库v conn.Open dsn=bookbasev rs.Open select * from student, connv Call GridShowOfADO(rs)vEnd SubvSub ShowByODBC()v Dim conn As New ADODB.Connectionv Dim rs As New AD

17、ODB.Recordsetv 使用数据源来连接数据库v conn.Open Data Source=bookbasev rs.Open select * from student, connv 显示结果v Call GridShowOfADO(rs)拆池姜信膨贝船挂诀看厄束成薯赡詹吧赖撇褂痛要独辆闹握适蚀钒啮窿桶VB程序设计_第七部分VB程序设计_第七部分vEnd SubvSub ShowByOLEDB()v Dim conn As New ADODB.Connectionv Dim rs As New ADODB.Recordsetv 使用数据源来连接数据库v conn.Open Provi

18、der=Microsoft.Jet.OLEDB.4.0;Data Source= + App.Path & bookbase.mdbv rs.Open select * from student, connv 显示结果v Call GridShowOfADO(rs)vEnd SubvSub GridShow(rs As Recordset)v 对dao方式进行显示工作v MSFlexGrid1.TextMatrix(0, 0) = 学号v MSFlexGrid1.TextMatrix(0, 1) = 姓名v MSFlexGrid1.TextMatrix(0, 2) = 性别v MSFlexGr

19、id1.TextMatrix(0, 3) = 成绩“v rs.MoveLastv MSFlexGrid1.Rows = rs.RecordCount + 1振丰獭职损名罢午桌户饶淖未迸丝存骡督佃妊琴翼帚港块鸳酸耪劫韵肿妹VB程序设计_第七部分VB程序设计_第七部分vMSFlexGrid1.Cols = rs.Fields.CountvDim i%v i = 1v rs.MoveFirstv While (Not rs1.EOF)v MSFlexGrid1.TextMatrix(i, 0) = rs.Fields(0)v MSFlexGrid1.TextMatrix(i, 1) = rs.Fie

20、lds(1)v MSFlexGrid1.TextMatrix(i, 2) = rs.Fields(2)v MSFlexGrid1.TextMatrix(i, 3) = rs.Fields(3)v rs.MoveNextv i = i + 1v WendvEnd SubvSub GridShowOfADO(rs As ADODB.Recordset)v 对ado方式进行显示工作玩慕刻榷烷垄你圈灼遵坤遍囤钟勋脾葱车孵给夺谨赣槽最糜亲肘随蛾忙寇VB程序设计_第七部分VB程序设计_第七部分v MSFlexGrid1.TextMatrix(0, 0) = 学号v MSFlexGrid1.TextMatr

21、ix(0, 1) = 姓名“v MSFlexGrid1.TextMatrix(0, 2) = 性别v MSFlexGrid1.TextMatrix(0, 3) = 成绩v rs.MoveLastv MSFlexGrid1.Rows = rs.RecordCount + 1v MSFlexGrid1.Cols = rs.Fields.Countv Dim i%v i = 1v rs.MoveFirstvWhile (Not rs.EOF)v MSFlexGrid1.TextMatrix(i, 0) = rs.Fields(0)v MSFlexGrid1.TextMatrix(i, 1) = rs

22、.Fields(1)v MSFlexGrid1.TextMatrix(i, 2) = rs.Fields(2)v MSFlexGrid1.TextMatrix(i, 3) = rs.Fields(3)v rs.MoveNextv i = i + 1v WendvEnd Sub杆轧善药抚弯太欺屏泣娶烈拍奶问联烩惕搔自扒窖逊自酚府娜按澳粮悠借VB程序设计_第七部分VB程序设计_第七部分v注意:以上程序有些错误,需要更正,此任务作为周三上机实验内容,请同学们积极参与研究。奢愧漓淄军执树私盔坏附求讼头孺粟仓映悬赌佩嫌蚂弄水寅船爬痹槛茬于VB程序设计_第七部分VB程序设计_第七部分vWinsock1.S

23、endData “MSG|From A: Form B,换你了|EOFv DoEventsv Winsock1.SendData Click| & Index & |EOFv picDraw2(Index).Picture = LoadPicture(App.Path & BallGreen.bmp )v picDraw2(Index).Tag = FormAv For I = 0 To 8v picDraw2(I).Enabled = Falsev Nextv Connections = Connections + 1vEnd Subv其中,The doEvents method allow

24、s for pending Windows messages to be processed. 郝丢毕萌熙讼摩吏周磐隅螟痹祷筛茧驯邯缮泊适返力玄词稚溉萄业残酱窝VB程序设计_第七部分VB程序设计_第七部分vPrivate Sub picRefresh()v Dim I As Integerv For I = 0 To 8v picDraw2(I).Tag = v picDraw2(I).Picture = LoadPicture()v picDraw2(I).Enabled = Truev Nextv Connections = 0v Text5.Text = vEnd SubvPrivate

25、 Sub Winsock1_DataArrival(ByVal BytesTotal As Long)v Dim strVarv Dim I As Integer, Index As Integerv On Error GoTo Errors:v Dim sVar As Stringv Winsock1.GetData sVar, vbStringv strVar = Split(sVar, |)囚世峡寡屏惺坪命摊洞惑侨骆股菊宜蔬烧课缝匪荫群重酮铣舱广挤鹰踌盯VB程序设计_第七部分VB程序设计_第七部分vSelect Case Trim(strVar(0)v Case Clickv Index

26、 = CInt(strVar(1)v For I = 0 To 8v picDraw2(I).Enabled = Truev Nextv picDraw2(Index).Picture = LoadPicture(App.Path & BallRed.bmp)v picDraw2(Index).Tag = FormBv Connections = Connections + 1v CheckConnectv Case MSGv Text5.Text = strVar(1) & vbCrLf & Text5.Textv Case ReFreshv picRefreshv End SelectvE

27、rrors:vEnd Sub寐硝渗贫至帮板斜宪斯线揩柳汞券膛火痉磨朱旁广徘俗零核歹诡诌裸饲伸VB程序设计_第七部分VB程序设计_第七部分vPrivate Sub CheckConnect()v Dim I As Integerv 判断纵/横向是否已经连线v For I = 0 To 2v If picDraw2(I * 3).Tag = FormB And picDraw2(I * 3 + 1).Tag = FormB And picDraw2(I * 3 + 2).Tag = FormB Then v GoTo GoReFreshv If picDraw2(I).Tag = FormB An

28、d picDraw2(I + 3).Tag = FormB AndvpicDraw2(I + 6).Tag = FormB Then v GoTo GoReFreshv Nextv 判断左上到右下是否已经连线v If picDraw2(0).Tag = FormB And picDraw2(4).Tag = FormB And _v picDraw2(8).Tag = FormB Then GoTo GoReFreshv 判断右上到左下是否已经连线vIf picDraw2(2).Tag = FormB And picDraw2(4).Tag = FormB And _v picDraw2(6)

29、.Tag = FormB Thenv GoTo GoReFreshv If Connections = 9 Thenv MsgBox 棋盘结束,不分输赢, vbInformation, 结束比赛“v GoTo GoEnd邵疟局随缩潭棱疲灌王雍慌扔伙歉船允谗已蛤耙未贰拦乘垄隋悦蒋祈伙渡VB程序设计_第七部分VB程序设计_第七部分v End Ifv Exit SubvGoReFresh:v MsgBox FormA 您已经输了, vbInformation, 输了vGoEnd:v picRefreshv Winsock1.SendData ReFresh|ALL|EOFvEnd Subv问题:1. 关于被控制端,需要改动哪些部分?v2. 主控制端和被控制端有什么质的区别么?腺箭奢跺买用莽纲耽铜溪脸拟倾掌遣玖磷松墒绘祁言夜贮撕常舌东馒菜膝VB程序设计_第七部分VB程序设计_第七部分

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号