張妍垚,孫曦東
(中國(guó)電子科技集團(tuán)公司第四十七研究所,沈陽(yáng)110032)
器件目錄數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)設(shè)計(jì)的目的是為了提高長(zhǎng)期以來(lái)器件數(shù)據(jù)散亂、查找困難等問(wèn)題。隨著計(jì)算機(jī)技術(shù)的發(fā)展及其在數(shù)據(jù)庫(kù)上的強(qiáng)大應(yīng)用,能夠幫助創(chuàng)建出完備的器件目錄的應(yīng)用程序。
在VB編程中常要與數(shù)據(jù)庫(kù)打交道,雖然可以選擇各種數(shù)據(jù)庫(kù)格式,但對(duì)于數(shù)據(jù)量較小的應(yīng)用,一般選用Access作為數(shù)據(jù)庫(kù)。因?yàn)锳ccess數(shù)據(jù)庫(kù)比較簡(jiǎn)單,功能也比較齊全,數(shù)據(jù)的備份、拷貝都很方便,且程序發(fā)布時(shí)不需要額外單獨(dú)安裝其它的數(shù)據(jù)庫(kù)管理軟件。因此,在功能能夠滿(mǎn)足要求的條件下,Access數(shù)據(jù)庫(kù)往往成為小型數(shù)據(jù)庫(kù)軟件的首選。而且最容易使用的還是Visual Basic的數(shù)據(jù)庫(kù)格式—Microsoft Access,因?yàn)?Visual Basic與Microsoft Access互相支持,可以使用豐富的特性集。
表是由行和列組成的數(shù)據(jù)集合,行叫做記錄(Record),列叫做字段(Field)。
所謂表和表之間的關(guān)系,一般情況下就是指某個(gè)表中的主關(guān)鍵字和另外一個(gè)表中的外關(guān)鍵字之間的對(duì)應(yīng)關(guān)系。
查詢(xún)不是數(shù)據(jù)庫(kù)中存儲(chǔ)的表,而是按照各種規(guī)則和要求“查”出來(lái)的表。
Jet數(shù)據(jù)庫(kù)引擎(Microsoft Joint Engineering Technologe)是應(yīng)用程序和數(shù)據(jù)庫(kù)之間的一種接口。它將與數(shù)據(jù)庫(kù)相關(guān)的內(nèi)容管理、游標(biāo)管理和錯(cuò)誤處理等具體而復(fù)雜的細(xì)節(jié)問(wèn)題抽象為一個(gè)既高度一致又相對(duì)簡(jiǎn)化的編程接口。對(duì)所支持的數(shù)據(jù)庫(kù)提供統(tǒng)一的外部接口,將對(duì)記錄的操作轉(zhuǎn)化為對(duì)數(shù)據(jù)庫(kù)的物理操作?;赩B的數(shù)據(jù)庫(kù)應(yīng)用程序從邏輯上可分為三部分:用戶(hù)接口、數(shù)據(jù)庫(kù)引擎和數(shù)據(jù)庫(kù)存儲(chǔ)。由用戶(hù)接口實(shí)現(xiàn)對(duì)具體數(shù)據(jù)庫(kù)的連接,通過(guò)數(shù)據(jù)庫(kù)引擎完成數(shù)據(jù)庫(kù)存儲(chǔ)。
ODBC Direct技術(shù)能給應(yīng)用程序數(shù)據(jù)庫(kù)訪問(wèn)加入全新的視角,可以檢索一個(gè)數(shù)據(jù)庫(kù)的大量信息。應(yīng)用程序向ODBC發(fā)出SQL語(yǔ)句并接收作為語(yǔ)句結(jié)果的數(shù)據(jù)。數(shù)據(jù)源是已安裝的數(shù)據(jù)庫(kù)服務(wù)器,ODBC把特殊的ODBC驅(qū)動(dòng)程序和一個(gè)指定的數(shù)據(jù)庫(kù)聯(lián)合起來(lái),數(shù)據(jù)源定位在本地硬盤(pán)或網(wǎng)絡(luò)上。
最主要的就是用Active X數(shù)據(jù)對(duì)象ADO(active x data objects)這種新的數(shù)據(jù)訪問(wèn)標(biāo)準(zhǔn)代替了原有的訪問(wèn)對(duì)象DAO(date access object)和遠(yuǎn)程數(shù)據(jù)訪問(wèn)對(duì)象RDO(remote date objects)。
Microsoft ActiveX Data Objects(ADO):使客戶(hù)端應(yīng)用程序能通過(guò)OLE DB提供者訪問(wèn)和操作數(shù)據(jù)庫(kù)服務(wù)器中的數(shù)據(jù)。
ActiveX Data Objects Extensions for DDL and Security(ADOX):將ADO擴(kuò)展為包括創(chuàng)建、修改和刪除的模式對(duì)象,如表格和過(guò)程,以及包括用于維護(hù)用戶(hù)和組以及管理對(duì)象權(quán)限的安全對(duì)象。
ActiveX Data Objects(Multidimensional)(ADO MD):將ADO擴(kuò)展為包括指定到多維數(shù)據(jù)的對(duì)象,并允許瀏覽多維模式、查詢(xún)立方和檢索結(jié)果。
ADO具有高度的靈活性,它可以使用相同的編程模式連接到不同的數(shù)據(jù)提供者,而不管給定提供者的特定特性,具有較低的內(nèi)存占用率。
具有遠(yuǎn)程數(shù)據(jù)服務(wù)(RDS)功能,通過(guò)RDS可以在一次往返過(guò)程中將數(shù)據(jù)從服務(wù)器移動(dòng)到客戶(hù)端應(yīng)用程序或Web頁(yè),并在客戶(hù)端對(duì)數(shù)據(jù)進(jìn)行處理后將更新結(jié)果返回服務(wù)器。
同傳統(tǒng)的數(shù)據(jù)對(duì)象層次(DAO和RDO)不同,ADO可以獨(dú)立創(chuàng)建,也可以只創(chuàng)建一個(gè)“Connection”對(duì)象,然后由多個(gè)獨(dú)立的“Recordset”對(duì)象來(lái)使用它。
ODBC本身是以SQL Server、Oracle等關(guān)系數(shù)據(jù)庫(kù)作為訪問(wèn)對(duì)象,而OLE DB則不僅限于此,它還可以對(duì)電子郵件、文本文件、復(fù)合文件、數(shù)據(jù)表等各種各樣的數(shù)據(jù)通過(guò)統(tǒng)一的接口進(jìn)行存取。
首先在Access中創(chuàng)建一個(gè)名為“mulu”的表,該表由以下9個(gè)字段組成:ID為Access的“mulu”表的主鍵字段,然后直接設(shè)置后8個(gè)字段,在輸入完了mulu表的各個(gè)字段之后,關(guān)閉表設(shè)計(jì)器,Access會(huì)提示是否要進(jìn)行保存表,選擇“是”,然后為表起名為“mulu”。因?yàn)闆](méi)有定義主鍵(primary Key),Access會(huì)提示為表加上一個(gè)主鍵,按提示將ID設(shè)置為主鍵即可。設(shè)置完以上字段后,再調(diào)用Visual Basic程序。
調(diào)用Visual Basic程序先安裝ADO,在VB的“工程”/“引用”對(duì)話(huà)框中選擇“ActiveX Data Object 2.8 Library”(ADODB)。并將ADO數(shù)據(jù)控件添加到工具箱中,選擇“工程”菜單中“部件”項(xiàng),選中“Microsoft ADO Data Control 6.0(OLEDB)”,并單擊“確定”按鈕。
然后創(chuàng)建一個(gè)新窗體,設(shè)計(jì)新窗體屬性。在工具箱中雙擊ADO數(shù)據(jù)控件的圖標(biāo)(Adodc),向窗體中添加一個(gè)ADO控件,設(shè)計(jì)ADO控件屬性,選擇使用連接字符串后,選擇生成。在提供程序中選擇“Microsoft OLE DB Provider for ODBC Drivers“后,選擇下一步。連接中指定數(shù)據(jù)源選擇使用數(shù)據(jù)源名稱(chēng),然后在下拉列表中選擇MS Access Database,在輸入要使用的初始目錄中輸入記錄源中Access數(shù)據(jù)庫(kù)的名稱(chēng)后,測(cè)試連接,提示測(cè)試連接成功后點(diǎn)擊確定,否則重新輸入。命令類(lèi)型選擇2-adCmdTable,表或存儲(chǔ)過(guò)程名稱(chēng)選擇Access數(shù)據(jù)庫(kù)的名稱(chēng),即設(shè)置完ADO屬性。
對(duì)每一個(gè)想訪問(wèn)的Access數(shù)據(jù)庫(kù)字段,在窗體上添加一個(gè)文本框,并且把VB6.0的數(shù)據(jù)控件對(duì)象與數(shù)據(jù)綁定控件一起,把數(shù)據(jù)控件放在窗體上,并設(shè)置屬性:第一個(gè)屬性DataSource,返回或設(shè)置控件的數(shù)據(jù)源。第二個(gè)屬性DataMember屬性,返回或設(shè)置要使用的源中的指定數(shù)據(jù)集。第三個(gè)屬性DataField,返回或設(shè)置要綁定控件的指定字段。作為綁定到窗體控件中數(shù)據(jù)的一個(gè)直接數(shù)據(jù)源,要將數(shù)據(jù)環(huán)境對(duì)象中一個(gè)“用戶(hù)”Command對(duì)象的字段“用戶(hù)名”綁定到窗體中的一個(gè)TextBox控件中去,則需要執(zhí)行下列步驟:先將一個(gè)TextBox控件放到Visual Basic窗體中;在“屬性”窗口中,單擊Datasource(“數(shù)據(jù)源”)屬性,選擇您想綁定到控件的 DataEnvironment對(duì)象,如“Adodc1”;單擊 DataMember屬性,并選擇數(shù)據(jù)環(huán)境中的Command對(duì)象“rst用戶(hù)”;單擊DataField屬性,從綁定到控件的“rst用戶(hù)”Command對(duì)象中選擇字段“用戶(hù)名”。這樣,就完成了綁定工作。還有一種更快捷、簡(jiǎn)便的方法,就是將需要綁定的Command對(duì)象拖到窗體中,則窗體就會(huì)自動(dòng)生成這個(gè)對(duì)象所有字段的標(biāo)簽(Label)名和數(shù)據(jù)操作及顯示區(qū)(TextBox)。
編程訪問(wèn)數(shù)據(jù)環(huán)境設(shè)計(jì)器中的對(duì)象。要從一個(gè)Visual Basic窗體中編程訪問(wèn)數(shù)據(jù)環(huán)境中的對(duì)象“用戶(hù)”記錄,則按照以下步驟執(zhí)行:在窗體中建一個(gè)ListBox控件,在控件中輸入目錄名。附加到這個(gè)控件的代碼是用于將“用戶(hù)”表中的記錄在其余的Text-Box控件中顯示。則在按鈕的Click事件中添加下面的代碼:
用戶(hù).Text=rst.Fields(索引標(biāo)識(shí))
示意程序如下(程序示意圖如下):
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strsql,strsql1 As String
Set con=New ADODB.Connection
Set rst=New ADODB.Recordset
con.ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Data Source=MS Access Database;Initial Catalog=e:mulu.mdb"
con.Open
strsql1="select*from[mulub]where[name]like '" & Trim(List1.Text)& " '" 'rst.Open strsql1,con,adOpenKeyset,adLockOptimistic
With rst
.CursorLocation=adUseClient
.CursorType=adOpenDynamic
.LockType=adLockOptimistic
.Open strsql1,con,3,3
End With
If rst.RecordCount > 0 Then
Text4.Text=rst.Fields(0)
If Not IsNull(rst.Fields(2))Then
Text1.Text=rst.Fields(2)
Else
Text1.Text=""
End If
If Not IsNull(rst.Fields(3))Then
Text2.Text=rst.Fields(3)
Else
Text2.Text=""
End If
If Not IsNull(rst.Fields(4))Then
Text3.Text=rst.Fields(4)
Else
Text3.Text=""
End If
If Not IsNull(rst.Fields(6))Then
Text5.Text=rst.Fields(6)
Else
Text5.Text=""
End If
Else
MsgBox("沒(méi)發(fā)現(xiàn)項(xiàng)目名稱(chēng)")
End If
rst.Close
con.Close
End sub
圖1 程序簡(jiǎn)單示意圖
從上面例子可以看出,與一個(gè)ADO Recordset關(guān)聯(lián)的所有方法都可以應(yīng)用于rst用戶(hù),例如添加、更新、刪除和遍歷記錄的方法。
從上面說(shuō)明可以看出,VB中的數(shù)據(jù)環(huán)境就象一個(gè)大的數(shù)據(jù)控件一樣,它可以在不同的窗體中引用和操作。VB提供了強(qiáng)有力的數(shù)據(jù)庫(kù)存取能力,將WINDOWS的各種先進(jìn)特性與強(qiáng)大的數(shù)據(jù)庫(kù)管理功能有機(jī)地結(jié)合在一起。VB有很多有關(guān)文本文件的特性,可以使用這些功能打開(kāi)文本文件并且讀取文本數(shù)據(jù)。這對(duì)于我們開(kāi)發(fā)應(yīng)用程序來(lái)說(shuō),無(wú)疑提供了一個(gè)很好的數(shù)據(jù)工具。
[1][美]E Winemiller,J Roff,B Heyman,R Groom,著.Visual Basic 6.0 數(shù)據(jù)庫(kù)開(kāi)發(fā)[M].顧斌,楊德斌,譯,北京:清華大學(xué)出版社,2001.
[2]林永,張樂(lè)強(qiáng).Visual Basic 6.0用戶(hù)編程手冊(cè)[M](第二版).北京:人民郵電出版社,2002.
[3]李楠,李志強(qiáng).Visual Basic 6.0入門(mén)與提高[M].北京:人民郵電出版社,1998.