三、应用举例
以上介绍了用dao访问远程数据库的具体操作,下面通过一个例子说明链接远程表和建立记录集对象的方法。
首先建立一个新工程,在窗体上画5个命令按钮,1个数据控件和1个数据网格控件(dbgrid)。各对象的属性设置见表1。
表1窗体1对象属性设置 其中dbgrid1中的datasource属性设为data1,命令按钮2,3,4的visible属性设为false。 三、应用举例 编写如下事件过程: privatesubcmdadd_click()添加记录子过程 onerrorgotoerrhandler withrst .addnew fori=0to.fields.count-1遍历记录集中的每个字段 在输入框中输入各字段的数据 .fields(i).value=inputbox (“输入记录信息”&vbcr “字段名:” .fields(i).name) nexti .update endwith data1.refresh dbgrid1.rebind errhandler:错误处理 selectcaseerr case3022,3421 msgbox(error vbcr “输入无效”) exitsub caseelse response=0 exitsub endselect endsub privatesubcmddel_click()删除记录过程 onerrorgotoerrhandler begintrans事务处理 withdata1.recordset if.bofand.eofthenexitsub 如果没有记录,退出过程 .delete删除 if.bofand.eofthen 如果没有记录,退出过程 exitsub elseif.eofthen.movelast 如果删除的是最后一条记录,光标移至最后一记录 else:.movenext 移至下一条记录 endif endwith ifmsgbox(“确实要删除这一记录?”, vbquestion vbyesno)=vbyesthen committrans确认 data1.refresh else rollback撤消改动 data1.refresh endif errhandler:错误处理 selectcaseerr case3021无当前记录 msgbox(“无当前记录,请选择要删除的记录”) exitsub caseelse msgbox(error) exitsub endselect endsub privatesubcmdend_click() end结束应用程序 endsub privatesubcmdmodify_click() dbgrid1.allowupdate=true允许修改 endsub privatevsubcmdlink_click() form1.hide form2.show endsub privatesubdbgrid1_aftercolupdate(byvalcolindexasinteger) 数据修改后触发该事件 onerrorgotoerr1 data1.refresh err1: selectcaseerr case0 response=0 caseelse exitsub endselect endsub privatesubdbgrid1_beforecolupdate (byvalcolindexasinteger,oldvalueasvariant,cancelasinteger) 数据修改前触发该事件 onerrorgotoerrhandler: begintrans ifmsgbox(“确实要修改这一内容?”,vbquestion vbyesno)=vbyesthen committrans else rollback data1.refresh endif errhandler: selectcaseerr case0 response=0 caseelse msgbox(error) exitsub endselect endsub privatesubform_load() 在窗体装入时,网格中的数据不可添加,修改 dbgrid1.allowaddnew=false dbgrid1.allowupdate=false endsub privatesubform_resize() onerrorresumenext 当窗体调整时会调整网格 dbgrid1.height=me.scaleheight-data1.height-cmddel.height-30 endsub 在工程中添加一个窗体,在窗体上画6个标签,1个命令按钮(标题为“确认”,名称为cmd确认),3个文本框和1个组合框。 在窗体的声明部份输入以下代码: 声明窗体层变量 dimrodbsasdatabase dimstrdbasstring,strrodbasstring,strcnasstring,strtdfasstring dimlinktdfnameasstring 编写如下事件过程: privatesubcmdOK_click() onerrorgotoerrhandler: strdb=text2.text 本地数据库名及路径 linktdfname=text3.text 本地数据库中新建的链接远程表的表名 strcn=strrodb连接字符串 strtdf=combo1.text指定远程数据库中要访问的表 调用linktable过程 calllinktable(strdb,strrodb,strcn,strtdf,linktdfname) 调用rst_display过程 callrst_display(strdb,linktdfname,form1) form2.hide form1.show form1.caption=”远程数据:” strcn “-” strtdf 显示“添加”,“删除”,“修改”控件 form1.cmdadd.visible=true form1.cmddel.visible=true form1.cmdmodify.visible=true errhandler: selectcaseerr case0 response=0 caseelse msgbox(error vbr “重新输入”) exitsub endselect endsub privatesubcombo1_gotfocus() strrodb=text1.text指定远程数据库名及路径 setrodbs=opendatabase(strrodb)打开远程数据库 删除combo1中的内容 ifcombo1.listcount>=1then fori=combo1.listcount-1to0step-1 combo1.removeitemi nexti endif 把数据库中的表名加到combo1中 fori=0torodbs.tabledefs.count-1 combo1.additemrodbs.tabledefs(i).name nexti endsub ->