




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第十八章 利用dbExpress開發(fā) 資料庫程式dbExpress為C+ Builder 6後才新增加的資料庫連結方式,透過一系列輕量級的驅動程式來達到和資料庫快速連結的目的,而最主要的目的則是為了和Kylix相容。Kylix為Borland推出的Linux平臺下程式開發(fā)軟體,透過C+或Object Pascal語法的使用讓C+ Builder/Delphi的使用者能快速的開發(fā)或移植程式到Linux平臺上,做到Write Once, Run Everywhere的最終目標,所以dbExpress的推出主要在克服BDE、ADO不相容於Linux的缺點,此外,dbExpress連結方式也因為具有免
2、事先設定、攜帶容易、速度快和消耗資源少等優(yōu)點而成為Borland公司目前全力支援的連結架構。大綱18-1dbExpress連結簡介18-2SQLConnection元件18-3SQLDataSet元件18-4SQLQeury元件18-5SQLTable元件18-6SQLMonitor元件的使用18-1. dbExpress連結簡介 dbExpress因為在效能和使用上都有不錯的表現(xiàn)而成為Borland公司目前全力支持的連結方式,不論是Delphi、Kylix和C+ Builder 都可以看到該連結元件的蹤影,而對於要開發(fā)能適用於Windows和Linux兩個作業(yè)系統(tǒng)下資料庫程式的程式設計師來說
3、,使用dbExpress更是目前唯一可行的方式,和傳統(tǒng)的BDE連結方式相比,該架構最大的不同在於採用單向指標和取消了緩衝記憶體的使用,而非過去的靠緩衝儲存器輔助來實作雙向指標,雖然換來效能上的提昇,但也相對了增加一些使用上的限制,底下為該架構和傳統(tǒng)BDE所不同的地方1. 只支援資料集合中的First和Next方法。因為單向指標的限制導致指標在資料集合內只能單向的往下移動和回到第一筆資料的位置,而無法像雙向指標可以自由的往上或往下移動指標。 18-1. dbExpress連結簡介2. 沒有對編輯模式的內建支援。因為過去對資料集合內記錄的修改(Edit方法)需要額外緩衝記憶體的支援來儲存這些修改動
4、作,但是由於dbExpress本身並沒有使用到緩衝記憶體,所以自然無法執(zhí)行過去的編輯模式,而解決方式則是使用SQL語法中的Update來直接進行修改的動作,或是透過其他使用緩衝記憶體的元件來輔助,如連結資料集合至ClientDataSet元件。3. 不支援資料集合內的Filter屬性,也就是說無法對傳回來的資料集合設定過濾條件,因為過濾器的使用同樣也需要緩衝記憶體的支援,所以當你在dbExpress連結方式中使用Filter屬性將會觸發(fā)例外處理的產生,解決的方式是使用SQL語法直接對遠端資料庫下過濾條件的設定,而非等資料集合已經(jīng)形成後再進行篩選的動作。4. 不支援Lookup欄位的設定,因為L
5、ookup欄位同樣需要使用緩衝記憶體來儲存相關的欄位值。 18-1. dbExpress連結簡介綜合以上的使用限制可以知道,所有用到緩衝記憶體的資料集合屬性和方法在dbExpress下是不被允許的,所以對於需要緩衝記憶體輔助的感知元件當然也無法使用,包括最為熟知的DBGrid、DBLookupListBox和DBLookupComboBox等元件,不過,如果不考慮這些限制的話,dbExpress因為單向指標的使用而成為C+ Builder下最快速的資料連結機制,且在使用和安裝部署上亦是最為簡單的。 所有dbExpress元件皆位在元件樣版內的dbExpress頁次中,功能不外乎和資料庫相連、對
6、資料庫進行存取和傳回指向資料集合的單向指標。18-1. dbExpress連結簡介 簡略介紹各元件功能如下: SQLConnection元件 負責使用dbExpress連結方式和資料庫建立連結的管道,如果讀者熟悉ADO元件的話,該元件的功能類似ADOConnection。 SQLDataSet元件 C+ Builder提供的四個單向資料集合元件之一,同時也是四個之中最一般化的元件,不論有無回傳資料集合的指令皆可透過CommandText屬性的指定加以執(zhí)行,相當類似於ADODataSet元件的使用方式。 SQLTable元件 讀取表格為主的資料集合元件,透過指定表格名稱的方式來讀取資料,而回傳的
7、資料集合僅能透過First和Next方法進行檢視。 18-1. dbExpress連結簡介 SQLQuery元件 查詢形式的資料集合元件,也就是完全透過SQL語法的方式對資料庫下執(zhí)行指令,包括回傳資料集合的Select指令或是沒有回傳集合的DDL語法。 SQLStoredProc元件 該元件的功能在於執(zhí)行資料庫內定義的Stored Procedure,並接收Stored Procedure所傳回來的資料集合或執(zhí)行結果。 18-2. SQLConnection元件SQLConnection元件負責和資料庫間的連結建立,與BDE連結不同的是:它不需要BDE Administrator之類工具的資料
8、庫連結設定,而採用和ADO相似的設定方式,至於詳細的設定步驟則分為1.驅動程式的指定驅動程式的指定和2.參數(shù)參數(shù)的傳遞的傳遞1. 驅動程式的指定:使用dbExpress連結所需要的資料庫驅動程式分為兩個檔案:一個是dbExpress本身的驅動程式,為一個動態(tài)連結函式庫的DLL檔,根據(jù)使用的資料庫不同而對應到不同的DLL檔,預設提供INTERBASE、ORACLE、MYSQL和DB2四種資料庫的驅動程式版本,對應的DLL檔案分別為dbexpint.dll、dbexpora.dll、dbexpmys.dll和dbexpdb2.dll另外一個則為資料庫廠商對於Client端提供的動態(tài)聯(lián)結函式庫(DL
9、L),也是隨著不同廠商而不同。不過,使用者其實並不需要在意究竟是使用了上述的哪兩個DLL檔,因為當我們設定SQLConnection的DriverName屬性時,SQLConnection會根據(jù)dbxdrivers.ini自動選擇對應的DLL檔來使用。 18-2. SQLConnection元件2.參數(shù)的傳遞指定了驅動程式後,便需要透過參數(shù)的傳遞設定連結的資料庫,這些常用的參數(shù)包括Database(資料庫名稱)、User Name(使用者名稱)、Password(登入密碼)、Host Name(連線主機)等,不同資料庫的參數(shù)設定內容不盡相同。為了設定方便,當指定DriverName屬性後,SQ
10、LConnection會根據(jù)DriverName的設定值提供對應的參數(shù)列表供設定者參考。這些參數(shù)中,以Database參數(shù)為最基本且必備的設定,該Database參數(shù)值來源隨資料庫的種類而不盡相同,像INTERBASE的Database便是根據(jù).gdb檔案的名稱來決定,Oracle則根據(jù)TNSNames.ora中的設定,至於DB2則為Client端的節(jié)點名稱(node name)。上述的設定還可透過連結編輯器連結編輯器的輔助來省去我們設定的麻煩,如下一小節(jié)中所述。 18-2-1. 連結編輯器的使用雙擊表單上的SQLConnection元件開啟連結編輯器的設定畫面,如右圖所示,在預設的畫面中,會
11、提供五個代表不同資料庫的連結名稱(Connection Name)供使用者直接進行設定。在此,我們選擇建立一個新的連結名稱來介紹連結編輯器的使用方式,請點選游標所指的按鈕以建立一個新的連結。 18-2-1. 連結編輯器的使用按下【+】的按鈕後便會彈出如下圖所示的對話框,在對話框中要求設定的資料庫的驅動程式,即連結的資料庫類型,共有 DB2、INTERBASE、Informin、MySQL、Oracle五種不同的驅動程式可供選擇,除此,在Connection Name輸入框中輸入該連結的識別名稱,這裡我們以MySQL為示範, Connection Name為Example。 選擇驅動程式類型18
12、-2-1. 連結編輯器的使用按下【OK】按鈕後對該連結進行細步設定,畫面如右圖所示:依照實際連結的MySQL資料庫設定 HostName(MySQL主機位置) Database(連結資料庫) User_Name(使用者名稱) Password(密碼)四個屬性值接著透過物件檢視器設定SQLConnection元件的VendorLib屬性值至libMySQL.dll路徑所在,如右圖所示: 說明:一般安裝資料庫所附的Client端軟體後,VendorLib屬性值的路徑會自動連結而不需額外指定。 18-2-1. 連結編輯器的使用回到連結設定畫面按下【】按鈕測試設定是否正確,登入資料庫後彈出如下圖畫面即
13、表示連結成功。 18-2-2. SQLConnection的使用在完成使用連結編輯器對資料庫的連結設定後,透過SQLConnection連結資料庫便成為一個簡單的工作了,而設定SQLConnection最重要的部份就在於ConnectionName屬性值的指定,下面為該元件使用的基本三步驟。1. 透過物件檢視器設定SQLConnection元件的ConnectionName屬性以指定連結的資料庫,至於ConnectionName屬性的設定來源則取決於連結編輯器中的紀錄。當ConnectionName屬性值選定後,DriverNmae、LibraryName和VendorLib三個屬性值會自動隨
14、著ConnectionName設定而變動,並對應到之前在連結編輯器中的設定,因此,只要設定好ConnectionName屬性值就代表完成了該元件的大部分設定,尤其是連結驅動程式的指定上。18-2-2. SQLConnection的使用2. 透過LoginPrompt屬性的設定來控制密碼對話框的出現(xiàn)與否;倘若ConnectionName內容已經(jīng)紀錄了使用者名稱和密碼的資訊,則可以設定LoginPrompt屬性為False以關閉密碼對話框,省去每次SQLConnection元件和資料庫連結時彈出密碼框的麻煩。3. 設定Connected屬性值為True和遠端資料庫建立連線,至於KeepConnec
15、tion屬性則設定該元件和資料庫之間是否永遠保持連結狀態(tài),縱使沒有其他SQLTable、SQLDataSet或SQLQuery元件透過該元件和資料庫連結。18-2-3. SQLConnection常用屬性屬性功能ActiveStatements 傳回目前透過該連結所執(zhí)行的指令數(shù)目,也就是所有透過SQLConnection和資料庫連結的SQLDataSet、SQLTable和SQLQuery等元件目前執(zhí)行的指令數(shù)目,包括Prepared、Open和Execute,而這些指令的生命周期必須等到對應的指令下達或是執(zhí)行動作完畢後才結束,像Open方法建立的連結就必須等到Close方法的呼叫後才結束,而
16、Prepared=True的動作也在Prepared=False後才結束作用。 MaxStmtsPerConn該屬性傳回資料庫對每個連結在同一時間所允許的最大執(zhí)行指令數(shù)目,當回傳值為0時表示該資料庫並沒有限制連結所能執(zhí)行的指令數(shù)目;大於0則限制了指令執(zhí)行的數(shù)目,例如回傳值為2,就代表只允許每個連結在同時間執(zhí)行兩個指令,另外,該屬性只有在Connected=True時才有作用。 18-2-3. SQLConnection常用屬性屬性功能AutoClone 設定當ActiveStatements屬性值大於MaxStmtsPerConn時,是否要自動複製一個SQLConnection連結以解決執(zhí)行指
17、令數(shù)目過多的問題,若AutoClone為True,表示會自動複製一個相同屬性值的SQLConnection元件來解決過多指令無法同時執(zhí)行的限制;AutoClone為False時則產生例外處理告知執(zhí)行指令過多,當然,還可透過CloneConnection方法的呼叫來複製一個連線,預設值為True。 ConnectedConnectionNameConnectionName設定SQLConnection元件所使用的連結名稱,Connected屬性則決定是否開啟和資料庫的連結。 18-2-3. SQLConnection常用屬性屬性功能ConnectionState 透過不同的屬性值回傳可以了解SQ
18、LConnection元件目前的連結狀態(tài),屬性值如下說明: csStateClosed:Connected屬性值為False,沒有和資料庫連結。 csStateOpen:Connected屬性值為True,和資料庫連結中。 csStateConnecting:正在建立連結,但是尚未完成連結的動作。 csStateExecuting:已經(jīng)傳遞SQL指令給遠端的資料庫,且正在執(zhí)行中。 csStateFetching:正在從資料庫抓取資料。 csStateDisconnecting:正在關閉連結,不過尚未完成關閉動作。 18-2-3. SQLConnection常用屬性屬性功能DataSetCoun
19、t在SQLConnection元件中,很多資料集合元件如SQLDataSet均會透過該元件和資料庫相連,而DataSetCount屬性則用來傳回這些相連的資料集合元件中Active屬性值為True的個數(shù),透過這個數(shù)目可以知道哪些元件正在和資料庫相連。 DataSets這是一個記錄透過SQLConnection和資料庫相連且Active屬性值為True的資料集合陣列,搭配DataSetCount的使用,我們可以對所有Active為True的資料集合元件進行處理的動作。 LoginPrompt這是一個記錄透過SQLConnection和資料庫相連且Active屬性值為True的資料集合陣列,搭配D
20、ataSetCount的使用,我們可以對所有Active為True的資料集合元件進行處理的動作。 18-2-4. SQLConnection常用方法 CloneConnection 此方法能產生一個相同的SQLConnection元件,當AutoClone屬性設為False時,可用此方法手動建立一個新的SQLConnection。 CloseDataSets 呼叫SQLConnection元件的CloseDataSets方法能關閉所有透過該SQLConnection元件連結到資料庫的資料集合元件,但不影響SQLConnection元件本身和資料庫之間的連線。 18-2-4. SQLConnec
21、tion常用方法 Execute SQLConnection元件除了建立連線外,亦可以直接對資料庫進行指令執(zhí)行的動作,而這SQL語法的指令以不會回傳資料集合的DDL最為適合,因為SQLConnection本身並非資料集合元件,至於使用格式如下所示: SQL用來指定所要執(zhí)行的SQL語法。 Params設定SQL語法內使用的變數(shù)值。 當SQL語法回傳資料集合時,透過ResultSet來記錄回傳集合的指標。不過建議讀者還是使用其他如SQLDataSet元件來處理資料集合回傳的應用。 最後,該函式會傳回資料庫中被該SQL語法影響的資料筆數(shù)。Function Execute(const SQL: str
22、ing; Params: TParams; ResultSet:Pointer=nil): Integer18-2-4. SQLConnection常用方法程式範例如下: TParams *myParams = new TParams; try AnsiString sqlCommand; SQLConnection1-Connected = true; myParams-CreateParam(ftString, Tel, ptInput); myParams-ParamByName(Tel)-AsString =1234567 ; myParams-CreateParam(ftString
23、, CellPhone, ptInput); myParams-ParamByName(Tel)-AsString =0912345678 ; sqlCommand = INSERT INTO employee (Id,Name,Gender,Tel,CellPhone); sqlCommand += VALUES (9012121,Kevin,M,:Tel,:CellPhone); SQLConnection1-Execute(sqlCommand,myParams,NULL); _finally delete myParams; 說明:程式碼先宣告一個型態(tài)為TParams的變數(shù)myPara
24、ms供儲存SQL語法內的變數(shù)使用(Tel和CellPhone兩個變數(shù)),而sqlCommand變數(shù)則為所要執(zhí)行的SQL指令,最後透過Execute方法的呼叫來執(zhí)行sqlCommand指定的SQL指令。 18-2-4. SQLConnection常用方法 ExecuteDirect ExecuteDirect方法執(zhí)行沒有變數(shù)傳入的SQL語法。當SQL語法內不含變數(shù)時,便可使用ExecuteDirect方法代替Execute,如果執(zhí)行正確,回傳值為0,否則回傳dbExpress的錯誤編號。 GetFieldNames 針對某個資料表,呼叫GetFieldName可以回傳該資料表的所有欄位,使用方式
25、如下: /讀取Employee資料表中的所有欄位,便顯示在ComboBox1中SQLConnection1-GetFieldNames(Employee, ComboBox1-Items); 18-2-4. SQLConnection常用方法 GetTableNames 讀取SQLConnection連結帳號所能存取的所有資料表名稱,並儲存在TStrings型態(tài)的變數(shù)下,而透過參數(shù)的指定亦可選擇是否要一併讀取系統(tǒng)資料表,使用方式如下: Close和和Open Close關閉SQLConnection和資料庫的連結,而Open則開啟和資料庫之間的連結。 /選取所有資料表,並儲存在ComboBox
26、1中,不過不含系統(tǒng)資料表(False參數(shù)值指定)SQLConnection1-GetTableNames(ComboBox1-Items, False); /選取所有資料表,並儲存在ComboBox1中,包括系統(tǒng)資料表在內(True參數(shù)值指定)SQLConnection1-GetTableNames(ComboBox1-Items, True); 18-2-4. SQLConnection常用事件事件說明OnLogin 當LoginPrompt屬性為True時,OnLogin事件在資料庫連結前發(fā)生,用以指定登入資料庫時可能需要的參數(shù)。如果OnLogin事件處理了連結資料庫所需的參數(shù),則登入對話
27、框將不會出現(xiàn)。 BeforeConnect 在連結資料庫前發(fā)生。 AfterConnect 在連結資料庫後發(fā)生。 BeforeDisconnect 在中斷資料庫連結前發(fā)生。 AfterDisconnect 在中斷資料庫連結後發(fā)生。 18-3. SQLDataSet元件 透過SQLConnection建立起資料庫連結後,便可使用dbExpress方式存取資料庫中的資料,而本節(jié)將介紹最基本的SQLDataSet元件,因為它不但允許直接指定資料表來顯示資料,也允許透過SQL語法對資料庫進行存取的動作,另外還支援Stored Procedure的使用和接收Stored Procedure的回傳值,可說
28、是包辦了所有存取遠端資料庫內容的動作。18-3-1. 基本設定 在SQLDataSet的使用上,若要對資料庫內的資料進行存取的動作,則整個設定不外乎選擇連結名稱、指定執(zhí)行指令和執(zhí)行指令三個步驟,各步驟簡述如下: 選擇連結名稱 在dbExpress中和資料庫的連結主要決定在連結名稱的設定上,所以第一步便是要決定透過哪個連結名稱和資料庫達到連結的目的,不過,因為SQLDataSet本身並不具備和資料庫直接連結的能力,所以我們要使用SQLConnection元件來達成間接連結的目的,也就是必須透過SQLConnection屬性的指定來選擇使用的SQLConnection元件,並利用SQLConnec
29、tion元件的設定和資料庫進行連結,因此請開啟物件檢視器並設定SQLDataSet元件的SQLConnection屬性為你所欲使用的SQLConnection元件,當然,在設定前請先設定好SQLConnection元件的屬性。18-3-1. 基本設定 指定執(zhí)行指令 在選定連結名稱後,透過對CommandText屬性的指定來對資料庫下達執(zhí)行指令。比較特殊的是,該CommandText並不侷限在SQL語法的使用,也允許指定資料表或預存函式的名稱,因此還必須靠CommandType屬性的配合來決定CommandText的內容型態(tài),底下為兩者之間的對應關係: CommandType屬性值 Comman
30、dText內容型態(tài) ctQuery 一般的SQL語法內容 ctStoredProc 直接輸入預存函式的名稱 ctTable 直接輸入表格名稱(該屬性值下的回傳資料集合只具備唯讀功能) 18-3-1. 基本設定 SQL語法的使用範例則如下面程式碼所示:/透過SQL語法的指定方式SQLDataSet1-CommandType=ctQuery;SQLDataSet1-CommandText=Select * from DEPARTMENT; /直接指定Table名稱SQLDataSet1-CommandType=ctTable;SQLDataSet1-CommandText=DEPARTMENT;
31、18-3-1. 基本設定 執(zhí)行指令 執(zhí)行CommandText的內容。根據(jù)內容種類的不同有兩種主要的執(zhí)行方法: Open和ExecSQL Open方法負責執(zhí)行會有資料集合回傳值的CommandText內容,像Select或是選取表格之類的動作便是透過Open來開啟 ExecSQL則處理不具有回傳值的CommandText,像是Insert或是Update等, 不過,和過去熟悉的ExecSQL所不同的是:SQLDataSet的ExecSQL為一個需要傳入布林值的函式,利用該傳入的布林值來設定是否直接執(zhí)行CommandText所指定的動作,倘若CommandText沒有參數(shù)的傳入則設定布林值為Tr
32、ue來直接執(zhí)行指令,否則應傳入布林值False對CommandText指令進行最佳化的動作,預設值為False。 另外,CommandText內容被資料庫執(zhí)行後,亦會透過ExecSQL函式傳回被影響的資料筆數(shù)。18-3-1. 基本設定 用法示範SQLDataSet1-CommandType= ctQuery; SQLDataSet1-CommandText= “INSERT INTO EMPLOYEE(Name,Id,Tel) VALUES (:Name, :Id, :Tel)”; /執(zhí)行Insert新增一筆資料 SQLDataSet1-Params-Items0-AsString = Che
33、rry;SQLDataSet1-Params-Items1-AsString = 9922111;SQLDataSet1-Params-Items2-AsString = 88543 ;SQLDataSet1-ExecSQL(False); 18-3-2. SQLDataSet的存取動作 SQLDataSet元件為資料集合元件,所以除了不支援dbExpress單向指標的方法外,大致上的使用方式仍和傳統(tǒng)的資料集合元件相同,因此在存取欄位值的應用上亦和其他資料集合元件大同小異,不外乎透過Fields、FieldByName和FieldValues;不過,或許是因為一些資料感知元件不支援dbExpr
34、ess,導致使用這些方法來存取欄位值的機會比BDE或ADO連結方式多上許多,其中最明顯的就是必須用StringGrid之類的元件來取代DBGrid作為顯示資料集合的內容;此外,SQLDataSet元件亦提供了其他好用的方法來讀取更多的表格資訊,譬如GetFieldData和GetKeyFieldNames就分別提供了讀取資料表欄位和索引的功能。 在下面我們以範例來說明SQLDataSet的使用方式。18-3-2. SQLDataSet的存取動作 【範例【範例18-1】根據(jù)選取欄位顯示表單內容】根據(jù)選取欄位顯示表單內容 透過GetTableNames方法和StringGrid元件的使用完成顯示表
35、單內容的程式。而本章所有範例使用的資料表架構如下圖所示: 18-3-2. SQLDataSet的存取動作表單畫面 屬性元件ConnectedNameConnection NameDriver NameLogin PromptSQLConnectionSQLConnectionTrueSQLConnection1ExampleMySQLFalse-SQLDataSet-SQLConnection1說明:SQLConnection元件的ConncectionName屬性設定請參考18-2節(jié),而VendorLib屬性則指向libMySQL.dll檔案所在的位置,在SQLConnction所有屬性設定
36、完畢後,設定Connected=True和遠端進行連結。 重要元件屬性18-3-2. SQLDataSet的存取動作 主要程式碼(參閱書附光碟) 【執(zhí)行結果【執(zhí)行結果】 依照選定的顯示欄位,按下【Show】按鈕即可顯示資料表內容。 18-3-3. SQLDataSet常用屬性屬性功能CommandType 設定CommandText的類型。 CommandText 對資料庫執(zhí)行的內容,依據(jù)CommandType設定的類型而不同。 DataSource 使用SQLDataSet元件建立Master/Detail主從資料表時使用。Detail端的SQLDataSet元件利用該屬性來指定Master
37、資料表的來源,也就是指定一個記錄Master資料表來源的DataSource。 Params CommandText中指定的SQL語法或是StoredProc含有參數(shù)時,便可透過該屬性來傳遞參數(shù)。CommandText內的參數(shù)以陣列方式儲存,並依照先後順序排列。 Prepared 設定是否在CommandText指令執(zhí)行前,進行準備的動作,也就是最佳化的處理,尤其是指令含有參數(shù)時,設定Prepared=True會改善執(zhí)行的效能。 18-3-3. SQLDataSet常用屬性屬性功能RecordCount 用來傳回資料集合內目前的資料筆數(shù),但是當資料集合並沒有辦法決定整個集合內的資料筆數(shù)時,將產
38、生例外處理的情形,底下為三種無法使用該屬性的資料集合:1.資料集合表示的是預存函式(Stored Procedure)。2.資料集合表示的是一個含有參數(shù)的查詢,也就是Query中含有參數(shù)的設定。3.資料集合表示的是多個資料表的結合。SortFieldName CommandType為ctTable型態(tài)時,透過SortFieldNames屬性的設定可決定資料顯示的排序情形,相當於SQL語法中的Order By用法。若要對多欄位進行排序時,只要以分號間格欄位即可,依照輸入的優(yōu)先順序排序。 資料集合的其他屬性請參考BDE或ADO資料集合元件的說明。18-3-4. SQLDataSet常用方法 Exe
39、cSQL和Open 負責執(zhí)行CommandText屬性值所設定的指令,當會回傳資料集合時使用Open,否則使用ExecSQL,更詳細的說明請參考18-3-1小節(jié)。 GetFieldData 該方法能根據(jù)所使用的資料表傳回資料表內的所有欄位。 ParamByName 和Params屬性同樣都是用來傳遞或指定參數(shù)內容,只是該方法以參數(shù)名稱來指定參數(shù)值,非Params所使用的編號方式。 18-3-4. SQLDataSet常用方法 Next和First 為dbExpress資料集合內,移動資料集合指標僅能使用的方法。因為dbExpress單向指標的緣故,所以過去資料集合中能使用的Prior、Move
40、By和GotoBookmark等移動指標的方法皆無法使用。說明:單向指標的資料存取在效能上優(yōu)於雙向指標,但相對的犧牲了許多資料集合元件所提供的方法,如Prior、Insert、Delete、Locate等,因此,建議讀者養(yǎng)成使用SQL語法執(zhí)行資料庫存取動作的習慣。 18-4. SQLQuery元件SQLQuery元件為使用SQL語法對資料庫進行存取動作的資料集合元件,在使用上和BDE下的Query 與ADO下的ADOQuery有著幾分類似,因此如果對於前面兩個元件已經(jīng)有所認識的讀者來說,對該元件的上手也就變得簡單許多,不過由於該元件完全仰賴SQL語法來對連結的資料庫或資料表進行存取的動作,所以
41、建議讀者在學習本元件前最好對SQL語法有一定的熟悉度。SQLQuery元件的基本操作和18-3介紹的SQLDataSet極為類似,透過SQLConnection屬性的指令完成和資料庫的連結設定,而SQL屬性則決定所要執(zhí)行的SQL語法內容,而執(zhí)行的方法則依回傳值的與否有Open和ExecSQL之分:Open限用於回傳資料集合的指令;ExecSQL則用於不會回傳資料集合的指令。18-4-1. 使用SQLQuery存取資料【範例【範例18-2】新增刪除資料表的內容】新增刪除資料表的內容 透過SQLQuery元件的使用,允許使用者新增/刪除資料表中的資料。表單畫面 屬性元件NameConnectedC
42、onnection NameDriver NameLogin PromptSQLConnectionSQLConnectionSQLConnection1TrueExampleMySQLFalse-SQLQuery-SQLConnection1屬性元件NameOptionsItemIndexCaptionColumnsItemsStringGridStringGrid1goRowSelect=true-RadioGroupRadioGroup1-0【不輸入】2男女說明:Edit輸入框並沒有做輸入長度的檢查動作,讀者可自行使用Edit元件的MaxLength屬性來設定所允許的最長輸入。 18-4
43、-1. 使用SQLQuery存取資料主要程式碼(參閱書附光碟)【執(zhí)行結果【執(zhí)行結果】 在輸入框中填入資料,按下【輸入】按鈕即完成對資料表的輸入,而在StringGrid顯示框中雙擊滑鼠即可刪除所點選的那筆紀錄。新增資料前新增資料後18-4-2. SQLQuery常用屬性屬性功能DataSource 在建立Master/Detail資料表時,Detail資料表透過該屬性指定Master資料表的來源 Eof 判斷資料指標是否指到資料集合中的最後一筆紀錄。 Bof 判斷資料指標是否指到資料集合中的第一筆紀錄。 Params 當SQL語法含有參數(shù)時,透過這屬性設定參數(shù)內容。 Prepared 當SQL
44、語法含有參數(shù)時,設定Prepared=True來進行最佳化的準備工作。 RecordCount 回傳SQLQuery目前的資料集合內所擁有的資料筆數(shù)。 RowAffected 計算SQL語法執(zhí)行後資料集合內被影響的資料筆數(shù)。 SQLQuery元件為資料集合元件,所以可使用繼承至資料集合元件的大部分屬性。18-5. SQLTable元件 SQLTable元件為直接指定資料表作為讀取依據(jù)的dbExpress資料集合元件。和SQLQuery相比,不需要對SQL語法有任何了解即可讀取資料表的內容是它最主要的優(yōu)勢,但相對的,在複雜的存取應用上就顯得力不從心了,何況該資料集合只具備單純的唯讀功能,所以實際
45、應用上的取捨還是決定在你對資料表格的動作而定,當然你也可以直接使用SQLDataSet元件來包辦SQLQuery和SQLTable兩個元件的工作。18-5-1. SQLTable的基本操作 SQLTable元件的基本設定還是維持一貫的簡單原則,只需先透過SQLConnection屬性指定一個SQLConnection元件作為連結的依據(jù)再利用TableName屬性決定資料表名稱即完成基本的操作,而若是透過物件檢視器來指定TableName屬性,物件檢視器還會根據(jù)所設定的SQLConnection屬性提供可用的資料表列表,可說是再方便不過了,最後再設定Active屬性為true即可讀取資料表的內容
46、。18-5-2. SQLTable的Master/Detail設定不論是BDE中的Table元件、ADO中的ADOTable元件到dbExpress中的SQLTable元件,Borland皆貼心的提供了欄位編輯器供程式設計員使用,而透過欄位編輯器的快速拖曳功能,可以自動產生顯示欄位內容的資料感知元件,避免因為重複設定所產生的錯誤,進而縮短程式的開發(fā)時間,詳細的使用方法請參考16-1-2節(jié)中的說明;不過由於SQLTable為單向指標的資料集合元件,所以並不支援在BDE和ADO中常使用到的Lookup欄位設定,但是仍可透過DataSource元件的輔助完成Master/Detail的資料庫程式開發(fā)
47、。Master/Detail資料庫程式需要兩個資料集合元件的使用,其中一個為Master資料集合;另一個為Detail資料集合,兩者之間透過欄位設定對應的關係,因此Detail端指定Master資料來源就成為設定對應欄位的第一步:透過物件檢視器設定Detail資料集合的MasterSource屬性以選擇Master資料表的來源,接著點選MasterFields屬性設定Detail/Master所要對應的欄位即完成了Master/Detail資料表的對應關係18-5-2. SQLTable的Master/Detail設定底下為設定步驟的流程:SQLTable1SQLTable2DataSourc
48、e118-5-2. SQLTable的Master/Detail設定 【範例【範例18-3】Master/Detail的應用的應用 透過Master/Detail資料表的設定,建立employee和orders兩個資料表間的關聯(lián):根據(jù)employee資料表內的員工編號查詢orders資料表內該員工所有的接單紀錄。 表單畫面18-5-2. SQLTable的Master/Detail設定 屬性元件NameDataSourceDataFieldCaptionColumnsItemsValuesDBEditDBEdit1DataSource1Id-DBEditDBEdit2DataSource1Na
49、me-DBEditDBEdit3DataSource1Tel-DBEditDBEdit4DataSource1CellPhone-DBRadioGroupDBRadioGroup1DataSource1Gender【空白】2男女MF 屬性元件NameActiveIndexFieldNameMaster FieldsMaster SourceTableNameSQLConnectionSQLTableSQLTable1False-EmployeeSQLConnection1SQLTableSQLTable2FalseEmpNoIdDataSource1OrdersSQLConnection1說明
50、: DBRadioGroup透過Items和Values屬性設定顯示值和資料表欄位值之間的關係。當Gender欄位值為“M”時,DBRadioGroup的“男”選項會呈現(xiàn)選取的狀態(tài),反之,“女”呈線選取的狀態(tài)。 SQLConnection設定請參考前面範例。 DataSource元件的Name為DataSource1,設定其DataSet屬性為SQLTable1。 18-5-2. SQLTable的Master/Detail設定 主要程式碼(參閱書附光碟) 【執(zhí)行結果【執(zhí)行結果】18-6. SQLMonitor元件 SQLMonitor元件監(jiān)視應用程式和資料庫之間的訊息傳遞情形,透過這些訊息的
51、檢視可以了解dbExpress連結和資料庫實際的溝通方式,有助於程式除錯時對應用程式和資料庫間傳遞內容的了解:包括語法是否傳遞正確或是指令是否確實執(zhí)行等,而本元件的作用和 BDE下提供的SQL Monitor工具極為類似,只不過SQL Monitor為一個應用程式,SQLMonitor為C+ Builder內的一個元件。18-6-1. 基本使用SQLMonitor主要針對程式除錯(Debug)之用,所以能提供的功能就相對有限,因此在元件設定上的變化也相對減少許多。以最基本的使用來說,你只要指定以下幾個屬性就可以利用該元件達到檢視訊息的工作:SQLConnection:指定所要監(jiān)視的SQLConnection連結,而不論SQLDataSet、SQLTable和SQLQuery等元件透過該SQLConnection元件和資料庫間的訊息傳遞都會被SQLMonitor紀錄。FileName:設定儲存監(jiān)視訊息的檔案
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2012年全國高中數(shù)學聯(lián)賽試題及解答
- 模擬合同藝人簽約協(xié)議模板
- 員工忠誠協(xié)議書范本
- 商品灰混凝土購合同協(xié)議
- 員工餐協(xié)議書范本
- 商城合作協(xié)議書范本
- 武清家具運輸合同協(xié)議
- 售樓部正規(guī)合同協(xié)議
- 和國企合作合同協(xié)議
- 員工老板工作協(xié)議合同
- 2025年消防設施操作員(監(jiān)控類)考試復習重點題(附答案)
- (二模)2025年深圳市高三年級第二次調研考試政治試卷(含答案)
- 2025年山東省應急管理普法知識競賽參考試題庫大全-上(單選題)
- 鄰水現(xiàn)代農業(yè)發(fā)展集團有限公司招聘筆試題庫2025
- 鄰水國有資產經(jīng)營管理集團有限公司2025年公開考試招聘工作人員(8人)筆試參考題庫附帶答案詳解
- 配電房防火安全施工技術措施
- 地鐵乘客滿意度影響因素組態(tài)效應分析:出行鏈視角研究
- 數(shù)學三角形的高、中線、角平分線教案2024-2025學年北師大版(2024)七年級數(shù)學下冊
- 2021水閘工程運行管理規(guī)程
- SF-36生活質量調查表(SF-36-含評分細則)
- 中國古建筑文化與鑒賞智慧樹知到期末考試答案章節(jié)答案2024年清華大學
評論
0/150
提交評論