14.4.4 字段對象的訪問
字段對象在應用程序中有動態生成的,也有通過字段編輯器Fields Editor 創建的永久性的,它們雖然在設計和運行階段都是不可見,但是它們跟其他的對象一樣都擁有自己的屬性、方法和事件,因此我們在應用程序中是可以對字段對象進行控制和訪問的。
因為動態字段對象是沒有自己的名字的,永久性的字段對象有自己的名字,所以對這兩種字段對象的訪問方法是不一樣的。
14.4.4.1 動態字段對象的訪問
動態字段對象存在於數據集部件TTable和TQuery部件中,它們是隨著磁盤上的數據庫文件的打開而動態生成的,並且每一個字段對象對應於數據庫表中的一個字段(即記錄的一列),TTable或TQrery部件中所有的字段對象存在屬性Fields列表中,Fields列表中的字段對象就像數組元素一樣擁有自己的索引號,我們可以用這個索引號來訪問字段對象。索引號在程序運行時賦值,從0開始,表中最左邊的一列(第一個字段)的索引號為0,緊接著右邊一個為1,以此類推。訪問這些屬性的方法和處理其他對象一樣。
Table1.Fields[0].DisplayLabel:='標識符'
上述代碼讓我們訪問與Table1相連的數據庫表中的第一個字段,並為該字段指定一個標題,這是通過設置它的DisplayLabel屬性值為一個特定的標識符來實現的。
通過索引號來訪問Fields屬性中的字段在使用For循環對列號進行迭代時會非常有用。但是在大多數簡單應用程序中,通過列名(字段名)來訪問字段會更加明白而且易讀。在TTable部件中,提供了一個名為FieldByName的方法以便讓我們通過列名訪問字段對象。
Table1.FieldByName('CustNo').DisplayLabel:='標識符'
通過這種途徑同樣可以訪問CUSTOMER.DB表中的CustNo字段,並為該字段指定一個標題信息。
現在我們可以建立一個允許用戶通過字段名和索引號來訪問Customer.DB 表中的字段對象的簡單窗體。
字段對象的訪問
在該應用窗體的運行過程中,我們通過程序來訪問其中的字段對象並設置有關的屬性,這一控制過程我們放在窗體的OnCreate事件處理過程中。
例14.1 在窗體的Oncreate事件處理過程中訪問字段對象。
procedure TForm1.FormCreate(Sender:TObject);
Begin
with Table1 Do
begin
{通過索引號訪問字段對象}
Field[0].DisplayLabel:='客戶編號';
{通過字段名訪問字段對象}
FieldByName('Company').DisplayLabel:='公司名稱';
FieldByName('Phone').DisplayLabel:='電話號碼';
FieldByName('LastInvoiceDate').DisplayLabel:='購買日期';
end;
end;
在程序運行過程中訪問字段對象
14.4.4.2 永久性字段對象的訪問
通過字段編輯器Fields Editor 建立的永久性字段對象的訪問相對於動態字段對象的訪問要簡單得多,我們在程序中可以直接通過字段對象的名稱(即Name屬性)進行訪問。
例如:
Table1CustNo.DisplayLabel:='客戶編號';
Table1CustNo.DisplayWidth:=12;
14.4.4.3 字段對象的讀取和賦值
通過字段對象的Value屬性,我們可以讀取字段對象的值,例如在如圖14.13所示的窗體中,單擊Read按鈕便可以將Customer.DB表中當前記錄的COMPANY字段的值讀取到編輯框Edit1中。
讀取字段對象的字段值
窗體中各部件的屬性如表14.7所示
表14.7 各部件的屬性
━━━━━━━━━━━━━━━━━━━━━━━━
部件的屬性 屬 性 值
────────────────────────
Button1.Caption &Read
Button1.Name Button1
Label1.Caption 字段值
Label1.Name Label1
Edit1.Text
Edit1.Name Edit1
━━━━━━━━━━━━━━━━━━━━━━━━
其它部件的的屬性跟前面的例子一樣。
為Read按鈕編輯的OnClick事件處理過程如下:
procedure Form1.TButton1Click(Sender:TObject);
begin
Edit1.Text:=Table1Company.Value;
end;
在這裡要注意的是:從字段對象中讀取字段值時必須要將它賦給與之數據類型相匹配的變量,否則會出錯。在上面的程序代碼中,Table1Company的類型是TStringField 即是字符串類型的字段,而編輯框Edit1的屬性Text的類型也是字符串型的,因而它們是匹配的。如果類型不匹配,則要經過一定的轉換才能夠相互賦值。如:
Edit1.Text:=Table1CustNo.Value
這條代碼在運行過程中將會出錯,因為TablelcustNo是TFloatField 類型即是數值型數據,要在編輯框Edit1中顯示數值型數據要經過下列轉換:
Edit1.text:=Table1CustNo.AsString;
AsString是字段對象的屬性,通過字段對象的AsString屬性可以讀取字段值並且將它轉換成字符串類型。字段對象的字段值可以轉換成以下幾種類型的數據:
AsString: 將字段值轉換成字符串數據
AsBoolean: 將字段值轉換成布爾型數據
AsDateTime: 將字段值轉換成日期時間數據
AsFloat: 將字段值轉換成數值型數據
AsInteger: 將字段值轉換成整數型數據
下面的程序代碼是從字段對象中讀取字段值並將它顯示在編輯框Edit1中,或者將字段值賦給相匹配的變量。
CustNoDouble: Double;
CustNoInt: Integer;
CustNoString: String;
{在Edit1中顯示字段值}
Edit1.Text:=Table1Company;{類型相匹配,不需要轉換}
Edit1.Text:=Table1CustNo.AsString;{類型不匹配,需要轉換}
{將字段值賦給變量}
CustNoDouble:=Table1CustNo.Value;{類型相匹配,不需要轉換}
CustNoInt:=Table1CustNo.AsInteger;{類型不匹配,需要轉換}
CustNoString:=Table1CustNo.AsString;{類型不匹配,需要轉換}