clientdataset 遍历字段_Delphi TClientDataSet[五]: 读取数据
Delphi TClientDataSet[5]: 讀取數據。
本例用到:
TClientDataSet.Fields[]; { 字段集合; 它比 FieldList 有更多功能, 如可獲取嵌套字段 }
TClientDataSet.FieldList[]; { 字段列表; 它比 Fields 輕便, 如果只是取值用它快一些 }
TClientDataSet.FieldByName(); { 根據字段名稱獲取字段對象; 獲取一個字段對象時它比上兩個快 }
TClientDataSet.FindField(); { 根據字段名稱查找字段對象 }
TClientDataSet.FieldValues[]; { 根據字段名稱獲取字段值; 如果僅是獲取字段值, 這個最快 }
TClientDataSet.First; { 到第一個記錄 }
TClientDataSet.Next; { 到下一個記錄 }
TClientDataSet.Last; { 到最后一個記錄 }
TClientDataSet.Prior; { 到上一個記錄 }
TClientDataSet.RecNo; { 設置或讀取當前記錄的位置 }
TClientDataSet.Bof; { 當前位置是否是第一個記錄 }
TClientDataSet.Eof; { 當前位置是否是最后一個記錄 }
TClientDataSet.RecordSize; { 一個記錄的大小; 所謂一個記錄就是當前行的所有字段 }
TClientDataSet.RecordCount; { 記錄總數; 也就是總行數 }
TClientDataSet.GetFieldList(); { 根據指定的幾個字段名獲取字段對象的列表 }
TClientDataSet.GetFieldData(); { 把指定字段的值寫入一個緩沖區 }
TClientDataSet.GetCurrentRecord(); { 把當前記錄(不包括 Bolb 字段)寫入到一個緩沖區 }
關鍵字: TClientDataSet GdiPlus[1] RegularExpreio GdiPlus XMLDocument 類詳解
TClientDataSet[5]: 讀取數據。
讀取字段的結構信息可以使用 TFieldDef 對象(一般來源于 FieldDefs 或 FieldDefList);
現在要讀取其中的數據, 應該使用 TField 對象(一般來源于 Fields 或 FieldList).
Fields[0]、Fields[1] ... Fields[n] 獲取的是當前行的第幾個字段, 可用 Next、RecNo 等指定當前位置(行).
下面的例子使用了 Common Files\CodeGear Shared\Data\holdings.xml, 若更換文件需調整代碼.
這是 holdings.xml 的字段信息:
ACCT_R { 類型是 r8, 對應 ftFloat, 相當于 Double }
SYMBOL { 類型是 string, 對應 ftString, 相當于 AiString; 指定 Size=7, 加上空結束, 大小是 8 }
SHARES { 類型是 r8, 對應 ftFloat, 相當于 Double }
PUR_PRICE { 類型是 r8, 對應 ftFloat, 相當于 Double }
PUR_DATE { 類型是 date, 對應 ftInteger, 相當于 Integer }
先窗體上放置 ClientDataSet1、DataSource1、DBGrid1、Memo1 和七個 Button, 然后:
{ 準備數據, 也可在設計時完成 }
procedure TForm1.FormCreate(Sender: TObject);
begin
ChDir(GetEnvironmentVariable('CommorogramFiles') + '\CodeGear Shared\Data\');
ClientDataSet1.LoadFromFile('holdings.xml');
DBGrid1.DataSource := DataSource1;
DataSource1.DataSet := ClientDataSet1;
end;
{ 讀取字段值的幾種方法 }
procedure TForm1.Button1Click(Sender: TObject);
var
v1,v2,v3,v4,v5,v6,v7,v8: Variant;
num: Double;
fName: string;
begin
{ 獲取首字段的名稱 }
fName := ClientDataSet1.Fields[0].FieldName;
{ 獲取第一個字段值的幾種方法: }
v1 := ClientDataSet1.Fields[0].Value;
v2 := ClientDataSet1.FieldByName(fName).Value;
v3 := ClientDataSet1.FindField(fName).Value;
v4 := ClientDataSet1.FieldValues[fName];
v5 := ClientDataSet1.FieldList[0].Value;
v6 := ClientDataSet1.FieldList.FieldByName(fName).Value;
v7 := ClientDataSet1.FieldList.Find(fName).Value;
v8 := ClientDataSet1.FieldList.Fields[0].Value;
{ 已知這個字段是 Double 類型的, 可同時轉換 }
num := ClientDataSet1.Fields[0].AsFloat;
{ 查看結果 }
with Memo1.Lines do begin
Clear;
Add(v1); Add(v2); Add(v3); Add(v4); Add(v5); Add(v6); Add(v7); Add(v8);
Add(FloatToStr(num));
end;
end;
{ 遍歷當前行字段的幾種方法 }
procedure TForm1.Button2Click(Sender: TObject);
var
Field: TField;
i: Integer;
begin
Memo1.Clear;
for Field in ClientDataSet1.Fields do
begin
Memo1.Lines.Add(Field.Value);
end;
Memo1.Lines.Add('');
for i := 0 to ClientDataSet1.FieldCount - 1 do
begin
Memo1.Lines.Add(ClientDataSet1.Fields[i].Value);
end;
Memo1.Lines.Add('');
for i := 0 to ClientDataSet1.FieldList.Count - 1 do
begin
Memo1.Lines.Add(ClientDataSet1.FieldList[i].Value);
end;
Memo1.Lines.Add('');
end;
{ First、Next、Last、Prior、RecNo }
procedure TForm1.Button3Click(Sender: TObject);
var
s1,s2,s3: string;
begin
{ 讀取第二行第二個字段 }
ClientDataSet1.First;
ClientDataSet1.Next;
s1 := ClientDataSet1.Fields[1].Atring;
{ 讀取倒數第二行第二個字段 }
ClientDataSet1.Last;
ClientDataSet1.Prior;
s2 := ClientDataSet1.Fields[1].Atring;
{ 讀取第四行第二個字段 }
ClientDataSet1.RecNo := 4;
s3 := ClientDataSet1.Fields[1].Atring;
{ 查看結果 }
with Memo1.Lines do begin
Clear;
Add('第二行第二個字段: ' + s1);
Add('倒數第二行第二個字段: ' + s2);
Add('第四行第二個字段: ' + s3);
end;
end;
{ 遍歷指定字段的所有記錄 }
procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
begin
if not ClientDataSet1.Bof then ClientDataSet1.First;
Memo1.Clear;
while not ClientDataSet1.Eof do
begin
Memo1.Lines.Add(ClientDataSet1.FieldList[0].Value);
ClientDataSet1.Next;
end;
Memo1.Lines.Add('-------');
for i := 1 to ClientDataSet1.RecordCount do
begin
ClientDataSet1.RecNo := i;
Memo1.Lines.Add(ClientDataSet1.FieldList[1].Value);
end;
end;
{ 通過 GetFieldList 可以讀取幾個指定字段的 TField 對象的列表 }
procedure TForm1.Button5Click(Sender: TObject);
var
List: TList;
Field: TField;
i: Integer;
begin
List := TList.Create;
ClientDataSet1.GetFieldList(List, 'ACCT_R; SYMBOL; SHARES');
Memo1.Clear;
for i := 0 to List.Count - 1 do
begin
Field := List[i];
Memo1.Lines.Add(Field.Value);
end;
List.Free;
end;
{ GetFieldData 讀取字段值到指針 }
procedure TForm1.Button6Click(Sender: TObject);
var
F1: Double;
F2: array[0..7] of AiChar;
begin
ClientDataSet1.GetFieldData(ClientDataSet1.Fields[0], @F1);
ClientDataSet1.GetFieldData(ClientDataSet1.Fields[1], @F2);
with Memo1.Lines do begin
Clear;
Add(FloatToStr(F1));
Add(F2);
end;
end;
//這是后面的例子用到的函數, 轉換 TClientDataSet 時間格式到 TDateTime
function TDateTimeRecToDateTime(DataType: TFieldType; Data: TDateTimeRec): TDateTime;
var
TimeStamp: TTimeStam
begin
case DataType of
ftDate:
begin
TimeStamp.Time := 0;
TimeStamp.Date := Data.Date;
end;
ftTime:
begin
TimeStamp.Time := Data.Time;
TimeStamp.Date := DateDelta;
end;
else
try
TimeStamp := MSecsToTimeStamp(Data.DateTime);
except
TimeStamp.Time := 0;
TimeStamp.Date := 0;
end;
end;
Result := TimeStampToDateTime(TimeStamp);
end;
{ GetCurrentRecord 是把當前行的所有字段(不包括 Blob 字段)讀入到緩沖區 }
procedure TForm1.Button7Click(Sender: TObject);
type
THoldingtruct = packed record { 這是根據 holdings.xml 建立的數據結構 }
ACCT_R: Double;
SYMBOL: array[0..7] of AiChar; { 其 Size=7, 但后面還有個 #0 }
SHARES: Double;
PUR_PRICE: Double;
PUR_DATE: Integer;
// Other: array[0..4] of Byte; { 它后面還空著若干字節, 其字節數等于前面的字段數 }
end;
var
buf: THoldingtruct;
DateTimeRec: TDateTimeRec;
begin
//ShowMeage(IntToStr(ClientDataSet1.RecordSize)); { 可通過這個值對照上面的結構 }
if ClientDataSet1.GetCurrentRecord(@buf) then with Memo1.Lines do
begin
Clear;
Add(FloatToStr(buf.ACCT_R));
Add(buf.SYMBOL);
Add(FloatToStr(buf.SHARES));
Add(FloatToStr(buf.PUR_PRICE));
DateTimeRec.Date := buf.PUR_DATE;
Add(DateToStr(TDateTimeRecToDateTime(ftDate, DateTimeRec)));
end;
end;
總結
以上是生活随笔為你收集整理的clientdataset 遍历字段_Delphi TClientDataSet[五]: 读取数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse分级,分级列表显示 - b
- 下一篇: python制作圆形按钮_C#圆形按钮,