VB中遠程數(shù)據(jù)庫的訪問(3)應用舉例

字號:

應用舉例
    以上介紹了用dao訪問遠程數(shù)據(jù)庫的具體操作,下面通過一個例子說明鏈接遠程表和建立記錄集對象的方法。
    首先建立一個新工程,在窗體上畫5個命令按鈕,設(shè)為首頁1個數(shù)據(jù)控件和1個數(shù)據(jù)網(wǎng)格控件(dbgrid)。各對象的屬性設(shè)置見表1。
    表1 窗體1對象屬性設(shè)置
    對 象
    標 題(caption)
    名 稱(name)
    窗體
    遠程數(shù)據(jù)訪問
    form1
    命令按鈕1
    鏈接遠程表
    cmd 鏈接
    命令按鈕2
    添加
    cmdadd
    命令按鈕3
    刪除
    cmddel
    命令按鈕4
    修改
    cmdmodify
    命令按鈕5
    結(jié)束
    cmdend
    數(shù)據(jù)控件
    data1
    data1
    數(shù)據(jù)網(wǎng)格
    dbgrid1
    其中dbgrid1中的datasource屬性設(shè)為data1,命令按鈕2,3,4的visible屬性設(shè)為false。
    三、應用舉例
    編寫如下事件過程:
    private sub cmdadd_click() ’ 添 加 記 錄 子 過 程
    on error goto errhandler
    with rst
    .addnew
    for i = 0 to .fields.count - 1 ’ 遍 歷 記 錄 集 中 的 每 個 字 段
    ’ 在 輸 入 框 中 輸 入 各 字 段 的 數(shù) 據(jù)
    .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 ’ 事 務(wù) 處 理
    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 ’ 結(jié) 束 應 用 程 序
    end sub
    private sub cmdmodify_click()
    dbgrid1.allowupdate = true ’ 允 許 修 改
    end sub
    privatev sub cmd 鏈 接_click()
    form1.hide
    form2.show
    end sub private sub dbgrid1_aftercolupdate(byval colindex as integer)
    ’ 數(shù) 據(jù) 修 改 后 觸 發(fā) 該 事 件
    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)
    ’ 數(shù) 據(jù) 修 改 前 觸 發(fā) 該 事 件
    on error goto errhandler:
    begintrans
    if msgbox(" 確 實 要 修 改
    這 一 內(nèi) 容 ?", 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()
    ’ 在 窗 體 裝 入 時, 網(wǎng) 格 中 的 數(shù) 據(jù) 不 可 添 加, 修 改
    dbgrid1.allowaddnew = false
    dbgrid1.allowupdate = false
    end sub
    private sub fo
    您正在看的VB教程是:VB中遠程數(shù)據(jù)庫的訪問(3) 應用舉例。rm_resize()
    on error resume next
    ’ 當 窗 體 調(diào) 整 時 會 調(diào) 整 網(wǎng) 格
    dbgrid1.height = me.scaleheight - data1.height - cmd 刪 除.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 cmd 確 認_click()
    on error goto errhandler:
    strdb = text2.text
    ’ 本 地 數(shù) 據(jù) 庫 名 及 路 徑
    linktdfname = text3.text
    ’ 本 地 數(shù) 據(jù) 庫 中 新 建 的 鏈 接 遠 程 表 的 表 名
    strcn = strrodb ’ 連 接 字 符 串
    strtdf = combo1.text ’ 指 定 遠 程 數(shù) 據(jù) 庫 中 要 訪 問 的 表
    ’ 調(diào) 用linktable 過 程
    call linktable(strdb, strrodb, strcn, strtdf, linktdfname)
    ’ 調(diào) 用rst_display 過 程
    call rst_display(strdb, linktdfname, form1)
    form2.hide
    form1.show
    form1.caption = " 遠 程 數(shù) 據(jù):" + 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 ’ 指 定 遠 程 數(shù) 據(jù) 庫 名 及 路 徑
    set rodbs = opendatabase(strrodb) ’ 打 開 遠 程 數(shù) 據(jù) 庫
    ’ 刪 除combo1 中 的 內(nèi) 容
    if combo1.listcount >= 1 then
    for i = combo1.listcount - 1 to 0 step -1
    combo1.removeitem i
    next i
    end if
    ’ 把 數(shù) 據(jù) 庫 中 的 表 名 加 到combo1 中
    for i = 0 to rodbs.tabledefs.count - 1
    combo1.additem rodbs.tabledefs(i).name
    next i
    end sub