kylix 資料庫應用簡介 (轉)

gugu99發表於2007-10-14
kylix 資料庫應用簡介 (轉)[@more@]

kylix 應用簡介
(施曉軍 2001年06月20日 10:56)


Kylix是業界著名的美國公司Borland正式釋出的第一款專門為操作推出的開發工具(Rd Application Development,RAD)環境。它能為開發人員提供高的、桌面程式和資料庫程式開發工具,使Linux開發人員可以在具有靈活的跨平臺、視覺化的Kylix開發環境中快速、方便地開發出高效能的Linux應用軟體。

本文概括地介紹了在Kylix資料庫應用開發中涉及到的主要,和對資料編輯、處理進行管理的策略。

一、Express 及Kylix的資料提供/處理

Borland的Kylix所提供的dbExpress,是為很多資料庫提供公共API的一種新的處理方法。dbExpress 的設計目標為:最小化系統資源的佔用,最大化執行速度,提供平臺獨立性,提供易用的開發環境,使程式的開發簡易。

dbExpress的驅動程式既小又快,因為它們只提供了非常有限的功能。一個dbExpress驅動程式實現五個介面,支援獲取metadata,語句和過程,和返回只讀的單向遊標結果集等等。不管怎樣,當被使用於DataSetProvr和ClientDataSet或SQLClientDataSet以實現Borland的提供/處理資料訪問策略時,dbExpress 能為你提供全效能,高可靠性,高併發性的系統,使你很方便地處理SQL資料庫中的資料。

Kylix使用四個元件來提供資料訪問和編輯功能。一個就是SQLConnection元件,為你使用的資料庫提供一個到dbExpress驅動程式的連線;另一個就是dbExpress dataset元件中的一個,透過執行一個SQL 語句或一個儲存過程來提供資料;還有就是DataSetProvider和ClientDataSet元件。當你開啟ClientDataSet,它就會向DataSetProvider請求資料。DataSetProvider開啟查詢或儲存過程元件,獲取資料記錄,然後關閉查詢或儲存過程元件,為ClientDataSet提供資料記錄,或任何所需的metadata。ClientDataSet把資料記錄儲存在中,無論它們是在被瀏覽或更改。當用程式碼的形式,或者是透過介面,對記錄作增加、刪除或更改時, ClientDataSet把所有的更改都以日誌的形式記錄在記憶體中。為了更改資料庫,你要呼叫ClientDataSet的ApplyUpdates方法。ApplyUpdates把更改日誌傳遞給 DataSetProvider。DataSetProvider就開始一個事務,建立和執行相應的SQL語句,對資料庫進行更改。如果所有的更改都被成功地執行,DataSetProvider就提交一個事務;否則,就會回滾該事務。如果發生一個錯誤導致事務回滾,ClientDataSet 的OnReconcileError事件就會被觸發。

Kylix的這種提供/處理資料的框架的好處主要有:

1.縮短事務週期

長時間的事務會使資料庫長時間地加鎖,會降低資料庫的併發效能,並且會消耗資料庫伺服器的資源。使用Kylix的這種提供/處理資料的框架則可以降低事務週期。動態地降低資源消耗,提高一個忙碌的資料庫伺服器的併發效能。

2.使任何記錄都是可編輯的

由多資料表連結、儲存過程或只讀檢視返回的記錄是不能直接在資料庫應用中被編輯的。DataSetProvider給了你三種方法來處理這些情形。如果記錄來自於一個單一的資料表,如,透過一個儲存過程產生,可以為DataSetProvider建立返回該資料表名稱的OnGetTableName事件控制程式碼。第二種可能是多表聯接中,來自某一單一資料表的欄位需要被更改;解決方法是,首先,設定該欄位的ProviderFlags屬性,以表示該欄位是要被更改的,然後, 建立一個OnGetTableName事件控制程式碼以返回資料表的名稱,DataSetProvider就會自動地產生相應的SQL語句。如果你要更改多資料表中的每個資料記錄,解決方法是,為DataSetProvider增加一個BeforeUpdateRecord事件控制程式碼。在該事件控制程式碼中,你可以為每一個資料表產生SQL語句,並執行它們。

3.瞬時排序和搜尋

由於ClientDataSet把記錄儲存在記憶體中,這些記錄可以在記憶體中被快速排序。如果一個記憶體中的排序太慢,你可以在設計或執行時為ClientDataSet資料建立。這些建立在記憶體中的索引可以讓你瞬時地改變記錄的順序或多記錄進行定位,而不需要維護資料庫中的索引。

