发信人: 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
----
灌灌
灌灌
灌灌
灌灌 灌灌
灌灌 灌灌灌
灌灌灌灌灌灌灌 灌灌 灌灌灌
灌灌灌灌灌灌灌灌灌灌灌灌
灌灌灌灌灌灌
灌灌灌灌灌灌灌
灌灌 灌灌 灌灌
灌灌 灌灌 灌灌
灌灌 灌灌 灌灌
灌灌 灌灌 灌灌灌
灌灌 灌灌 灌灌灌灌
灌灌 灌灌 灌灌灌灌灌
灌灌 灌灌 灌灌灌灌灌
灌灌 灌灌 灌灌
灌灌灌灌
灌灌灌
灌 |
|