第五章資料集資料的後面.....
第一節資料的狀態
當用Delphi和ADO開發資料庫應用程式時,大部分工作用於學習資料集元件的幫助文件。 。為了創建一個基於ADO的程序,Delphi提供了幾個資料集元件:TAdoTable、TAdoQuery和其他的元件。它們用於取得、呈現和修改資料庫表或查詢的資料。
在本教學的第五章,我們將透過介紹大多數感興趣的資料集元件的一些屬性、事件和方法來切實了解如何呈現、瀏覽和讀取資料。
挑選、設定、連接和獲得(Pick, set, connect and get)
既然已到了第五章,你應該已經熟悉建立一個資料庫表單所需的步驟。在第四章我們已手工建立了一個簡單的資料瀏覽表單。本章將以它繼續討論。
到目前為止,我們僅使用了一個(ADO)資料集元件:TAdoTable。了解TADOQuery和TADODataSet(作為資料集元件)對相同的方法和事件使用相同的設定是很重要的。
芝麻開門;芝麻關門(Open Sesame ; Close Sesame)
Delphi資料庫開發的很重要的特徵之一是:Delphi可以在程式設計時讓我們對資料進行處理。你可以回憶一下—在前一章,我們使用Active屬性在設計時就開啟了與資料的活動連結。
不難理解,在開始處理表的資料之前,程式必須先開啟資料集。 Delphi有兩種方法實作此功能。第一是如我們所看到的,可以在設計或運行時設定Active屬性為True;第二是我們可以在執行時呼叫Open方法。例如,增加如下的程式碼到表單的OnCreate事件句柄中,從而得到ADOTable元件的資料。
ADOTable1.Open;
注意:每個ADO資料集都可透過它自己的ConnectionString屬性或一個ADOConnection元件(和它的ConnectionString)存取資料庫的資料。如果ADOTable1元件與ADOConnection1元件連接(建議使用此方式),開啟ADOTable將啟動對應的ADOConnection元件。 ADOConnection提供兩個將被執行的事件:OnWillConnect和OnConnectComplete。
Open方法設定Active屬性為True並啟動連線。當我們處理完連接時,我們可以設定Active屬性為False或呼叫Close方法斷開連接。通常我們都在表單的OnClose事件句柄中放入對Close方法的呼叫:
ADOTable1.Close;
在繼續之前,知道對資料集方法和屬性的處理依賴於對資料當前狀態的了解是至關緊要的。簡單地說,資料集的State(狀態)屬性決定任何時候資料集上的什麼行為可以發生或不發生。
How are you doing?
如果資料集是關閉的,資料的State將顯示為Inactive(非啟動)連線。當連線是關閉時,沒有操作、行為或方法可以對資料實施。當我們第一次開啟資料集的連線時,資料集處於預設的Browse(瀏覽)狀態。你應該始終了解「你的」數據所處的狀態。例如,當我們把資料集連接到DBGrid時,使用者可以看到潛在的資料集(或記錄集),但要改變某些資料就必須把State設為Edit。
當程式處理資料時,了解資料集狀態在不停的改變時非常重要的。例如,在DBGrid中瀏覽資料時(Browse狀態),使用者開始編輯記錄,狀態將自動變更為Edit。當然,當設定資料視覺化控制項(DBGrid、DBEdit)的AutoEdit屬性為True時,這是它們預設的行為。
但是,我們要怎麼得到狀態呢? ADOTable(其他任何資料集元件也一樣沒有)沒有處理狀態改變時的觸發器。
好,讓我們看一看:對每個資料集元件,我們通常使用一個資料來源元件來呈現於一個或多個資料視覺化控制項的連接。就是這樣。
每個資料來源元件都有一個OnStateChange事件,無論潛在的資料集狀態何時改變它都見觸發。把下面的程式碼放到OnStateChange事件句柄中,用表單的標題顯示ADOTable1資料集元件的目前狀態:
PRocedure TForm1.DataSource1StateChange(Sender: TObject);
var ds: string ;
begin
case ADOTable1.State of
dsInactive: ds:='Closed';
dsBrowse : ds:='Browsing';
dsEdit : ds:='Editing';
dsInsert : ds:='New record inserting';
else
ds:='Other states'
end ;
圖說:='ADOTable1 state: ' + ds;
end ;