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