VB中远程数据库的访问

上传人:ni****g 文档编号:477085598 上传时间:2023-12-28 格式:DOCX 页数:12 大小:12.73KB
返回 下载 相关 举报
VB中远程数据库的访问_第1页
第1页 / 共12页
VB中远程数据库的访问_第2页
第2页 / 共12页
VB中远程数据库的访问_第3页
第3页 / 共12页
VB中远程数据库的访问_第4页
第4页 / 共12页
VB中远程数据库的访问_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《VB中远程数据库的访问》由会员分享,可在线阅读,更多相关《VB中远程数据库的访问(12页珍藏版)》请在金锄头文库上搜索。

1、VB中远程数据库的访问(1)一数据连接在VB中,用microsoft jet数据库引擎和数据访问对象DAOCdata access object) 可以创建功能强大的客户/服务器应用程序。对远程数据库的访问是开发这类应 用程序的关键环节,本文将介绍在VB中用DAO通过miscrosoft jet数据库引擎 访问远程数据库的方法。用DAO访问远程数据库大体上可以通过三步来实现,即数据连接、数据处理 和断开连接。下面主要介绍数据连接和数据处理的具体操作。一、数据连接DAO 一般通过链接远程表的方式来进行数据连接。这样,数据虽然驻留在远 程数据源上,但在本地的microsoftjet数据库中可以存储

2、与远程数据的永久性 连接,同时缓存链接的表结构信息,从而在下一次访问该表时,不用再次从服务 器中检索这些结构信息,加快了连接速度。一旦链接了一个表,该链接便会保留 在各会话期间,直到连接断开。链接远程表的具体操作是:用opendatabase方法打开将要包含该链接的本地microsoft jet数据库用createtabledef方法在该数据库中创建一个新的tabledef对象将tabledef对象的connect属性设置为一个合法的连接字符串,标识要访问的 远程数据库类型、数据文件的路径以及用户名和远程数据源密码等。将tabledef对象的sourcetablename属性设置为远程数据库中

3、要访问的表的名 称。添加tabledef对象到tabledefs集合中。实现链接远程表操作的过程如下:public sub linktable(strdb as string, strrodb as string, strcn as string, strtdf as string, _linktdfname as string)dim linktdf as new tabledefset dbs = opendatabase(strdb)linktdf.name = linktdfnametemptable = ucase(linktdf.name) for i = 0 to dbs.tab

4、ledefs.count - 1if ucase(dbs.tabledefs(i).name) = temptable thenif msgbox(linktdfname + 已存在,是否删除?,_vbquestion + vbyesno) = vbyes thendbs.tabledefs.delete linktdf.nameexit forelse: msgbox 重新输入新表名linktdfname = inputbox(新 表 名)goto 100end ifend ifnext iset linktdf = dbs.createtabledef(linktdfname) 链接远 程

5、 表linktdf.connect = ;database= + strcnlinktdf.sourcetablename = strtdfdbs.tabledefs.append linktdfend sub上述过程用来实现远程表的连接,它有5个参数,其中strrodb是要访问的远程 数据库名(包括路径);strtdf是该数据库中的表名;strdb是要链接的本地数 据库(包括路径);linktdfname是本地数据库的一个新表名,用来建立远程表 的链接;strcn是指定连接信息的字符串。需要特别注意的是,除了在访问远程 microsoft jet数据库时,连接字符串要以分号(;)开头外,指定

6、连接信息的 字符串都必须以所访问的远程数据库类型开头。DAO可以访问的远程数据源有以 下三类:.microsoft jet 数据源,如:access 数据。.iisam (可安装的索引化顺序访问方法)格式数据源,如:foxpro、paradox、 dbase数据。.odbc数据源,如:sqlserver数据、oracle数据。例如:设网络服务器名为server,共享目录为c:sales的foxpro3.0数据 库,连接字符串应为strcn=foxpro3.0;database=serverc$salesregion1此外,DAO通过microsoft jet数据库引擎访问远程数据时,还可以用

