熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VB中用ADO對象動態創建數據庫和表

2013-11-13 10:31:14  來源: .NET編程 

  : 問題的提出

  在Visual Basic中常用的數據訪問接口有下列三種數據庫訪問對象(DAOData Access Object)遠程數據庫對象(RDORemote Data Object)和ActiveX數據對象(ADOActiveX Data Object )數據庫訪問技術一直在不斷進步而這三種接口的每一種都分別代表了該技術的不同發展階段最新的是ADO它是比RDO和DAO更加簡單然而更加靈活的對象模型正因如此越來越多的人在用VB開發數據庫軟件時使用ADO作為數據訪問接口在開發過程中我們通常的使用的方法是先使用數據庫管理系統(例如Microsoft Access)或VB中的可視化數據管理器建立好數據庫和數據表結構然後在程序中通過使用ADODC數據庫控件或引用ADO對象與數據庫中的表建立連接再通過數據庫感知控件(例如文本框DataGrid等)來進行數據庫的各種操作在這種開發過程中我們有時需要面對這樣一個問題如何讓用戶在程序運行過程中動態地建立自己所需的數據庫和數據表以提高程序的靈活性呢?在程序運行過程中建立自己所需的數據庫和數據表其本質就是用代碼(或者說通過編程)來建立數據庫和數據表眾所周知在Foxpro或ASP編程中這是很容易的一件事件那麼在VB數據庫編程中又是怎樣來操作的呢?在VB數據庫編程中如果使用DAO作為數據庫訪問接口技術則可以用CreateDatabase結合CreateTableDef方法來實現目前已有不少書和雜志都講到了這種方法本文就不再講述了但你如果使用的是最新的數據庫訪問接口技術ADO你卻發現目前的書和雜志上沒有文章講到如何用代碼來建立數據庫和數據表的方法可有時我們非常需要用到這種方法下面我們就來解決這個問題

  : ADO與ADOX

  我們先來對ADO 和ADOX進行簡單的認識在VB使用ADO開發數據庫應用程序時我們要引用對象庫Microsoft ActiveX Data Objects Library 這個東西的簡稱就是ADO它是VB數據庫最核心的對象群也是VB數據庫開發人員經常所引用的對象庫在VB中你可以看到它的各種版本版到版都有很多人對它已經很熟悉在此我們不再詳細介紹如果要在程序運行過程中創建數據庫和表我們還要引用對象庫Microsoft ADO Ext For DDL Security簡稱為ADOX其庫文件名為是MsadoxdllADOX是對 ADO 對象和編程模型的擴展它將 ADO 擴展為包括創建修改和刪除模式對象如表格和過程它還包括安全對象用於維護用戶和組以及授予和撤消對象的權限ADOX的對象如下表所示

  對象 說明

  Catalog 包含描述數據源模式目錄的集合

  Column 表示表索引或關鍵字的列

  Group  表示在安全數據庫內有訪問權限的組帳號

  Index  表示數據庫表中的索引

  Key  表示數據庫表中的主關鍵字外部關鍵字或唯一關鍵字

  Procedure 表示存儲的過程

  Table  表示數據庫表包括列索引和關鍵字

  User  表示在安全數據庫內具有訪問權限的用戶帳號

  View  表示記錄或虛擬表的過濾集

  ADOX常用方法有Append(包括ColumnsGroupsIndexesKeysProceduresTablesUsersViews)Create(創建新的目錄)Delete(刪除集合中的對象)Refresh(更新集合中的對象)等等有關 ADOX 的詳細信息請在 中參閱 Microsoft 發布的有關 ADOX說明的 Web 頁

  : 在原有數據表的基礎上產生新的數據表

  如果僅僅是在已有的數據表的基礎上產生新的數據表我們只要引用對象庫Microsoft ActiveX Data Objects Library再利用Select…Into語句就可以了例如有一個名為Wagemdb的數據庫數據庫中有一個名為工資表數據表該數據表的字段有編號姓名基本工資津貼應發工資扣款實發工資等這個表中已經有很多的記錄現在我們把其中的實發工資大於的記錄篩選出來組成一個新表新表的名稱由用戶從文本框中輸入新表中我們只要三個字段它們是編號姓名實發工資我們用下列程序就可以實現

  (事先在窗體中添加一個文本框Text和一個命令按鈕Command)

  Dim conn As New ADODBConnection

  Dim rs As New ADODBRecordset

  Dim command As New mand

  Private Sub Command_Click()

  Dim bm As String

  Dim sql As String

  If TextText <> Then

  bm = Trim(TextText)

  sql= Select 編號姓名實發工資 Into + bm + From 工資表 Where 實發工資>

  Set commandActiveConnection = conn

  commandCommandText = sql

  commandExecute

  Else

  MsgBox 你必須輸入一個名字

  End If

  Private Sub Form_Load()

  Dim str As String

  str = AppPath

  If Right(str ) <>\ Then

  str = str + \

  End If

  pstr = Provider=MicrosoftJetOLEDB;

  pstr = pstr & Persist Security Info=False;

  pstr = pstr & Data Source= & str & wagemdb

  connOpen pstr

  rsCursorLocation = adUseClient

  rsOpen 工資表 conn adOpenKeyset adLockPessimistic

  Set DataGridDataSource = rs

  End Sub

  當然我們還可以把程序設計得更好比如讓用戶先在窗口中任意選擇所需的字段和一些條件然後再組合生成一個新表但無論如何這種操作只能在從原表的基礎上產生一個新表不能產生一個數據庫文件並且新表和原表放在同一個數據庫中

  : 建立新的數據庫和表

  前面講到的方法有一定的局限性它不能讓用戶產生自己所需的數據庫文件即使能產生數據表也只能在原有表的基礎上生成我們現在的目的就是讓用戶利用ADO對象在程序運行過程中創建數據庫和表就好象他利用Access來建立數據庫和表一樣為此我們應該引用對象庫Microsoft ActiveX Data Objects LibraryMicrosoft ADO Ext For DDL Security

  我們不妨用一個實例來說明具體的操作過程和方法我們的實例要達到目的是在程序運行過程中建立一個數據庫數據庫的名稱由用戶輸入然後在數據庫中建立一個名為MyTable的數據表數據表中有三個字段它們分別是編號(整數型) 姓名(字符型寬度為)住址 (字符型寬度為)接著在數據表中添加一條記錄最後在DataGrid控件中把記錄的內容顯示出來並且讓用戶在DataGrid控件中任意修改添加記錄

  首先在VB中新建一個窗體然後在工程菜單中引用對象庫Microsoft ActiveX Data Objects LibraryMicrosoft ADO Ext For DDL Security接著定義三個窗體級的對象變量和一個窗體級的字符串變量它們的具體定義是

  Dim cat As New ADOXCatalog 不用cat用另外一個名字也可以

  Dim conn As New ADODBConnection

  Dim rs As New ADODBRecordset

  Dim pstr As String 定義該變量是為了後面的書寫方便

  為了更靈活地創建數據庫我們可以在窗體中加入一個通用對話框一個DataGrid控件三個命令按鈕它們的標題分別是創建數據庫和表查看更新通用對話框的作用是給用戶輸入數據庫文件名和決定數據庫的存放位置 創建數據庫和表命令按鈕對應的代碼是

  Private Sub Command_Click()

  Dim fm As String fm變量用來獲取用戶輸入的文件名

  CommonDialogFilter = MDB文件(*mdb)|*mdb|AllFiles(**)|**|

  CommonDialogFilterIndex =

  CommonDialogInitDir = D:\Jthpaper

  CommonDialogFlags =

  CommonDialogAction =

  If CommonDialogFileName = Then

  MsgBox 你必須輸入一個文件名請重新保存一次!

  Exit Sub

  Else

  fm = CommonDialogFileName

  End If

  pstr = Provider=MicrosoftJetOLEDB; 不能把這裡的改為

  pstr = pstr & Data Source= & fm

  catCreate pstr 創建數據庫

  Dim tbl As New Table

  catActiveConnection = pstr

  tblName = MyTable 表的名稱

  tblColumnsAppend 編號 adInteger 表的第一個字段

  tblColumnsAppend 姓名 adVarWChar 表的第二個字段

  tblColumnsAppend 住址 adVarWChar 表的第三個字段

  catTablesAppend tbl 建立數據表

  connOpen pstr

  rsCursorLocation = adUseClient

  rsOpen MyTable conn adOpenKeyset adLockPessimistic

  rsAddNew 往表中添加新記錄

  rsFields()Value =

  rsFields()Value = 孫悟空

  rsFields()Value = 廣州市花果山

  rsUpdate

  End Sub

  上面程序中有一個需要說明的地方這就是語句pstr = Provider=MicrosoftJetOLEDB;這個語句表示Microsoft Jet OLEDB驅動程序的版本是這是目前最新的版本利用它你可以用VB中的ADO對象訪問Access及其以下版本所建立的數據庫你不能把這裡的改為否則程序不能正常運行在VB版本的Microsoft Jet OLEDB驅動程序對應的是Access數據庫換而言之用這種方法建立的數據庫和表跟用Access所建立的數據庫和表是同一類型的你只能直接用Access來打開雖然你可以用VB來訪問這種數據庫和其中的數據表但你不能用Access或VB中的可視化數據管理器來直接打開

  在程序運行時只要用戶單擊該命令按鈕就可以創建自己所需的數據庫查看命令按鈕對應的代碼是

  Private Sub Command_Click()

  Set DataGridDataSource = rs

  End Sub

  更新命令按鈕對應的代碼是

  Private Sub Command_Click()

  rsUpdateBatch

  End Sub

  我們這個實例只是用來說明問題在實際應用當中你可以把它進一步改進例如你在窗體中再增加一些文本框和組合框供用戶輸入或選擇數據表的名稱字段的名稱字段的寬度和小數位數這樣用戶就可以自主地決定數據庫的所有內容了程序的靈活性也就大大提高了

  : 結束語

  如果你使用的是最新的數據訪問接口技術ADO(Microsoft強烈建議大家使用這種最新技術)你又想在程序運行過程中創建數據庫文件和數據表此時你應該在Visual Basic 中引用對象庫Microsoft ActiveX Data Objects LibraryMicrosoft ADO Ext For DDL Security然後使用ADOX對象的CreateAppend等方法就可以實現 這種方法使用的Microsoft Jet OLEDB驅動程序的版本是因此使用這種方法建立的數據庫文件和數據表可以直接使用Access打開筆者在VB數據庫軟件開發過程中已多次使用這種方法該方法在提高程序的靈活性和滿足用戶的特殊需要方面有很大的作用


From:http://tw.wingwit.com/Article/program/net/201311/13882.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.