4.自動統計資訊

ClientDataSets能自動維護你定義的複雜的統計計算公式,如,Sum(Price)-Sum(Cost)。你也能對統計計算根據某一欄位或欄位的組合進行分組,從而提供分組統計資訊。你也可以使用Min,Max,Count和Avg (average)等聚集運算。

5.觀看資料的子集

使用符合SQL WHERE語法的過濾,可以使你很容易地顯示ClientDataSet的記錄子集,而不需要資料庫伺服器執行任何查詢操作。

6.多併發資料檢視

克隆一個ClientDataSet遊標的能力,可以讓你同時觀看一個ClientDataSet中資料記錄的不同子集。你也可以以不同的排序觀看相同的資料記錄。

7.計算欄位不再是高不可及

你可以在設計時為一個ClientDataSet設定計算欄位,使計算欄位是記憶體中資料記錄集的一部分。 由於計算欄位的計算功能是使用編譯過的 Pascal程式碼,因此,執行起來很快,雖然要比在一個SQL語句中的計算列或中的計算複雜,但是,對於資料庫伺服器而言,則不需要任何儲存或計算負擔。

8.快速開發

使用dbExpress進行應用開發只需要兩個共享的物件庫。一個是dbExpress驅動程式,如,LIBSQLIB.SO用於Interbase,另一個是LIBMIDAS.SO,是ClientDataSet的支援庫。這最小化了應用程式的規模,簡化了。

9.很容易進行驅動程式建立

dbExpress驅動程式的實現僅需五個介面,並且已在線上幫助中被描述。Borland還提供了和 Interbase 驅動程式程式碼,這使資料庫廠商能很容易地依照模型建立高效能的驅動程式。你甚至可以根據需要構建自己的驅動程式。

此外,Kylix的DataCLX是跨平臺元件庫,提供了訪問資料的兩組元件。DbExpress元件提供基本的連線和資料獲取功能。資料訪問元件提供了使用提供/解決框架編輯資料的能力。

二、資料獲取與處理元件

如同所有的CLX元件,資料訪問與處理元件可以讓你快速構建你的應用程式,只需要把元件從元件板中拖出來,放在你的應用程式中就可以了。

1、SQLConnection

SQLConnection為任何dataset元件提供一個資料庫連結。你可以使用多SQLConnection元件,同時和許多資料庫相連。有三種方法定義一個資料庫連結:使用一個已經存在的連線、建立一個新的命名連結,或者把連結引數放置在SQLConnection 元件的引數屬性中。為了使用一個已經存在的連結,只需要設定ConnectionName屬性。

為了建立一個新的命名連結,雙擊SQLConnection元件,開啟dbExpress Connection編輯器。左邊列表框中顯示的連結名是已經被定義的。驅動程式下拉選單讓你進行過濾以便只顯示你所需的驅動程式。右邊表格中的連結設定,顯示所選取驅動程式的連結設定。你建立的所有連結被儲存在dbxconnections.conf中。

建立了一個命名連結以後,你可以把它賦給SQLConnection 元件的ConnectionName屬性。如果你使用了命名連結,你就要把連結檔案和你的應用程式一起發行,或者定位一個目標上已經存在的連結檔案,並且把你的連結加上去。另一種可選的方法是設定SQLConnection元件的Name屬性。包含DriverName的下拉選單列出了你在系統中已經安裝的所有驅動程式。驅動程式的資訊被包含在 dbxdrivers.conf檔案中。

設定DriverName屬性,也就會根據驅動程式檔案中的資訊設定LibraryName和VendorLib屬性。LibraryName包含了dbExpress驅動程式共享物件檔案的名稱。VendorLib包含了資料庫廠商的客戶庫檔名字。

如果在連結編輯器中為 SQLConnection 元件的 Params屬性輸入連結引數,連結資訊就完全被包含在你的應用程式中。如果你希望應用程式的使用者能更改你儲存的任何連結引數,你可以把它們儲存在應用程式自己的檔案中,並且提供一種方法編輯檔案,可以在你的應用程式中,或者是一個單獨的配置程式;這就使每個應用程式完全是自包含的。

SQLConnection元件也提供了StartTransaction,Commit和Rollback方法用於事務控制。如果你需要執行SQL語句,但不需要返回一個結果集,你就可以使用SQLConnection元件的Execute或ExecuteDirect方法,而不需要任何dataset元件。 如果你需要訪問資料庫的metadata,可以使用SQLConnection元件的GetTableNames, GetFieldNames和GetIndexNames方法。

2、Dataset元件

