前面講到的方法有一定的局限性,它不能讓用戶產(chǎn)生自己所需的數(shù)據(jù)庫(kù)文件,即使能產(chǎn)生數(shù)據(jù)表也只能在原有表的基礎(chǔ)上生成。我們現(xiàn)在的目的就是讓用戶利用ADO對(duì)象在程序運(yùn)行過(guò)程中創(chuàng)建數(shù)據(jù)庫(kù)和表,就好象他利用Access來(lái)建立數(shù)據(jù)庫(kù)和表一樣。為此,我們應(yīng)該引用對(duì)象庫(kù)"Microsoft ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security"
?
? 我們不妨用一個(gè)實(shí)例來(lái)說(shuō)明具體的操作過(guò)程和方法。我們的實(shí)例要達(dá)到目的是:在程序運(yùn)行過(guò)程中建立一個(gè)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的名稱由用戶輸入。然后在數(shù)據(jù)庫(kù)中建立一個(gè)名為"MyTable"的數(shù)據(jù)表,數(shù)據(jù)表中有三個(gè)字段,它們分別是:"編號(hào)"(整數(shù)型)、 "姓名"(字符型,寬度為8)、"住址" (字符型,寬度為50),接著在數(shù)據(jù)表中添加一條記錄,最后在DataGrid控件中把記錄的內(nèi)容顯示出來(lái),并且讓用戶在DataGrid控件中任意修改、添加記錄。
?
? 首先在VB中新建一個(gè)窗體,然后在"工程"菜單中引用對(duì)象庫(kù)"Microsoft ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security"。接著定義三個(gè)窗體級(jí)的對(duì)象變量和一個(gè)窗體級(jí)的字符串變量,它們的具體定義是:
?
? Dim cat As New ADOX.Catalog '不用cat用另外一個(gè)名字也可以
?
? Dim conn As New ADODB.Connection
?
? Dim rs As New ADODB.Recordset
?
? Dim pstr As String '定義該變量是為了后面的書(shū)寫(xiě)方便
?
? 為了更靈活地創(chuàng)建數(shù)據(jù)庫(kù),我們可以在窗體中加入一個(gè)通用對(duì)話框、一個(gè)DataGrid控件,三個(gè)命令按鈕,它們的標(biāo)題分別是:創(chuàng)建數(shù)據(jù)庫(kù)和表、查看、更新。通用對(duì)話框的作用是給用戶輸入數(shù)據(jù)庫(kù)文件名和決定數(shù)據(jù)庫(kù)的存放位置。 "創(chuàng)建數(shù)據(jù)庫(kù)和表"命令按鈕對(duì)應(yīng)的代碼是
北美托福答案
?
? Private Sub Command1_Click()
?
? Dim fm As String 'fm變量用來(lái)獲取用戶輸入的文件名
?
? CommonDialog1.Filter = "MDB文件(*.mdb)|*.mdb|AllFiles(*.*)|*.*|"
?
? CommonDialog1.FilterIndex = 1
?
? CommonDialog1.InitDir = "D:\Jthpaper"
?
? CommonDialog1.Flags = 6
?
? CommonDialog1.Action = 2
?
? If CommonDialog1.FileName = "" Then
?
? MsgBox "你必須輸入一個(gè)文件名,請(qǐng)重新保存一次!"
?
? 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 '創(chuàng)建數(shù)據(jù)庫(kù)
?
? Dim tbl As New Table
?
? cat.ActiveConnection = pstr
?
? tbl.Name = "MyTable" '表的名稱
?
? tbl.Columns.Append "編號(hào)", adInteger '表的第一個(gè)字段
?
? tbl.Columns.Append "姓名", adVarWChar, 8 '表的第二個(gè)字段
?
? tbl.Columns.Append "住址", adVarWChar, 50 '表的第三個(gè)字段
?
? cat.Tables.Append tbl '建立數(shù)據(jù)表
?
? 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
?
? 上面程序中有一個(gè)需要說(shuō)明的地方,這就是語(yǔ)句:pstr = "Provider=Microsoft.Jet.OLEDB.4.0;",這個(gè)語(yǔ)句表示Microsoft Jet OLEDB驅(qū)動(dòng)程序的版本是4.0,這是目前最新的版本,利用它你可以用VB中的ADO對(duì)象訪問(wèn)Access2000及其以下版本所建立的數(shù)據(jù)庫(kù)。你不能把這里的"4.0"改為"3.51",否則程序不能正常運(yùn)行;在VB6中,3.51版本的Microsoft Jet OLEDB驅(qū)動(dòng)程序?qū)?yīng)的是Access97數(shù)據(jù)庫(kù)。換而言之,用這種方法建立的數(shù)據(jù)庫(kù)和表跟用Access2000所建立的數(shù)據(jù)庫(kù)和表是同一類型的,你只能直接用Access2000來(lái)打開(kāi),雖然你可以用VB6來(lái)訪問(wèn)這種數(shù)據(jù)庫(kù)和其中的數(shù)據(jù)表,但你不能用Access97或VB6中的"可視化數(shù)據(jù)管理器"來(lái)直接打開(kāi)
雅思答案
?
? 在程序運(yùn)行時(shí)只要用戶單擊該命令按鈕就可以創(chuàng)建自己所需的數(shù)據(jù)庫(kù)。"查看"命令按鈕對(duì)應(yīng)的代碼是:
?
? Private Sub Command3_Click()
?
? Set DataGrid1.DataSource = rs
?
? End Sub
?
? "更新"命令按鈕對(duì)應(yīng)的代碼是:
?
? Private Sub Command4_Click()
?
? rs.UpdateBatch
?
? End Sub
?
? 我們這個(gè)實(shí)例只是用來(lái)說(shuō)明問(wèn)題,在實(shí)際應(yīng)用當(dāng)中你可以把它進(jìn)一步改進(jìn),例如:你在窗體中再增加一些文本框和組合框,供用戶輸入或選擇數(shù)據(jù)表的名稱、字段的名稱、字段的寬度和小數(shù)位數(shù)。這樣,用戶就可以自主地決定數(shù)據(jù)庫(kù)的所有內(nèi)容了,程序的靈活性也就大大提高了
托福答案
?
? 5: 結(jié)束語(yǔ)
?
? 如果你使用的是最新的數(shù)據(jù)訪問(wèn)接口技術(shù)ADO(Microsoft強(qiáng)烈建議大家使用這種最新技術(shù)),你又想在程序運(yùn)行過(guò)程中創(chuàng)建數(shù)據(jù)庫(kù)文件和數(shù)據(jù)表,此時(shí),你應(yīng)該在Visual Basic 6.0中引用對(duì)象庫(kù)"Microsoft ActiveX Data Objects 2.5 Library"和"Microsoft ADO Ext 2.1. For DDL Security",然后使用ADOX對(duì)象的Create、Append等方法就可以實(shí)現(xiàn)。 這種方法使用的Microsoft Jet OLEDB驅(qū)動(dòng)程序的版本是4.0,因此,使用這種方法建立的數(shù)據(jù)庫(kù)文件和數(shù)據(jù)表可以直接使用Access2000打開(kāi)。筆者在VB數(shù)據(jù)庫(kù)軟件開(kāi)發(fā)過(guò)程中已多次使用這種方法,該方法在提高程序的靈活性和滿足用戶的特殊需要方面有很大的作用。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
