日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

clientdataset 遍历字段_Delphi TClientDataSet[五]: 读取数据

發布時間:2024/9/27 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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[五]: 读取数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。