dbExpress提供了四個dataset元件,SQLDataSet,SQLQuery,SQLStoredProc和SQLTable。

SQLDataSet可用於任何新的應用程式。透過設定它的CommandType屬性,你可以用來執行SQL語句,呼叫一個儲存過程,或者,訪問資料表中所有的行和列。另外的dataset元件主要用於把使用Borland資料庫引擎的應用程式很容易地轉換成dbExpress。

為了使用一個SQLDataSet,設定它的SQLConnection屬性為你所要使用的SQLConnection元件,然後把它的CommandType屬性設定為ctQuery, ctStoredProc 或 ctTable。通常,你使用預設的值為ctQuery。CommandText屬性值依賴於CommandType的值。如果CommandType是 ctQuery, CommandText就包含你想要執行的SQL語句。如果CommandType是ctStoredProc,CommandText就是儲存過程的名稱。如果CommandType是ctTable,那麼,CommandText 就是資料表的名字。你可以使用Params屬性為引數化的查詢或儲存過程提供引數,使用Data屬性把SQLDataSet和另外一個主-從關係的dataset元件相連。

SQLDataSet僅提供只讀的單向遊標。如果這是你惟一的訪問要求,如,列印一個報表,你就可以直接使用SQLDataSet,或者根據你的報告工具使用一個DataSource元件。如果你要對資料記錄進行編輯,就要增加一個DataSetProvider和ClientDataSet,如前面所述。如果你需要詳細的metadata資訊,就要使用一個SQLDataSet 的SetSchemaInfo方法。SetSchemaInfo有三個引數,分別是SchemaType,SchemaObject和SchemaPattern。  SchemaType可以是stNone,stTables,stSysTables,stProcedures,stColumns,stProcedureParams或stIndexes。該參數列明SQLDataSet被開啟時所包含的資訊型別。當你使用一個SQL語句或儲存過程從一個資料表中獲取資料時,SchemaType被設定為stNone。其它的schema型別建立一個擁有相應的結構的dataset。當請求一個儲存過程或資料表名字時,SchemaObject就是儲存過程或資料表的名字。Schema可以讓你對結果進行過濾。例如,如果SchemaType是stTables ,SchemaPattern是'EMP%',那麼返回的資料集將僅僅返回以EMP開頭的資料表。

3、SQLMonitor

最後一個dbExpress元件是SQLMonitor,用於幫助你你的應用程式。SQLMonitor用來監視在一個SQLConnection元件和相聯的資料庫伺服器之間流動的所有的SQL語句。SQL語句可以被記錄到日誌檔案中,或者你可以書寫事件控制程式碼處理它們。

4、資料訪問元件

DataSetProvider 一個DataSetProvider是透過其DataSet屬性被連結到一個dbExpress dataset元件上去的。DataSetProvider根據請求為ClientDataSet提供資料,產生SQL DML語句,根據ClientDataSet提供的更改日誌對資料庫作更改。 ClientDataSet ClientDataSet是透過它的ProviderName屬性和一個DataSetProvider相連的。它從它的DataSetProvider獲得資料,把資料快取在記憶體中,把所有的資料更改做成日誌,當ClientDataSet的ApplyUpdates方法被呼叫時,把更改日誌傳送給DataSetProvider。 DataSource 一個DataSource元件是透過它的DataSet屬性和一個dataset相連的。Dataset可以是一個ClientDataSet或者是dbExpress dataset元件之一。DataSource提供公共函式功能,以及資料感應使用者介面元件的連結點。它也用於連結資料集元件,以模擬一對多、多對多的關係。 SQLClientDataSet ClientDataSet這是一個具有內建DataSetProvider和SQLDataSet的ClientDataSet元件。僅僅要把它和一個SQLConnection元件相連;設定DataSet,CommandType和CommandText屬性。當SQLClientDataSet隱藏掉很少用到的SQLDataSet、 DataSetProvider元件的某些效能,訪問來自一個單一資料表的資料時,它將能節省時間,並且提供你通常所要用到的所有的功能。

另外,MyBase是一種本地的資料庫。包含在一個 ClientDataSet中的資料,可以二進位制或XML格式被儲存在檔案或被呼叫。這可以使一個ClientDataSet 如同一個單一使用者的關聯式資料庫系統。惟一的限制就是當它被訪問時它必須適合記憶體的大小。這種效能可以被運用於許多方面。你可以使用 ClientDataSet在記憶體中建立臨時資料表,也可以瞬時去除它。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-976390/,如需轉載,請註明出處,否則將追究法律責任。

相關文章