7、opendatabase方法直接打开远程表。在本地数据库中并未存储与远程数据源建 立连接所需要的信息。如果使用链接方式访问数据,则不必在每次会话开始时提 供连接信息,从而可以提高效率。VB中远程数据库的访问(2)一数据处理二、数据处理数据连接建立后,可以用openrecordset方法打开一个记录集,并可用 dbgrid控件和data控件方便地浏览整个记录集。如果使用表类型(table-type) 记录对象,则对应的是一个实际存在的数据库表,在多用户环境下,其它用户对 数据的修改会立即反映到表中;如果使用动态集类型(dynaset-type)记录对象, 则对应的既可以是一个表中全部记录,又可以

8、是一个查询的结果,并且可以更新 记录集中的记录;如果使用快照类型(snapshot-type )记录对象,则对应的可 以是表中的全部记录,也可以是一个查询结果,但不能进行记录的增加、删除和 修改操作。此外,还可以建立其它类型的记录对象,如仅向前型(forward only-type)记录对象和动态型(dynamic-type)记录对象。下面是打开动态集记录对象并显示记录的过程:public sub rst_display(strdb as string, strrst as string, strform as form)set dbs = opendatabase(strdb)set rst

9、 = dbs.openrecordset(strrst, dbopendynaset)strform!data1.databasename = dbs.name strform!data1.recordsource = rst.name strform!data1.refresh strform!dbgrid1.rebindend sub上述过程有三个参数,其中strdb用来指定本地数据库名(包括路径), linktdfname是在本地数据库中新建的链接远程表的表名,strform是网格控件 和数据控件所在的窗体名。调用此过程可以基于新表建立一个动态集类型的记录 对象,并可在网格中浏览各个记录

10、。断开连接可以通过关闭应用程序或设置连接超时来实现。注意:如果对数据 库对象使用close方法,则由于在miscrosoft jet数据库引擎内部缓存了连接, 实际上连接并未取消。VB中远程数据库的访问(3)一应用举例三、应用举例编写如下事件过程:private sub cmdadd_click() 添 加记 录子过 程on error goto errhandlerwith rst.addnewfor i = 0 to .fields.count - 1 遍历记录集中的每个字段在输入框中输入各字段的数据.fields(i).value = inputbox(输入记录信息 & vbcr + 字

11、段名: + .fields(i).name) next i.updatedatal.refresh dbgridl.rebinderrhandler: 错误处理select case errcase 3022, 3421msgbox (error + vbcr + 输 入 无 效)exit subcase elseresponse = 0exit subend selectend subprivate sub cmddel_click() 删除记 录过程on error goto errhandlerbegintrans 事务处理with data1.recordsetif . bof and

12、 . eof then exit sub如果没有记录,退出过程.delete 删除if .bof and .eof then如果没有记录,退出过程elseif .eof then .movelast 如果删除的是最后一条记录,光标移至最后一记录 else: .movenext移至下一条记录end ifend withif msgbox(确实要删除这一记录?,vbquestion + vbyesno) = vbyes thencommittrans 确认data1.refreshelserollback 撤消改动data1.refreshend iferrhandler: 错误处理select

13、case errcase 3021 无 当 前记录msgbox (无当前记录,请选择要删除的记录)exit subcase elsemsgbox (error)end subprivate sub cmdend_click()end 结束应用程序end subprivate sub cmdmodify_click()dbgridl.allowupdate = true 允 许修 改end subprivatev sub cmdlink_click()form1.hideform2.showend subprivate sub dbgrid1_aftercolupdate(byval colin

14、dex as integer)数据修改后触发该事件on error goto err1data1.refresherr1:select case errcase 0response = 0case elseend subprivate sub dbgrid1_beforecolupdate(byval colindex as integer, oldvalue as variant, cancel as integer)数据修改前触发该事件on error goto errhandler:begintransif msgbox(确实要修改这一内容?,vbquestion + vbyesno)

15、= vbyes thencommittranselserollbackdata1.refreshend iferrhandler:select case errcase 0response = 0case elsemsgbox (error)exit sub end selectprivate sub form_load()在窗体装入时,网格中的数据不可添加,修改dbgridl.allowaddnew = falsedbgridl.allowupdate = falseend subprivate sub form_resize()on error resume next当窗体调整时会调整网格dbgrid1.height = me.scaleheight - data1.height - cmddel.height - 30 end sub在工程中添加一个窗体,在窗体上画6个标签,1个命令按钮(标题为“确认”, 名称为cmd确认),3个文本框和1个组合框。在窗体的声明

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

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

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