VB程序中用ADO對象動態創建數據庫和表
摘要: 本文闡述了在 VB 程序中利用ADO對象動態創建數據庫和數據表的方法,這些方法在 開發 VB數據庫應用程序中很有實用價值,它可以提高數據庫程序靈活性。 關鍵詞:數據庫、數據表、ADO、ADOX 1: 問題的提出 在Visual Basic中,常用的數據訪問接口有下列三
摘要: 本文闡述了在
VB程序中利用ADO對象動態創建
數據庫和數據表的方法,這些方法在
開發VB數據庫應用程序中很有實用價值,它可以提高數據庫程序靈活性。
關鍵詞:數據庫、數據表、ADO、ADOX
1: 問題的提出
在Visual Basic中,常用的數據訪問接口有下列三種:數據庫訪問對象(DAO,Data A
clearcase/" target="_blank" >ccess Object)、遠程數據庫對象(RDO,Remote Data Object)和ActiveX數據對象(ADO,ActiveX Data Object )。數據庫訪問技術一直在不斷進步,而這三種接口的每一種都分別代表了該技術的不同發展階段。最新的是ADO,它是比RDO和DAO更加簡單,然而更加靈活的對象模型。正因如此,越來越多的人在用VB
開發數據庫軟件時使用ADO作為數據訪問接口。在
開發過程中,我們通常的使用的方法是:先使用數據庫管理系統(例如:Microsoft Access)或VB中的可視化數據管理器建立好數據庫和數據表結構,然后在程序中通過使用ADODC數據庫控件或引用ADO對象與數據庫中的表建立連接,再通過數據庫感知控件(例如:文本框、DataGrid等)來進行數據庫的各種操作。在這種開發過程中,我們有時需要面對這樣一個問題:如何讓用戶在程序運行過程中動態地建立自己所需的數據庫和數據表以提高程序的靈活性呢?在程序運行過程中建立自己所需的數據庫和數據表,其本質就是用代碼(或者說通過
編程)來建立數據庫和數據表。眾所周知,在Foxpro或ASP
編程中,這是很容易的一件事件。那么在VB數據庫編程中又是怎樣來操作的呢?在VB數據庫編程中,如果使用DAO作為數據庫訪問接口技術,則可以用CreateDatabase結合CreateTableDef方法來實現,目前已有不少書和
雜志都講到了這種方法,本文就不再講述了;但你如果使用的是最新的數據庫訪問接口技術ADO,你卻發現目前的書和
雜志上沒有文章講到如何用代碼來建立數據庫和數據表的方法,可有時我們非常需要用到這種方法,下面我們就來解決這個問題。
2: ADO與ADOX
我們先來對ADO 和ADOX進行簡單的認識。在VB6中,使用ADO開發數據庫應用程序時,我們要引用對象庫"Microsoft ActiveX Data Objects 2.5 Library", 這個東西的簡稱就是ADO,它是VB6數據庫最核心的對象群,也是VB數據庫開發人員經常所引用的對象庫,在VB6中你可以看到它的各種版本,從2.0版到2.6版都有,很多人對它已經很熟悉,在此我們不再詳細介紹。如果要在程序運行過程中創建數據庫和表,我們還要引用對象庫"Microsoft ADO Ext 2.1. For DDL Security",簡稱為ADOX,其庫文件名為是:Msadox.dll。ADOX是對 ADO 對象和編程模型的擴展,它將 ADO 擴展為包括創建、修改和刪除模式對象,如表格和過程。它還包括
安全對象,用于維護用戶和組,以及授予和撤消對象的權限。ADOX的對象如下表所示:
對象 |
說明 |
Catalog |
包含描述數據源模式目錄的集合。 |
Column |
表示表、索引或關鍵字的列。 |
Group |
表示在安全數據庫內有訪問權限的組帳號。 |
Index |
表示數據庫表中的索引。 |
Key |
表示數據庫表中的主關鍵字、外部關鍵字或唯一關鍵字。 |
Procedure |
表示存儲的過程。 |
Table |
表示數據庫表,包括列、索引和關鍵字。 |
User |
表示在安全數據庫內具有訪問權限的用戶帳號。 |
View |
表示記錄或虛擬表的過濾集。 |
ADOX常用方法有:Append(包括Columns、Groups、Indexes、Keys、Procedures、Tables、Users、Views)、Create(創建新的目錄)、Delete(刪除集合中的對象)、Refresh(更新集合中的對象)等等。有關 ADOX 的詳細信息,請在 http://www.microsoft.com/data/ado 中參閱 Microsoft 發布的有關 ADOX說明的
Web 頁。
3: 在原有數據表的基礎上產生新的數據表
如果僅僅是在已有的數據表的基礎上產生新的數據表,我們只要引用對象庫"Microsoft ActiveX Data Objects 2.5 Library"再利用Select…Into語句就可以了。例如:有一個名為Wage.mdb的數據庫,數據庫中有一個名為"工資表"數據表,該數據表的字段有:編號、姓名、基本工資、津貼、應發工資、扣款、實發工資等,這個表中已經有很多的記錄?,F在我們把其中的實發工資大于2000的記錄篩選出來組成一個新表,新表的名稱由用戶從文本框中輸入,新表中我們只要三個字段,它們是:編號、姓名、實發工資。我們用下列程序就可以實現:
(事先在窗體中添加一個文本框Text1和一個命令按鈕Command1)
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim command As New ADODB.command
Private Sub Command1_Click()
Dim bm As String
Dim sql As String
If Text1.Text <> "" Then
bm = Trim(Text1.Text)
sql= "Select 編號,姓名,實發工資 Into " + bm + " From 工資表 Where 實發工資>2000"
Set command.ActiveConnection = conn
command.CommandText = sql
command.Execute
Else
MsgBox "你必須輸入一個名字"
End If
Private Sub Form_Load()
Dim str As String
str = App.Path
If Right(str, 1) <> "\" Then
str = str + "\"
End If
pstr = "Provider=Microsoft.Jet.OLEDB.3.51;"
pstr = pstr & "Persist Security Info=False;"
pstr = pstr & "Data Source=" & str & "wage.mdb"
conn.Open pstr
rs.CursorLocation = adUseClient
rs.Open "工資表", conn, adOpenKeyset, adLockPessimistic
Set DataGrid1.DataSource = rs
End Sub |
當然,我們還可以把程序設計得更好,比如:讓用戶先在窗口中任意選擇所需的字段和一些條件,然后再組合生成一個新表。但無論如何,這種操作只能在從原表的基礎上產生一個新表,不能產生一個數據庫文件,并且新表和原表放在同一個數據庫中。
4: 建立新的數據庫和表
前面講到的方法有一定的局限性,它不能讓用戶產生自己所需的數據庫文件,即使能產生數據表也只能在原有表的基礎上生成。我們現在的目的就是讓用戶利用ADO對象在程序運行過程中創建數據庫和表,就好象他利用Access來建立數據庫和表一樣。為此,我們應該引用對象庫"Microsoft ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security"
我們不妨用一個實例來說明具體的操作過程和方法。我們的實例要達到目的是:在程序運行過程中建立一個數據庫,數據庫的名稱由用戶輸入。然后在數據庫中建立一個名為"MyTable"的數據表,數據表中有三個字段,它們分別是:"編號"(整數型)、 "姓名"(字符型,寬度為8)、"住址" (字符型,寬度為50),接著在數據表中添加一條記錄,最后在DataGrid控件中把記錄的內容顯示出來,并且讓用戶在DataGrid控件中任意修改、添加記錄。
首先在VB中新建一個窗體,然后在"工程"菜單中引用對象庫"Microsoft ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security"。接著定義三個窗體級的對象變量和一個窗體級的字符串變量,它們的具體定義是:
Dim cat As New ADOX.Catalog '不用cat用另外一個名字也可以
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim pstr As String '定義該變量是為了后面的書寫方便 |
為了更靈活地創建數據庫,我們可以在窗體中加入一個通用對話框、一個DataGrid控件,三個命令按鈕,它們的標題分別是:創建數據庫和表、查看、更新。通用對話框的作用是給用戶輸入數據庫文件名和決定數據庫的存放位置。 "創建數據庫和表"命令按鈕對應的代碼是:
Private Sub Command1_Click()
Dim fm As String 'fm變量用來獲取用戶輸入的文件名
CommonDialog1.Filter = "MDB文件(*.mdb)|*.mdb|AllFiles(*.*)|*.*|"
CommonDialog1.FilterIndex = 1
CommonDialog1.InitDir = "D:\Jthpaper"
CommonDialog1.Flags = 6
CommonDialog1.Action = 2
If CommonDialog1.FileName = "" Then
MsgBox "你必須輸入一個文件名,請重新保存一次!"
Exit Sub
Else
fm = CommonDialog1.FileName
End If
pstr = "Provider=Microsoft.Jet.OLEDB.4.0;" '不能把這里的4.0改為3.51
pstr = pstr & "Data Source=" & fm
cat.Create pstr '創建數據庫
Dim tbl As New Table
cat.ActiveConnection = pstr
tbl.Name = "MyTable" '表的名稱
tbl.Columns.Append "編號", adInteger '表的第一個字段
tbl.Columns.Append "姓名", adVarWChar, 8 '表的第二個字段
tbl.Columns.Append "住址", adVarWChar, 50 '表的第三個字段
cat.Tables.Append tbl '建立數據表
conn.Open pstr
rs.CursorLocation = adUseClient
rs.Open "MyTable", conn, adOpenKeyset, adLockPessimistic
rs.AddNew '往表中添加新記錄
rs.Fields(0).Value = 9801
rs.Fields(1).Value = "孫悟空"
rs.Fields(2).Value = "廣州市花果山"
rs.Update
End Sub |
上面程序中有一個需要說明的地方,這就是語句:pstr = "Provider=Microsoft.Jet.OLEDB.4.0;",這個語句表示Microsoft Jet OLEDB驅動程序的版本是4.0,這是目前最新的版本,利用它你可以用VB中的ADO對象訪問Access2000及其以下版本所建立的數據庫。你不能把這里的"4.0"改為"3.51",否則程序不能正常運行;在VB6中,3.51版本的Microsoft Jet OLEDB驅動程序對應的是Access97數據庫。換而言之,用這種方法建立的數據庫和表跟用Access2000所建立的數據庫和表是同一類型的,你只能直接用Access2000來打開,雖然你可以用VB6來訪問這種數據庫和其中的數據表,但你不能用Access97或VB6中的"可視化數據管理器"來直接打開。
在程序運行時只要用戶單擊該命令按鈕就可以創建自己所需的數據庫。"查看"命令按鈕對應的代碼是:
Private Sub Command3_Click()
Set DataGrid1.DataSource = rs
End Sub
"更新"命令按鈕對應的代碼是:
Private Sub Command4_Click()
rs.UpdateBatch
End Sub |
我們這個實例只是用來說明問題,在實際應用當中你可以把它進一步改進,例如:你在窗體中再增加一些文本框和組合框,供用戶輸入或選擇數據表的名稱、字段的名稱、字段的寬度和小數位數。這樣,用戶就可以自主地決定數據庫的所有內容了,程序的靈活性也就大大提高了。
5: 結束語
如果你使用的是最新的數據訪問接口技術ADO(Microsoft強烈建議大家使用這種最新技術),你又想在程序運行過程中創建數據庫文件和數據表,此時,你應該在Visual Basic 6.0中引用對象庫"Microsoft ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security",然后使用ADOX對象的Create、Append等方法就可以實現。 這種方法使用的Microsoft Jet OLEDB驅動程序的版本是4.0,因此,使用這種方法建立的數據庫文件和數據表可以直接使用Access2000打開。筆者在VB數據庫軟件開發過程中已多次使用這種方法,該方法在提高程序的靈活性和滿足用戶的特殊需要方面有很大的作用。
原文轉自:http://www.anti-gravitydesign.com
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|