精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓...数据库技术...〓〓>>VB中远程数据库的访问(3)-应用举例

主题:VB中远程数据库的访问(3)-应用举例
发信人: r_hayes(Hayes)
整理人: winsy(2003-09-02 09:03:44), 站内信件
三、应用举例 

  以上介绍了用dao访问远程数据库的具体操作,下面通过一个例子说明链接远程表和建立记录集对象的方法。 

  首先建立一个新工程,在窗体上画5个命令按钮,1个数据控件和1个数据网格控件(dbgrid)。各对象的属性设置见表1。 

表1 窗体1对象属性设置 
 对 象 标 题(caption) 名 称(name) 
窗体 远程数据访问 form1 
命令按钮1 链接远程表 cmdlink 
命令按钮2 添加 cmdadd 
命令按钮3 删除 cmddel 
命令按钮4 修改 cmdmodify 
命令按钮5 结束 cmdend 
数据控件   data1 
数据网格   dbgrid1 

其中dbgrid1中的datasource属性设为data1,命令按钮2,3,4的visible属性设为false。 

三、应用举例 

编写如下事件过程: 

private sub cmdadd_click() ’ 添 加 记 录 子 过 程 

on error goto errhandler 

with rst 

.addnew 

for i = 0 to .fields.count - 1 ’ 遍 历 记 录 集 中 的 每 个 字 段 

’ 在 输 入 框 中 输 入 各 字 段 的 数 据 

.fields(i).value = inputbox 

(" 输 入 记 录 信 息" & vbcr + " 字 段 名:" + .fields(i).name) 

next i 

.update 

end with 

data1.refresh 

dbgrid1.rebind 

errhandler: ’ 错 误 处 理 

select case err 

case 3022, 3421 

msgbox (error + vbcr + " 输 入 无 效") 

exit sub 

case else 

response = 0 

exit sub 

end select 

end sub 

private sub cmddel_click() ’ 删 除 记 录 过 程 

on error goto errhandler 

begintrans ’ 事 务 处 理 

with data1.recordset 

if .bof and .eof then exit sub 

’ 如 果 没 有 记 录, 退 出 过 程 

.delete ’ 删 除 

if .bof and .eof then 

’ 如 果 没 有 记 录, 退 出 过 程 

exit sub 

elseif .eof then .movelast 

’ 如 果 删 除 的 是 最 后 一 条 记 录, 光 标 移 至 最 后 一 记 录 

else: .movenext 

’ 移 至 下 一 条 记 录 

end if 

end with 

if msgbox(" 确 实 要 删 除 这 一 记 录 ?", 

vbquestion + vbyesno) = vbyes then 

committrans ’ 确 认 

data1.refresh 

else 

rollback ’ 撤 消 改 动 

data1.refresh 

end if 

errhandler: ’ 错 误 处 理 

select case err 

case 3021 ’ 无 当 前 记 录 

msgbox (" 无 当 前 记 录, 请 选 择 要 删 除 的 记 录") 

exit sub 

case else 

msgbox (error) 

exit sub 

end select 

end sub 

private sub cmdend_click() 

end ’ 结 束 应 用 程 序 

end sub 

private sub cmdmodify_click() 

dbgrid1.allowupdate = true ’ 允 许 修 改 

end sub 

privatev sub cmdlink_click() 

form1.hide 

form2.show 

end sub 

private sub dbgrid1_aftercolupdate(byval colindex as integer) 

’ 数 据 修 改 后 触 发 该 事 件 

on error goto err1 

data1.refresh 

err1: 

select case err 

case 0 

response = 0 

case else 

exit sub 

end select 

end sub 

private sub dbgrid1_beforecolupdate 

(byval colindex as integer, oldvalue as variant, cancel as integer) 

’ 数 据 修 改 前 触 发 该 事 件 

on error goto errhandler: 

begintrans 

if msgbox(" 确 实 要 修 改这 一 内 容 ?", vbquestion + vbyesno) = vbyes then 

committrans 

else 

rollback 

data1.refresh 

end if 

errhandler: 

select case err 

case 0 

response = 0 

case else 

msgbox (error) 

exit sub 

end select 

end sub 

private sub form_load() 

’ 在 窗 体 装 入 时, 网 格 中 的 数 据 不 可 添 加, 修 改 

dbgrid1.allowaddnew = false 

dbgrid1.allowupdate = false 

end sub 

private sub form_resize() 

on error resume next 

’ 当 窗 体 调 整 时 会 调 整 网 格 

dbgrid1.height = me.scaleheight - data1.height - cmddel.height - 30 

end sub 

在工程中添加一个窗体,在窗体上画6个标签,1个命令按钮(标题为“ 确认”,名称为cmd 确认),3个文本框和1个组合框。 

在窗体的声明部份输入以下代码: 

’ 声 明 窗 体 层 变 量 

dim rodbs as database 

dim strdb as string, strrodb as string, strcn as string, strtdf as string 

dim linktdfname as string 

编 写 如 下 事 件 过 程: 

private sub cmdOK_click() 

on error goto errhandler: 

strdb = text2.text 

’ 本 地 数 据 库 名 及 路 径 

linktdfname = text3.text 

’ 本 地 数 据 库 中 新 建 的 链 接 远 程 表 的 表 名 

strcn = strrodb ’ 连 接 字 符 串 

strtdf = combo1.text ’ 指 定 远 程 数 据 库 中 要 访 问 的 表 

’ 调 用linktable 过 程 

call linktable(strdb, strrodb, strcn, strtdf, linktdfname) 

’ 调 用rst_display 过 程 

call rst_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: 

select case err 

case 0 

response = 0 

case else 

msgbox (error + vbr + " 重 新 输 入") 

exit sub 

end select 

end sub 

private sub combo1_gotfocus() 

strrodb = text1.text ’ 指 定 远 程 数 据 库 名 及 路 径 

set rodbs = opendatabase(strrodb) ’ 打 开 远 程 数 据 库 

’ 删 除combo1 中 的 内 容 

if combo1.listcount >= 1 then 

for i = combo1.listcount - 1 to 0 step -1 

combo1.removeitem i 

next i 

end if 

’ 把 数 据 库 中 的 表 名 加 到combo1 中 

for i = 0 to rodbs.tabledefs.count - 1 

combo1.additem rodbs.tabledefs(i).name 

next i 

end sub 
  




----

                    灌灌 
                    灌灌 
                    灌灌 
                    灌灌          灌灌 
                    灌灌      灌灌灌 
    灌灌灌灌灌灌灌  灌灌  灌灌灌 
      灌灌灌灌灌灌灌灌灌灌灌灌 
                灌灌灌灌灌灌 
               灌灌灌灌灌灌灌  
              灌灌  灌灌  灌灌 
             灌灌   灌灌    灌灌 
            灌灌    灌灌      灌灌 
          灌灌      灌灌      灌灌灌 
          灌灌      灌灌        灌灌灌灌 
        灌灌        灌灌        灌灌灌灌灌 
      灌灌          灌灌          灌灌灌灌灌  
    灌灌            灌灌            灌灌 
                灌灌灌灌 
                  灌灌灌 
                    灌    

[关闭][返回]