




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第9章 VB數(shù)據(jù)庫編程技術(shù)91數(shù)據(jù)庫設(shè)計(jì)基礎(chǔ)911 VB中的數(shù)據(jù)訪問 VB提供的數(shù)據(jù)庫引擎叫Jet。VB提供了兩種與Jet數(shù)據(jù)庫引擎接口的方法:Data控件(Data Control)和數(shù)據(jù)訪問對象(DAO)。Data控件只提供了有限的不需編程就能訪問現(xiàn)存數(shù)據(jù)庫的功能,而DAO模型則是全面控制數(shù)據(jù)庫的完整編程接口。這兩種方法不是互斥的,實(shí)際上,它們可以同時(shí)使用。 VB中的數(shù)據(jù)庫編程就是創(chuàng)建數(shù)據(jù)訪問對象,這些數(shù)據(jù)訪問對象對應(yīng)于被訪問的物理數(shù)據(jù)庫的不同部分,如Database(數(shù)據(jù)庫)、Table(表)、Field(字段)和Index(索引)對象。用這些對象的屬性和方法來實(shí)現(xiàn)對數(shù)據(jù)庫的操作。VB通
2、過DAO和Jet引擎可以識別三類數(shù)據(jù)庫:1. VB數(shù)據(jù)庫:也稱為本地?cái)?shù)據(jù)庫,這類數(shù)據(jù)庫文件使用與Microsoft Access相同的格式。Jet引擎直接創(chuàng)建和操作這些數(shù)據(jù)庫并且提供了最大程度的靈活性和速度。 2. 外部數(shù)據(jù)庫:VB可以使用幾種比較流行的“索引順序訪問文件方法(ISAM)”數(shù)據(jù)庫,包括:dDase III、dBase IV、FoxPro 2.0和2.5以及Paradox 3.x和4.x。在VB中可以創(chuàng)建和操作所有這些格式的數(shù)據(jù)庫,也可以訪問文本文件數(shù)據(jù)庫和Excel或Lotus l-2-3電子表格文件。 3. ODBC數(shù)據(jù)庫:包括符合ODBC標(biāo)準(zhǔn)的客戶機(jī)服務(wù)器數(shù)據(jù)庫,如Micr
3、osoft SQL Server。如果要在VB中創(chuàng)建真正的客戶機(jī)服務(wù)器應(yīng)用程序,可以使用ODBC Direct直接把命令傳遞給服務(wù)器處理。912 VB數(shù)據(jù)庫體系結(jié)構(gòu)VB提供了基于Microsoft Jet數(shù)據(jù)庫引擎的數(shù)據(jù)訪問能力,Jet引擎負(fù)責(zé)處理存儲、檢索、更新數(shù)據(jù)的結(jié)構(gòu),并提供了功能強(qiáng)大的面向?qū)ο蟮腄AO編程接口。1 VB數(shù)據(jù)庫應(yīng)用程序的組成VB數(shù)據(jù)庫應(yīng)用程序包含三部分,如圖9.1所示。Jet引擎用戶界面數(shù)據(jù)庫圖9.1 VB數(shù)據(jù)庫應(yīng)用程序的組成數(shù)據(jù)庫引擎位于程序和物理數(shù)據(jù)庫文件之間。這把用戶與正在訪問的特定數(shù)據(jù)庫隔離開來,實(shí)現(xiàn)“透明”訪問。不管這個(gè)數(shù)據(jù)庫是本地的VB數(shù)據(jù)庫,還是所支持的其他
4、任何格式的數(shù)據(jù)庫,所使用的數(shù)據(jù)訪問對象和編程技術(shù)都是相同的。 (1)用戶界面和應(yīng)用程序代碼 用戶界面是用戶所看見的用于交互的界面,它包括顯示數(shù)據(jù)并允許用戶查看或更新數(shù)據(jù)的窗體。驅(qū)動(dòng)這些窗體的是應(yīng)用程序的VB代碼,包括用來請求數(shù)據(jù)庫服務(wù)的數(shù)據(jù)訪問對象和方法,比如添加或刪除記錄,或執(zhí)行查詢等。 (2)Jet引擎 Jet引擎被包含在一組動(dòng)態(tài)鏈接庫(DLL)文件中。在運(yùn)行時(shí),這些文件被鏈接到VB程序。它把應(yīng)用程序的請求翻譯成對.mdb(Access文件后綴)文件或其他數(shù)據(jù)庫的物理操作。它真正讀取、寫入和修改數(shù)據(jù)庫,并處理所有內(nèi)部事務(wù),如索引、鎖定、安全性和引用完整性。它還包含一個(gè)查詢處理器,接收并執(zhí)行
5、SQL查詢,實(shí)現(xiàn)所需的數(shù)據(jù)操作。另外,它還包含一個(gè)結(jié)果處理器,用來管理查詢所返回的結(jié)果。 (3)數(shù)據(jù)庫 數(shù)據(jù)庫是包含數(shù)據(jù)庫表的一個(gè)或多個(gè)文件。對于本地VB或Access數(shù)據(jù)庫來說,就是mdb文件。對于ISAM數(shù)據(jù)庫,它可能是包含.dbf(dBASE文件后綴)文件或其他擴(kuò)展名的文件?;蛘?,應(yīng)用程序可能會(huì)訪問保存在幾個(gè)不同的數(shù)據(jù)庫文件或格式中的數(shù)據(jù)。但無論在什么情況下,數(shù)據(jù)庫本質(zhì)上都是被動(dòng)的,它包含數(shù)據(jù)但不對數(shù)據(jù)作任何操作。數(shù)據(jù)操作是數(shù)據(jù)庫引擎的任務(wù)。2數(shù)據(jù)庫應(yīng)用程序的存放 數(shù)據(jù)庫應(yīng)用程序的這三個(gè)部分可以被分別放置在不同的位置上。可以把它們都放在一臺計(jì)算機(jī)上,供單用戶應(yīng)用程序使用,也可以放置在通過
6、網(wǎng)絡(luò)連接起來的不同計(jì)算機(jī)上。例如,數(shù)據(jù)庫可以駐留在中央服務(wù)器上,而用戶界面(即應(yīng)用程序)則駐留在幾個(gè)客戶機(jī)上,讓許多用戶訪問相同的數(shù)據(jù)。脫離開應(yīng)用程序本身,將數(shù)據(jù)存放在另一臺機(jī)器上的數(shù)據(jù)庫應(yīng)用程序,有遠(yuǎn)程數(shù)據(jù)庫和客戶機(jī)/服務(wù)器數(shù)據(jù)庫兩種結(jié)構(gòu)。它們的不同點(diǎn)如圖9.2所示。 客戶機(jī)/服務(wù)器 遠(yuǎn)程數(shù)據(jù)庫數(shù)據(jù)庫引擎數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫引擎數(shù)據(jù)庫用戶界面客戶機(jī)圖9.2 客戶機(jī)/服務(wù)器數(shù)據(jù)庫與遠(yuǎn)程數(shù)據(jù)庫的存放 在客戶機(jī)/服務(wù)器系統(tǒng)中,數(shù)據(jù)庫引擎和數(shù)據(jù)庫一起被放置在服務(wù)器上。數(shù)據(jù)庫引擎可以同時(shí)對多個(gè)客戶機(jī)的應(yīng)用程序提供服務(wù)、操作數(shù)據(jù)庫并對每個(gè)本地應(yīng)用程序返回所請求的記錄。在遠(yuǎn)程系統(tǒng)中,數(shù)據(jù)庫引擎與用戶應(yīng)用程序
7、在相同的計(jì)算機(jī)上,只有數(shù)據(jù)庫駐留在遠(yuǎn)程計(jì)算機(jī)上。Jet數(shù)據(jù)庫引擎不是客戶機(jī)服務(wù)器引擎,它是駐留在DLL文件中的本地?cái)?shù)據(jù)庫引擎,在運(yùn)行時(shí)被動(dòng)態(tài)地鏈接到VB應(yīng)用程序中。如果程序在不同的工作站上有許多備份,那么每個(gè)備份都將有它自己的Jet數(shù)據(jù)庫引擎在本地的備份。在VB中,通過連接到ODBC數(shù)據(jù)源,如Microsoft SQL Server等,可直接把查詢傳遞給服務(wù)器數(shù)據(jù)庫引擎,就可以創(chuàng)建客戶機(jī)/服務(wù)器應(yīng)用程序。92本地?cái)?shù)據(jù)庫設(shè)計(jì)(ACCESS) VB中創(chuàng)建數(shù)據(jù)庫的途徑主要有:(1)可視化數(shù)據(jù)管理器:使用可視化數(shù)據(jù)管理器,不需要編程就可以創(chuàng)建Jet數(shù)據(jù)庫。(2)DAO:使用VB的DAO部件可以通過編程
8、的方法創(chuàng)建數(shù)據(jù)庫。(3)Microsoft Access:因?yàn)镸icrosoft Access使用了與VB相同的數(shù)據(jù)庫引擎和格式,所以,用Microsoft Access創(chuàng)建的數(shù)據(jù)庫和直接在VB中創(chuàng)建的數(shù)據(jù)庫是一樣的。(4)數(shù)據(jù)庫應(yīng)用程序:像FoxPro、dBase或ODBC客戶機(jī)/服務(wù)器應(yīng)用程序這樣的產(chǎn)品,可以作為外部數(shù)據(jù)庫,VB可通過ISAM或ODBC驅(qū)動(dòng)程序來訪問這些數(shù)據(jù)庫。921可視化數(shù)據(jù)管理器 數(shù)據(jù)管理器(Data Manager)是VB的一個(gè)傳統(tǒng)成員,它可以用于快速地建立數(shù)據(jù)庫結(jié)構(gòu)及數(shù)據(jù)庫內(nèi)容。VB的數(shù)據(jù)管理器實(shí)際上是一個(gè)獨(dú)立的可單獨(dú)運(yùn)行的應(yīng)用程序 Visdata.exe。它隨安裝
9、過程放置在VB目錄中,可以單獨(dú)運(yùn)行,也可以在VB開發(fā)環(huán)境中啟動(dòng)。凡是VB有關(guān)數(shù)據(jù)庫的操作,比如數(shù)據(jù)庫結(jié)構(gòu)的建立、記錄的添加及修改以及用ODBC連接到服務(wù)器端的數(shù)據(jù)庫如SQL Server,都可以利用此工具來完成。 1啟動(dòng)數(shù)據(jù)管理器選擇“外接程序”菜單下的“可視化數(shù)據(jù)管理器”項(xiàng)就可以啟動(dòng)數(shù)據(jù)管理器,打開“VisData”窗口。 2工具欄按鈕 VisData 窗口的工具欄提供了三組共9個(gè)按鈕,為了說明這些按鈕所提供的功能,我們利用VB提供的一個(gè)例子數(shù)據(jù)庫Biblio.mdb來介紹。Biblio.mdb存放在VB98目錄中,單擊“文件”菜單中的“打開數(shù)據(jù)庫”級聯(lián)菜單的“Microsoft Acces
10、s”項(xiàng),即可在出現(xiàn)的對話框中看到Biblio.mdb,選中并打開它,打開后的VisData窗口如圖9.3所示。我們可以看到,在這個(gè)MDI窗口內(nèi)包含兩個(gè)子窗口:數(shù)據(jù)庫窗口和SQL語句窗口。數(shù)據(jù)庫窗口顯示了數(shù)據(jù)庫的結(jié)構(gòu),包括表名、列名、索引。SQL語句窗口可用于輸入一些SQL命令,針對數(shù)據(jù)庫中的表進(jìn)行查詢操作。圖9.3 VisData窗口下面我們對工具欄上的按鈕進(jìn)行簡單的說明。(1)類型群組按鈕工具欄的第一組按鈕,它可以設(shè)置記錄集的訪問方式,具體為: 表類型記錄集按鈕(最左邊的按鈕):當(dāng)以這種方式打開數(shù)據(jù)庫中的數(shù)據(jù)時(shí),所進(jìn)行的增、刪、改、查等操作都是直接更新數(shù)據(jù)庫中的數(shù)據(jù)。 動(dòng)態(tài)集類型記錄集按鈕(
11、中間的按鈕):使用這種方式是先將指定的數(shù)據(jù)打開并讀入到內(nèi)存中,當(dāng)用戶進(jìn)行數(shù)據(jù)編輯操作時(shí),不直接影響數(shù)據(jù)庫中的數(shù)據(jù)。使用這種方式可以加快運(yùn)行速度??煺疹愋陀涗浖?最右邊的拉鈕):以這種類型顯示的數(shù)據(jù)只能讀不能修改,適用于只查詢的情況。(2)數(shù)據(jù)群組按鈕工具欄的中間一組按鈕。用于指定數(shù)據(jù)表中數(shù)據(jù)的顯示方式。先用鼠標(biāo)在要顯示風(fēng)格的按鈕上單擊一下,然后選中某個(gè)要顯示數(shù)據(jù)的數(shù)據(jù)表,單擊鼠標(biāo)右鍵,在彈出的菜單上選擇“打開”,則此表中的數(shù)據(jù)就以所要求的形式顯示出來。(3)事務(wù)方式群組按鈕工具欄的最后一組按鈕用于進(jìn)行事務(wù)處理。922具體實(shí)現(xiàn) 1建立數(shù)據(jù)庫對數(shù)據(jù)管理器的基本功能有了初步的認(rèn)識后,我們看一下如何利
12、用它來建立數(shù)據(jù)庫。我們這里所建立的數(shù)據(jù)庫student.mdb(學(xué)生數(shù)據(jù)庫)中各表如下:基本情況(學(xué)號,姓名,性別,專業(yè),出生年月,照片,備注)學(xué)生成績表(學(xué)號,課程,成績,學(xué)期) (1)建立數(shù)據(jù)庫結(jié)構(gòu) 單擊“文件”菜單中的“新建”命令,在“新建”級聯(lián)菜單中選擇“Microsoft Access”,再選擇“版本7.0 MDB”項(xiàng),在“選擇要?jiǎng)?chuàng)建的Microsoft Access數(shù)據(jù)庫”窗口中選定新建數(shù)據(jù)庫的路徑并輸入數(shù)據(jù)庫名,這里為student.mdb。 這樣一個(gè)新的數(shù)據(jù)庫就建立好了,下面就要在此數(shù)據(jù)庫中添加數(shù)據(jù)表了。 (2)添加數(shù)據(jù)表將鼠標(biāo)移到數(shù)據(jù)庫窗口區(qū)域內(nèi),單擊鼠標(biāo)右鍵,在彈出的菜單中
13、選擇“新建表”命令,出現(xiàn)“表結(jié)構(gòu)”對話框,利用對話框我們可以建立數(shù)據(jù)表的結(jié)構(gòu)。我們首先建立基本情況表。在“表名稱”中輸入“基本情況”,然后添加基本情況表的字段,單擊“添加字段”按鈕,出現(xiàn)“添加字段”對話框,在此對話框中填入“學(xué)號”字段的信息。 按順序輸入“姓名”、“性別”、“專業(yè)”、“出生年月”、“照片”、“備注”字段,然后按“關(guān)閉”按鈕返回到“表結(jié)構(gòu)”對話框中。(3)建立索引建立了表的結(jié)構(gòu)后就可以建立此表的索引了,這樣可以加快檢索速度。單擊“添加索引”按鈕,會(huì)出現(xiàn)如圖9.4所示的對話框,通過此對話框可以將數(shù)據(jù)表的某些字段設(shè)置為索引。在“名稱”字段中輸入索引的名稱,然后從下邊的“索引的字段”列
14、表中選擇作為索引的字段,我們這里選擇的是“學(xué)號”。 圖9.4 設(shè)置索引對話框 如果需要建立多個(gè)索引,則每完成一項(xiàng)索引后,單擊“確定”按鈕,然后繼續(xù)下一個(gè)索引的設(shè)置。設(shè)置完畢后,單擊“關(guān)閉”按鈕返回到“表結(jié)構(gòu)”對話框。2錄入數(shù)據(jù) 數(shù)據(jù)表結(jié)構(gòu)建立好之后,就可以向表中輸入數(shù)據(jù)了,數(shù)據(jù)管理器提供了簡單的數(shù)據(jù)錄入功能。首先在工具欄上選定DBGrid顯示風(fēng)格的按鈕,然后在要錄入數(shù)據(jù)的數(shù)據(jù)表上單擊鼠標(biāo)右鍵,選擇“打開”選項(xiàng),則出現(xiàn)以網(wǎng)格風(fēng)格顯示數(shù)據(jù)的窗口,如果此表中已有數(shù)據(jù),則此時(shí)會(huì)顯示出此表中的全部數(shù)據(jù);若此表中無數(shù)據(jù),則會(huì)顯示出一個(gè)空表。如圖9.5所示。我們這里是以“基本情況”表為例,并且輸入了部分?jǐn)?shù)據(jù)
15、后的情況。 圖9.5 錄入數(shù)據(jù)3建立查詢數(shù)據(jù)表建立好之后,如果數(shù)據(jù)表中已經(jīng)有數(shù)據(jù),就可以對表中的數(shù)據(jù)進(jìn)行有條件或無條件的查詢。VB的數(shù)據(jù)管理器提供了一個(gè)圖形化的設(shè)置查詢條件的窗口查詢生成器。選擇“實(shí)用程序”菜單下的“查詢生成器”,或在數(shù)據(jù)庫窗口區(qū)域單擊鼠標(biāo)右健,然后在彈出的菜單中選擇“新查詢”,即可出現(xiàn)“查詢生成器”對話框,如圖9.6所示。假設(shè)我們要查詢學(xué)號為110002的學(xué)生基本情況,可按下述步驟進(jìn)行:(1)首先選擇要進(jìn)行查詢的數(shù)據(jù)表,單擊表列表框中的“基本情況”表。(2)在“字段名稱”字段中選定“基本情況.學(xué)號”。(3)單擊“運(yùn)算符”列表,選擇“=”。(4)單擊“列出可能的值”按鈕,在“值
16、”字段中輸入110002。(5)單擊“將And加入條件”按鈕,將條件加入“條件”列表框中。(6)在“要顯示的字段”列表框中,選定所需顯示的字段。注意,這里所選的字段就是我們在查詢結(jié)果中要看的字段。(7)單擊“運(yùn)行”按鈕,在隨后出現(xiàn)的VisData對話框中,選擇“否”,并進(jìn)一步選擇“運(yùn)行”,即可看到查詢結(jié)果。(8)單擊“顯示“按鈕,在隨后出現(xiàn)的“SQL Query”窗口中,顯示剛建立的查詢所對應(yīng)的SQL語句。圖9.6 “查詢生成器”對話框93 數(shù)據(jù)控件 Data控件是Visual Basic訪問數(shù)據(jù)庫的一種利器,它能夠利用三種Recordset對象來訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)控件提供有限的不需編程
17、而能訪問現(xiàn)存數(shù)據(jù)庫的功能,允許將Visual Basic的窗體與數(shù)據(jù)庫方便地進(jìn)行連接。要利用數(shù)據(jù)控件返回?cái)?shù)據(jù)庫中記錄的集合,應(yīng)先在窗體上畫出控件,再通過它的三個(gè)基本屬性Connect、DatabaseName和RecordSource設(shè)置要訪問的數(shù)據(jù)資源。931 數(shù)據(jù)控件屬性 1Connect屬性 Connect屬性指定數(shù)據(jù)控件所要連接的數(shù)據(jù)庫類型,Visual Basic默認(rèn)的數(shù)據(jù)庫是Access的MDB文件,此外,也可連接DBF、XLS、ODBC等類型的數(shù)據(jù)庫。 2DatabaseName屬性 DatabaseName屬性指定具體使用的數(shù)據(jù)庫文件名,包括所有的路徑名。如果連接的是單表數(shù)據(jù)庫
18、,則DatabaseName屬性應(yīng)設(shè)置為數(shù)據(jù)庫文件所在的子目錄名,而具體文件名放在RecordSource屬性中。 例如,要連接一個(gè)Microsoft Access的數(shù)據(jù)庫C:Student.mdb,則設(shè)置DatabaseName=”C:Student.mdb",Access數(shù)據(jù)庫的所有表都包含在一個(gè)MDB文件中。如果連接一個(gè)FoxPro數(shù)據(jù)庫如C:VB6stu_fox.dbf,則DatabaseName=”C:VB6”,RecordSource=”stu_fox.dbf”,stu_fox數(shù)據(jù)庫只含有一個(gè)表。 3RecordSource屬性RecordSource確定具體可訪問的數(shù)據(jù)
19、,這些數(shù)據(jù)構(gòu)成記錄集對象Recordset。該屬性值可以是數(shù)據(jù)庫中的單個(gè)表名,個(gè)存儲查詢,也可以是使用SQL查詢語言的一個(gè)查詢字符串。 例如,要指定Student.mdb數(shù)據(jù)庫中的基本情況表,則RecordSource=”基本情況”。而RecordSource=”Select * From 基本情況Where專業(yè)=物理 ”,則表示要訪問基本情況表中所有物理系學(xué)生的數(shù)據(jù)。 4RecordType屬性 RecordType屬性確定記錄集類型。 5EofAction和BofAction屬性當(dāng)記錄指針指向Recordset對象的開始(第一個(gè)記錄前)或結(jié)束(最后一個(gè)記錄后)時(shí),數(shù)據(jù)控件的EofActio
20、n和BofAction屬性的設(shè)置或返回值決定了數(shù)據(jù)控件要采取的操作。屬性的取值如表9.1所示。表9.1 EofAction和BofAction屬性屬性取值操作BofAction0控件重定位到第個(gè)記錄1移過記錄集開始位,定位到一個(gè)無效記錄,觸發(fā)數(shù)據(jù)控件對第一個(gè)記錄的無效事件ValidateEofAction0控件重定位到最后個(gè)記錄1移過記錄集結(jié)束位,定位到一個(gè)無效記錄,觸發(fā)數(shù)據(jù) 控件對最后一個(gè)記錄的無效事件Validate 2向記錄集加入新的空記錄,可以對新記錄進(jìn)行編輯,移動(dòng)記錄指針,新記錄寫入數(shù)據(jù)庫在Visual Basic中,數(shù)據(jù)控件本身不能直接顯示記錄集中的數(shù)據(jù),必須通過能與它綁定的控件來
21、實(shí)現(xiàn)。可與數(shù)據(jù)控件綁定的控件對象有文本框、標(biāo)簽、圖像框、圖形框、列表框、組合框、復(fù)選框、網(wǎng)格、DB列表框、DB組合框、DB網(wǎng)格和OLE容器等控件。要使綁定控件能被數(shù)據(jù)庫約束,必需在設(shè)計(jì)或運(yùn)行時(shí)對這些控件的兩個(gè)屬性進(jìn)行設(shè)置:(1)DataSource屬性DataSource屬性通過指定個(gè)有效的數(shù)據(jù)控件連接到一個(gè)數(shù)據(jù)庫上。(2)DataField屬性DataField屬性設(shè)置數(shù)據(jù)庫有效的字段與綁定控件建立聯(lián)系。綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫三者的關(guān)系如圖9.7所示。綁定控件數(shù)據(jù)庫數(shù)據(jù)控件圖9.7 綁定控件、數(shù)據(jù)控件和數(shù)據(jù)庫三者的關(guān)系 當(dāng)上述控件與數(shù)據(jù)控件綁定后,Visual Basic將當(dāng)前記錄的字段
22、值賦給控件。如果修改了綁定控件內(nèi)的數(shù)據(jù),只要移動(dòng)記錄指針,修改后的數(shù)據(jù)會(huì)自動(dòng)寫入數(shù)據(jù)庫。數(shù)據(jù)控件在裝入數(shù)據(jù)庫時(shí),它把記錄集的第一個(gè)記錄作為當(dāng)前記錄。當(dāng)數(shù)據(jù)控件的BofAction屬性值設(shè)置為2時(shí),當(dāng)記錄指針移過記錄集結(jié)束位,數(shù)據(jù)控件會(huì)自動(dòng)向記錄集加入新的空記錄。例9.1 建立student.mdb數(shù)據(jù)庫,它包含兩個(gè)表:“基本情況”表和“學(xué)生成績表”。參見表9.2和表9.3。表9.2 學(xué)生基本情況表結(jié)構(gòu)字段名類型寬度學(xué)號Text6姓名Text10性別Text2專業(yè)Text10出生年月Date8照片Binary0表9.3 學(xué)生成績表結(jié)構(gòu)字段名類型寬度學(xué)號Text6課程Text10成績Long4學(xué)期
23、Text2用可視化數(shù)據(jù)管理器建立以上設(shè)計(jì)的數(shù)據(jù)庫及其表,表中數(shù)據(jù)可自行錄入。例9.2 設(shè)計(jì)一個(gè)窗體用以顯示建立的student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容?;厩闆r表包含了6個(gè)字段,故需要用6個(gè)綁定控件與之對應(yīng)。這里用一個(gè)圖形框顯示照片和5個(gè)文本框顯示學(xué)號、姓名等數(shù)據(jù)。本例中不需要編寫任何代碼,具體操作步驟如下: (1)參考如圖9.8所示窗體,在窗體上放置1個(gè)數(shù)據(jù)控件,一個(gè)圖形框、5個(gè)文本框和5個(gè)標(biāo)簽控件。5個(gè)標(biāo)簽控件分別給出相關(guān)的提示說明。圖9.8 顯示Student.mdb基本情況表的數(shù)據(jù)(2)將數(shù)據(jù)控件Data1的Connect屬性指定為Access類型,DatabaseName屬性
24、連接數(shù)據(jù)庫Student.mdb,RecordSource屬性設(shè)置為“基本情況”表。(3)圖形框和5個(gè)文本框控件Text1Text5的DataSource屬性都設(shè)置成Data1。通過單擊這些綁定控件的DataField屬性上的“”按鈕,將下拉出基本情況表所含的全部字段,分別選擇與其對應(yīng)的字段照片、學(xué)號、姓名、性別、專業(yè)和出生年月,使之建立約束關(guān)系。 運(yùn)行該工程即可出現(xiàn)圖9.8所示效果。5個(gè)文本框分別顯示基本情況表內(nèi)的字段:學(xué)號、姓名、性別、專業(yè)和出生年月的內(nèi)容,圖形框顯示每個(gè)學(xué)生的照片。 使用數(shù)據(jù)控件對象的4個(gè)箭頭按鈕可遍歷整個(gè)記錄集中的記錄。單擊最左邊的按鈕顯示第l條記錄;單擊其旁邊的按鈕顯
25、示上一條記錄;單擊最右邊的按鈕顯示最后一條記錄;單擊其旁邊的按鈕顯示下條記錄。數(shù)據(jù)控件除了可以瀏覽Recordset對象中的記錄外,同時(shí)還可以編輯數(shù)據(jù)。如果改變了某個(gè)字段的值,只要移動(dòng)記錄,這時(shí)所作的改變存入數(shù)據(jù)庫中。 Visual Basic 6.0提供了幾個(gè)比較復(fù)雜的網(wǎng)格控件,幾乎不用編寫代碼就可以實(shí)現(xiàn)多條記錄數(shù)據(jù)顯示。當(dāng)把數(shù)據(jù)網(wǎng)格控件的DataSource屬性設(shè)置為一個(gè)Data控件時(shí),網(wǎng)格控件會(huì)被自動(dòng)地填充,并且其列標(biāo)題會(huì)用Data控件的記錄集里的數(shù)據(jù)自動(dòng)地設(shè)置。例9.3 用數(shù)據(jù)網(wǎng)格控件MsFlexGrid顯示Student.mdb數(shù)據(jù)庫中基本情況表的內(nèi)容。MsFlexGrid控件不是V
26、isual Basic工具箱內(nèi)的默認(rèn)控件,需要在開發(fā)環(huán)境中選擇“工程|部件”菜單命令,并在隨即出現(xiàn)的對話框中選擇“MicroSoft FlexGrid Control 6.0”選項(xiàng),將其添加到工具箱中。本例所用控件的屬性設(shè)置如表9.4所示。請讀者自行比較不可卷動(dòng)列屬性FixedCols=0與FixedCols=1的區(qū)別。Form啟動(dòng)后自動(dòng)顯示如圖9.9所示窗口。 表9.4 控件屬性默認(rèn)控件名其它屬性設(shè)置Data1DatabaseName=”c:student.mdb”RecordsetType=0RecordSource=”基本情況”MSFlexGrid1DataSource=Data1Fix
27、Cols=0圖9.9使用數(shù)據(jù)網(wǎng)格控件932數(shù)據(jù)控件的事件 1Reposition事件 Reposition事件發(fā)生在一條記錄成為當(dāng)前記錄后,只要改變記錄集的指針使其從一條記錄移到另一條記錄,會(huì)產(chǎn)生Reposition事件。通常,可以在這個(gè)事件中顯示當(dāng)前指針的位置。例如,在例9.2的Data1_Reposition事件中加入如下代碼:Private Sub Data1_Reposition() Data1.Caption = Data1.Recordset.AbsolutePosition + 1End Sub 這里,Recordset為記錄集對象,AbsolutePosition屬性指示當(dāng)前指
28、針值(從0開始)。當(dāng)單擊數(shù)據(jù)控件對象上的箭頭按鈕時(shí),數(shù)據(jù)控件的標(biāo)題區(qū)會(huì)顯示記錄的序號。 2.Validate事件當(dāng)要移動(dòng)記錄指針、修改與刪除記錄前或卸載含有數(shù)據(jù)控件的窗體時(shí)都觸發(fā)Validate事件。Validate事件檢查被數(shù)據(jù)控件綁定的控件內(nèi)的數(shù)據(jù)是否發(fā)生變化。它通過Save參數(shù)(True或False)判斷是否有數(shù)據(jù)發(fā)生變化,Action參數(shù)判斷哪種操作觸發(fā)了Validate事件。參數(shù)可為表9.5中的值。表9.5 Validate事件的Action參數(shù)Action值描述Action值描述0取消對數(shù)據(jù)控件的操作6Update1MoveFirst7Delete2MovePrevious8Fin
29、d3MoveNext9設(shè)置Bookmark4MoveLast10Close5AddNew11卸載窗體 一般可用Validate事件來檢查數(shù)據(jù)的有效性。例如,在例9.2中,如果不允許用戶在數(shù)據(jù)瀏覽時(shí)清空性別數(shù)據(jù),可使用下列代碼:Private Sub Data1_Validate(Action As Integer, Save As Integer) If Save And Len(Trim(Text3) = 0 Then Action = 0 MsgBox " 性別不能為空!"End IfEnd Sub 此代碼檢查被數(shù)據(jù)控件綁定的控件Text3內(nèi)的數(shù)據(jù)是否被清空。如果Tex
30、t3內(nèi)的數(shù)據(jù)發(fā)生變化,則Save參數(shù)返回True,若性別對應(yīng)的文本框Text3被置空,則通過Action=0取消對數(shù)據(jù)控件的操作。933 數(shù)據(jù)控件的常用方法 數(shù)據(jù)控件的內(nèi)置功能很多,可以在代碼中用數(shù)據(jù)控件的方法訪問這些屬性。1Refresh方法如果在設(shè)計(jì)狀態(tài)沒有為打開數(shù)據(jù)庫控件的有關(guān)屬性全部賦值,或當(dāng)RecordSource在運(yùn)行時(shí)被改變后,必須使用數(shù)據(jù)控件的Refresh方法激活這些變化。在多用戶環(huán)境下,當(dāng)其他用戶同時(shí)訪問同一數(shù)據(jù)庫和表時(shí),Refresh方法將使各用戶對數(shù)據(jù)庫的操作有效。例如:將例9.2的設(shè)計(jì)參數(shù)改用代碼實(shí)現(xiàn),使所連接數(shù)據(jù)庫所在的文件夾可隨程序而變化:Private Sub
31、Form_Load( ) Dim mpath As String Mpath=App.Path 獲取當(dāng)前路徑 If Right(mpath,1)<>”/” Then mpath=mpath+”/” Data1.DatabaseName=mpath+”Student.mdb” 連接數(shù)據(jù)庫 Data1.RecordSource=”基本情況” 構(gòu)成記錄集對象 Data1.Refresh 激活數(shù)據(jù)控件End Sub2UpdateControls方法UpdateControls方法可以將數(shù)據(jù)從數(shù)據(jù)庫中重新讀到被數(shù)據(jù)控件綁定的控件內(nèi)。因而我們可使用UpdateControls方法終止用戶對綁定
32、控件內(nèi)數(shù)據(jù)的修改。 例如:將代碼Data1.UpdateControts放在一個(gè)命令按鈕的Click事件中,就可以實(shí)現(xiàn)對記錄修改的功能。 3. UpdateRecord方法當(dāng)對綁定控件內(nèi)的數(shù)據(jù)修改后,數(shù)據(jù)控件需要移動(dòng)記錄集的指針才能保存修改。如果使用UpdateRecord方法,可強(qiáng)制數(shù)據(jù)控件將綁定控件內(nèi)的數(shù)據(jù)寫入到數(shù)據(jù)庫中,而不再觸發(fā)Validate事件。在代碼中可以用該方法來確認(rèn)修改。934 記錄集的屬性與方法 由RecordSource確定的具體可訪問的數(shù)據(jù)構(gòu)成的記錄集Recordset也是一個(gè)對象,因而,它和其他對象一樣具有屬性和方法。下面列出記錄集常用的屬性和方法。1Absolute
33、Position屬性AbsolutePosition返回當(dāng)前指針值,如果是第1條記錄,其值為0,該屬性為只讀屬性。2Bof和Eof的屬性 Bof判定記錄指針是否在首記錄之前,若Bof為True,則當(dāng)前位置位于記錄集的第1條記錄之前。與此類似,Eof判定記錄指針是否在末記錄之后。3Bookmark屬性 Bookmark屬性的值采用字符串類型,用于設(shè)置或返回當(dāng)前指針的標(biāo)簽。在程序中可以使用Bookmark屬性重定位記錄集的指針,但不能使用AbsolutePostion屬性。4Nomatch屬性 在記錄集中進(jìn)行查找時(shí),如果找到相匹配的記錄,則Recordset的NoMatch屬性為False,否則為
34、True。該屬性常與Bookmark屬性一起使用。5RecordCount屬性 RecordCount屬性對Recordset對象中的記錄計(jì)數(shù),該屬性為只讀屬性。在多用戶環(huán)境下,RecordCount屬性值可能不準(zhǔn)確,為了獲得準(zhǔn)確值,在讀取RecordCount屬性值之前,可使用MoveLast方法將記錄指針移至最后一條記錄上。6Move方法 使用Move方法可代替對數(shù)據(jù)控件對象的4個(gè)箭頭按鈕的操作遍歷整個(gè)記錄集。5種Move方法是: (1)MoveFirst方法:移至第1條記錄。 (2)MoveLast方法:移至最后一條記錄。 (3)MoveNext方法:移至下一條記錄。(4)MovePre
35、vious方法:移至上一條記錄。(5)Move n 方法:向前或向后移n條記錄,n為指定的數(shù)值。例9.4 在窗體上用4個(gè)命令按鈕代替例9.2數(shù)據(jù)控件對象的4個(gè)箭頭按鈕的操作。在例9.2的基礎(chǔ)上,窗體上增加4個(gè)命令按鈕,將數(shù)據(jù)控件的Visible屬性設(shè)置為False,如圖9.10所示。通過對4個(gè)命令按鈕的編程代替對數(shù)據(jù)控件對象的4個(gè)箭頭按鈕的操作。圖9.10 用按鈕代替數(shù)據(jù)控件對象的箭頭按鈕命令按鈕Command1_Click事件移至第1條記錄,代碼如下:Private Sub Command1_Click()End Sub命令按鈕Command4_Click事件移至最后一條記錄,代碼如下:Pr
36、ivate Sub Command4_Click()End Sub 另外兩個(gè)按鈕的代碼需要考慮Recordset對象的邊界的首尾,如果越界,則用MoveFirst方法定位到第1條記錄或用MoveLast方法定位到最后一條記錄。程序代碼如下:Private Sub Command2_Click()End SubPrivate Sub Command3_Click()End Sub7Find方法使用Find方法可在指定的Dynaset或Snapshot類型的Recordset對象中查找與指定條件相符的一條記錄,并使之成為當(dāng)前記錄。4種Find方法是: (1)FindFirst方法:從記錄集的開始查
37、找滿足條件的第1條記錄。 (2)FindLast方法:從記錄集的尾部向前查找滿足條件的第l條記錄。 (3)FindNext方法:從當(dāng)前記錄開始查找滿足條件的下一條記錄。 (4)FindPrevious方法:從當(dāng)前記錄開始查找滿足條件的上一條記錄。4種Find方法的語法格式相同:數(shù)據(jù)集合.Find方法 條件 搜索條件是一個(gè)指定字段與常量關(guān)系的字符串表達(dá)式。在構(gòu)造表達(dá)式時(shí),除了用普通的關(guān)系運(yùn)算外,還可以用Like運(yùn)算符。 例如:語句 “Data1.Recordset.FindFirst 專業(yè)=物理”表示在由Data1數(shù)據(jù)控件所連接的數(shù)據(jù)庫Student.mdb的記錄集內(nèi)查找專業(yè)為“物理”的第l條記
38、錄。這里,“專業(yè)”為數(shù)據(jù)庫Student記錄集中的字段名,在該字段中存放專業(yè)名稱信息。要想查找下一條符合條件的記錄,可繼續(xù)使用語句:”Data1.Recordset.FindNext 專業(yè)=物理”。 又例如:要在記錄集內(nèi)查找專業(yè)名稱中帶有“建”字的專業(yè): Data1.Recordset.FindFirst 專業(yè) Like ”*建*”字符串“*建*”匹配字段專業(yè)中帶有“建”字字樣的所有專業(yè)名稱字符串。 需要指出的是Find方法在找不到相匹配的記錄時(shí),當(dāng)前記錄保持在查找的始發(fā)處,NoMatch屬性為True。如果Find方法找到相匹配的記錄,則記錄定位到該記錄,Recordset的NoMatch屬
39、性為False。8Seek方法 使用Seek方法必須打開表的索引,它在Table表中查找與指定索引規(guī)則相符的第1條記錄,并使之成為當(dāng)前記錄。其語法格式為: 數(shù)據(jù)表對象.seek comparison,keyl,key2 Seek允許接受多個(gè)參數(shù),第1個(gè)是比較運(yùn)算符comparison,Seek方法中可用的比較運(yùn)算符有=、>=、>、<>、<、<=等。 在使用Seek方法定位記錄時(shí),必須通過Index屬性設(shè)置索引。若在記錄集中多次使用同樣的Seek方法(參數(shù)相同),那么找到的總是同一條記錄。 例如:假設(shè)數(shù)據(jù)庫Student內(nèi)基本情況表的索引字段為學(xué)號,滿足學(xué)號字
40、段值大于等于110001的第1條記錄可使用以下程序代碼:Data1.RecordsetType = 0 設(shè)置記錄集類型為TableData1.RecordSource = "基本情況" 打開基本情況表單Data1.RefreshData1.Recordset.Index = "jbqk_no" 打開名稱為jbqk_no的索引Data1.Recordset.Seek ">=", "110001"935 數(shù)據(jù)庫記錄的增、刪、改操作 Data控件是瀏覽表格并編輯表格的好工具,但怎么輸入新信息或刪除現(xiàn)有記錄呢?這需要
41、編寫幾行代碼,否則無法在Data控件上完成數(shù)據(jù)輸入。數(shù)據(jù)庫記錄的增、刪、改操作需要使用AddNew、Delete、Edit、Update和Refresh方法。它們的語法格式為: 數(shù)據(jù)控件.記錄集.方法名1增加記錄AddNew方法在記錄集中增加新記錄。增加記錄的步驟為:(1)調(diào)用AddNew方法。 (2)給各字段賦值。給字段賦值格式為:Recordset.Fields(”字段名”)=值。 (3)調(diào)用Update方法,確定所做的添加,將緩沖區(qū)內(nèi)的數(shù)據(jù)寫入數(shù)據(jù)庫。 注意:如果使用AddNew方法添加新的記錄,但是沒有使用Update方法而移動(dòng)到其他記錄,或者關(guān)閉記錄集,那么所做的輸入將全部丟失,而且
42、沒有任何警告。當(dāng)調(diào)用Update方法寫入記錄后,記錄指針自動(dòng)返回到添加新記錄前的位置上,而不顯示新記錄。為此,可在調(diào)用Update方法后,使用MoveLast方法將記錄指針再次移到新記錄上。2刪除記錄要從記錄集中刪除記錄的操作分為三步:(1)定位被刪除的記錄使之成為當(dāng)前記錄。(2)調(diào)用Delete方法。(3)移動(dòng)記錄指針。 注意:在使用Delete方法時(shí),當(dāng)前記錄立即刪除,不加任何的警告或者提示。刪除一條記錄后,被數(shù)據(jù)庫所約束的綁定控件仍舊顯示該記錄的內(nèi)容。因此,你必須移動(dòng)記錄指針?biāo)⑿陆壎丶悴捎靡浦料乱挥涗浀奶幚矸椒?。在移?dòng)記錄指針后,應(yīng)該檢查Eof屬性。3編輯記錄 數(shù)據(jù)控件自動(dòng)提供了修
43、改現(xiàn)有記錄的能力,當(dāng)直接改變被數(shù)據(jù)庫所約束的綁定控件的內(nèi)容后,需單擊數(shù)據(jù)控件對象的任一箭頭按鈕來改變當(dāng)前記錄,確定所做的修改。也可通過程序代碼來修改記錄,使用程序代碼修改當(dāng)前記錄的步驟為: (1)調(diào)用Edit方法。 (2)給各字段賦值。 (3)調(diào)用Update方法,確定所做的修改。 注意:如果要放棄對數(shù)據(jù)的所有修改,可用Refresh方法,重讀數(shù)據(jù)庫,沒有調(diào)用Update方法,數(shù)據(jù)的修改沒有寫入數(shù)據(jù)庫,所以這樣的記錄會(huì)在刷新記錄集時(shí)丟失。例9.5 在例9.2的基礎(chǔ)上加入“新增”、“刪除”、“修改”、“放棄”和“查找”鈕,通過對5個(gè)按紐的編程建立增、刪、改、查功能,如圖9.11所示。圖9.11
44、編程建立增、刪、改、查功能 Command1_Click事件的功能根據(jù)按鈕提示文字調(diào)用AddNew方法或Update方法,并且控制具他4個(gè)按鈕的可用性。當(dāng)按鈕提示為“新增”時(shí)調(diào)用AddNew方法,并將提示文字改為“確認(rèn)”,同時(shí)使“刪除”按鈕Command2、“修改”按鈕Command3和“查找”按鈕Command5不可用,而使“放棄”按鈕Command4可用。新增記錄后,需再次單擊Command1調(diào)用Update方法確認(rèn)添加的記錄,再將提示文字再改為“新增”,并使“刪除”、“修改”和“查找”按鈕可用,而使“放棄”按鈕不可用。程序中出現(xiàn)的On Error Resume Next語句是Visual
45、 Basic提供的錯(cuò)誤捕獲語句。該語句表示在程序運(yùn)行時(shí)發(fā)生錯(cuò)誤,忽略錯(cuò)誤行,繼續(xù)執(zhí)行下一語句。Private Sub Command1_Click() On Error Resume Next Command2.Enabled = Not Command2.Enabled Command3.Enabled = Not Command3.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled If Command1.Caption = "新增" Then C
46、ommand1.Caption = "確認(rèn)" Text1.SetFocus Else Command1.Caption = "新增" End IfEnd Sub 命令按鈕Command2_Click事件調(diào)用方法刪除當(dāng)前記錄。當(dāng)記錄集中的記錄全部被刪除后,再執(zhí)行Move語句將發(fā)生錯(cuò)誤,這時(shí)由On Error Resume Next語句處理錯(cuò)誤。Private Sub Command2_Click() On Error Resume NextEnd Sub 命令按鈕Command3_Click事件的編程思路與Command1_Click事件類似,根據(jù)按鈕提示
47、文字調(diào)用Edit方法進(jìn)入編輯狀態(tài)或調(diào)用Update方法將修改后的數(shù)據(jù)寫入到數(shù)據(jù)庫,并控制其他3個(gè)按鈕的可用性,代碼如下:Private Sub Command3_Click() On Error Resume Next Command1.Enabled = Not Command1.Enabled Command2.Enabled = Not Command2.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled If Command3.Caption = "修改
48、" Then Command3.Caption = "確認(rèn)" Text1.SetFocus Else Command3.Caption = "修改" End IfEnd Sub命令按鈕Command4_Click事件使用UpdateControls方法放棄操作,代碼如下:Private Sub Command4_Click() On Error Resume Next Command1.Caption = "新增" Command3.Caption = "修改" Command1.Enabled = Tr
49、ue Command2.Enabled = True Command3.Enabled = True Command4.Enabled = False Command5.Enabled = True Data1.UpdateControlsEnd Sub命令按鈕Command5_Click事件根據(jù)輸入專業(yè)使用SQL語句查找記錄,代碼如下:Private Sub Command5_Click()Dim mzy As String mzy = InputBox$("請輸入專業(yè)", "查找窗") Data1.RecordSource = "Selec
50、t * From 基本情況 Where 專業(yè) = '" & mzy & "'" Data1.Refresh If Data1.Recordset.EOF Then MsgBox "無此專業(yè)!", , "提示" Data1.RecordSource = "基本情況" Data1.Refresh End IfEnd Sub 上面的代碼給出了數(shù)據(jù)表內(nèi)數(shù)據(jù)處理的基本方法。需要注意的是:對于一條新記錄或編輯過的記錄必須要保證數(shù)據(jù)的完整性,這可通過Data1_Validate事件過濾無
51、效記錄。例如,下面的代碼對學(xué)號字段進(jìn)行測試,如果學(xué)號為空則輸入無效。在本例中被學(xué)號字段所約束的綁定控件是Text1,可用Text1.DataChanged屬性檢測Text1控件所對應(yīng)的當(dāng)前記錄中的字段值的內(nèi)容是否發(fā)生了變化,Action=6表示Update操作(參見表9.5)。此外,使用數(shù)據(jù)控件對象的任一箭頭按鈕來改變當(dāng)前記錄,也可確定所做添加的新記錄或?qū)σ延杏涗浀男薷模珹ction取值14分別對應(yīng)單擊其中一個(gè)箭頭按鈕的操作,當(dāng)單擊數(shù)據(jù)控件的箭頭按鈕時(shí)也觸發(fā)Validate事件。Private Sub Data1_Validate(Action As Integer, Save As Inte
52、ger) If Text1.Text = "" And (Action = 6 Or Text1.DataChanged) Then MsgBox "數(shù)據(jù)不完整,必須要有學(xué)號!" Data1.UpdateControls End If If Action >= 1 And Action <= 4 Then Command1.Caption = "新增" Command3.Caption = "修改" Command1.Enabled = True Command2.Enabled = True Comm
53、and3.Enabled = True Command4.Enabled = False End IfEnd Sub關(guān)于照片的輸入,較簡單的方法是通過剪貼板將照片圖片復(fù)制到Picture1控件。在輸入照片時(shí),事先需要用掃描儀將照片掃描到內(nèi)存或形成圖形文件,通過一個(gè)圖片編輯程序?qū)⒄掌b入剪貼板,然后再從剪貼板復(fù)制到Picture1控件。本例通過Picture1_DblClick事件來完成剪貼板到Picture1控件的復(fù)制,當(dāng)移動(dòng)記錄指針時(shí),Picture1控件內(nèi)的照片存入數(shù)據(jù)庫,此外,也可以使用OLE拖放技術(shù)將照片圖形文件拖放到Picture1控件或其他圖形容器內(nèi)。Private Sub Pic
54、ture1_DblClick()Picture1.Picture = Clipboard.GetDataEnd Sub94 ODBC941 ODBC概述在傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)中,每個(gè)數(shù)據(jù)庫管理系統(tǒng)都有自己的應(yīng)用程序開發(fā)接口(API),應(yīng)用程序使用數(shù)據(jù)庫系統(tǒng)所提供的專用開發(fā)工具(如嵌入式SQL語言)進(jìn)行開發(fā),這樣的應(yīng)用程序只能運(yùn)行在特定的數(shù)據(jù)庫系統(tǒng)環(huán)境下,適應(yīng)性和可移植性比較差。在用戶硬件平臺或操作系統(tǒng)發(fā)生變化時(shí),應(yīng)用程序需要重新編寫。嵌入式SQL語言的另一個(gè)缺點(diǎn)是它只能存取某種特定的數(shù)據(jù)庫系統(tǒng),因此一個(gè)應(yīng)用程序只能連接同類的DBMS,而無法同時(shí)訪問多個(gè)不同的DBMS,而在實(shí)際應(yīng)用中通常是需要同
55、時(shí)訪問多個(gè)不同的DBMS的。例如,在一個(gè)單位中,財(cái)務(wù)、生產(chǎn)和技術(shù)等部門常根據(jù)自身專業(yè)的特點(diǎn)選擇不同的DBMS,而建立企業(yè)級管理信息系統(tǒng)時(shí),需要同時(shí)訪問各個(gè)部門的數(shù)據(jù)庫。這種情況下傳統(tǒng)的數(shù)據(jù)庫應(yīng)用程序開發(fā)方法就難以實(shí)現(xiàn)。為了解決這些問題,微軟公司開發(fā)了ODBC(Open DataBase Connectivity,即開放數(shù)據(jù)庫互連)。ODBC 是Microsoft公司開發(fā)的一套開放數(shù)據(jù)庫系統(tǒng)應(yīng)用程序接口規(guī)范,目前它已成為一種工業(yè)標(biāo)準(zhǔn),它提供了統(tǒng)一的數(shù)據(jù)庫應(yīng)用編程接口(API),為應(yīng)用程序提供了一套高層調(diào)用接口規(guī)范和基于動(dòng)態(tài)連接庫的運(yùn)行支持環(huán)境。使用ODBC開發(fā)數(shù)據(jù)庫應(yīng)用時(shí),應(yīng)用程序調(diào)用的是標(biāo)準(zhǔn)的ODBC函數(shù)和SQL語句,數(shù)據(jù)庫底層操作由各個(gè)數(shù)據(jù)庫的驅(qū)動(dòng)程序完成。因此應(yīng)用程序有很好的適應(yīng)性和可移植性,并且具備了同時(shí)訪問多種數(shù)據(jù)庫管理系統(tǒng)的能力,從而徹底克服了傳統(tǒng)數(shù)據(jù)庫應(yīng)用程序的缺陷。942 ODBC體系結(jié)構(gòu)ODBC驅(qū)動(dòng)程序類似于Windo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)科護(hù)理循環(huán)+泌尿系統(tǒng)鞏固試題
- 流動(dòng)人口協(xié)管員工作總結(jié)
- 內(nèi)丘縣“醫(yī)院感染管理基層行”活動(dòng)實(shí)施方案
- 2025年四川省愛眾能源工程有限公司對外招聘考試筆試試題(含答案)
- 2025年安全生產(chǎn)個(gè)人述職報(bào)告范本(三)
- 體育產(chǎn)業(yè)廠房轉(zhuǎn)租及賽事運(yùn)營合同
- 美食廣場餐飲托管服務(wù)合同樣本
- 高速鐵路沿線廠房拆遷補(bǔ)償及搬遷合同
- 車間租賃及智能化生產(chǎn)系統(tǒng)建設(shè)協(xié)議
- 銀行承兌匯票財(cái)務(wù)擔(dān)保合同賬務(wù)處理規(guī)定
- 聲發(fā)射技術(shù)裂紋監(jiān)測
- 社會(huì)責(zé)任工作管理制度
- 機(jī)械CAD-CAM技術(shù)課件
- 2024-2025學(xué)年廣東省新部編版七年級歷史第二學(xué)期期末模擬卷(含答案)
- 2025-2030年環(huán)氧丙烷產(chǎn)業(yè)市場深度調(diào)研及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 2024年河南省澠池縣衛(wèi)生局公開招聘試題帶答案
- 2025年新疆維吾爾自治區(qū)公務(wù)員錄用考試面試真題試卷:無領(lǐng)導(dǎo)小組討論邊疆穩(wěn)定與發(fā)展試題
- 預(yù)防新生兒嗆奶指南
- 中國當(dāng)代文學(xué)專題-003-國開機(jī)考復(fù)習(xí)資料
- 10kV配電變壓器缺相運(yùn)行分析
- YY_T 0681.2-2010無菌醫(yī)療器械包裝試驗(yàn)方法 第2部分:軟性屏障材料的密封強(qiáng)度
評論
0/150
提交評論