程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB中遠程數據庫的訪問(3)-應用舉例

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

編輯:VB綜合教程
三、應用舉例
  
  以上介紹了用dao訪問遠程數據庫的具體操作,下面通過一個例子說明鏈接遠程表和建立記錄集對象的方法。
  
  首先建立一個新工程,在窗體上畫5個命令按鈕,1個數據控件和1個數據網格控件(dbgrid)。各對象的屬性設置見表1。
  
  表1窗體1對象屬性設置
  -align="middle"width="33">對象->-align="middle"width="33">標題(caption)->-align="middle"width="34">名稱(name)->-width="33">窗體->-width="33">遠程數據訪問->-width="34">form1->-width="33">命令按鈕1->-width="33">鏈接遠程表->-width="34">cmdlink->-width="33">命令按鈕2->-width="33">添加->-width="34">cmdadd->-width="33">命令按鈕3->-width="33">刪除->-width="34">cmddel->-width="33">命令按鈕4->-width="33">修改->-width="34">cmdmodify->-width="33">命令按鈕5->-width="33">結束->-width="34">cmdend->-width="33">數據控件->-width="33">->-width="34">data1->-width="33">數據網格->-width="33">->-width="34">dbgrid1->

其中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

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved