免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
TClientDataSet[5]: 讀取數(shù)據(jù)

本例用到:
TClientDataSet.Fields[];           { 字段集合; 它比 FieldList 有更多功能, 如可獲取嵌套字段 }TClientDataSet.FieldList[];        { 字段列表; 它比 Fields 輕便, 如果只是取值用它快一些 }TClientDataSet.FieldByName();      { 根據(jù)字段名稱獲取字段對(duì)象; 獲取一個(gè)字段對(duì)象時(shí)它比上兩個(gè)快 }TClientDataSet.FindField();        { 根據(jù)字段名稱查找字段對(duì)象 }TClientDataSet.FieldValues[];      { 根據(jù)字段名稱獲取字段值; 如果僅是獲取字段值, 這個(gè)最快 }TClientDataSet.First;              { 到第一個(gè)記錄 }TClientDataSet.Next;               { 到下一個(gè)記錄 }TClientDataSet.Last;               { 到最后一個(gè)記錄 }TClientDataSet.Prior;              { 到上一個(gè)記錄 }TClientDataSet.RecNo;              { 設(shè)置或讀取當(dāng)前記錄的位置 }TClientDataSet.Bof;                { 當(dāng)前位置是否是第一個(gè)記錄 }TClientDataSet.Eof;                { 當(dāng)前位置是否是最后一個(gè)記錄 }TClientDataSet.RecordSize;         { 一個(gè)記錄的大小; 所謂一個(gè)記錄就是當(dāng)前行的所有字段 }TClientDataSet.RecordCount;        { 記錄總數(shù); 也就是總行數(shù) }TClientDataSet.GetFieldList();     { 根據(jù)指定的幾個(gè)字段名獲取字段對(duì)象的列表 }TClientDataSet.GetFieldData();     { 把指定字段的值寫入一個(gè)緩沖區(qū) }TClientDataSet.GetCurrentRecord(); { 把當(dāng)前記錄(不包括 Bolb 字段)寫入到一個(gè)緩沖區(qū) }

讀取字段的結(jié)構(gòu)信息可以使用 TFieldDef 對(duì)象(一般來源于 FieldDefs 或 FieldDefList);

現(xiàn)在要讀取其中的數(shù)據(jù), 應(yīng)該使用 TField 對(duì)象(一般來源于 Fields 或 FieldList).

Fields[0]、Fields[1] ... Fields[n] 獲取的是當(dāng)前行的第幾個(gè)字段, 可用 Next、RecNo 等指定當(dāng)前位置(行).

下面的例子使用了 Common Files\CodeGear Shared\Data\holdings.xml, 若更換文件需調(diào)整代碼.

這是 holdings.xml 的字段信息:
ACCT_NBR  { 類型是 r8, 對(duì)應(yīng) ftFloat, 相當(dāng)于 Double }SYMBOL    { 類型是 string, 對(duì)應(yīng) ftString, 相當(dāng)于 AnsiString; 指定 Size=7, 加上空結(jié)束, 大小是 8 }SHARES    { 類型是 r8, 對(duì)應(yīng) ftFloat, 相當(dāng)于 Double }PUR_PRICE { 類型是 r8, 對(duì)應(yīng) ftFloat, 相當(dāng)于 Double }PUR_DATE  { 類型是 date, 對(duì)應(yīng) ftInteger, 相當(dāng)于 Integer }

先窗體上放置 ClientDataSet1、DataSource1、DBGrid1、Memo1 和七個(gè) Button, 然后:

{ 準(zhǔn)備數(shù)據(jù), 也可在設(shè)計(jì)時(shí)完成 }procedure TForm1.FormCreate(Sender: TObject);begin  ChDir(GetEnvironmentVariable('CommonProgramFiles') + '\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,v9: Variant;  num: Double;  fName: string;begin  { 獲取首字段的名稱 }  fName := ClientDataSet1.Fields[0].FieldName;  { 獲取第一個(gè)字段值的幾種方法: }  v1 := ClientDataSet1.Fields[0].Value;  v2 := ClientDataSet1.FieldByName(fName).Value;  v3 := ClientDataSet1.FindField(fName).Value;  v4 := ClientDataSet1.FieldValues[fName];  v5 := ClientDataSet1[fName]; { FieldValues 是默認(rèn)的數(shù)組屬性 }  v6 := ClientDataSet1.FieldList[0].Value;  v7 := ClientDataSet1.FieldList.FieldByName(fName).Value;  v8 := ClientDataSet1.FieldList.Find(fName).Value;  v9 := ClientDataSet1.FieldList.Fields[0].Value;  { 已知這個(gè)字段是 Double 類型的, 可同時(shí)轉(zhuǎn)換 }  num := ClientDataSet1.Fields[0].AsFloat;  { 查看結(jié)果 }  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;{ 遍歷當(dāng)前行字段的幾種方法 }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  { 讀取第二行第二個(gè)字段 }  ClientDataSet1.First;  ClientDataSet1.Next;  s1 := ClientDataSet1.Fields[1].AsString;  { 讀取倒數(shù)第二行第二個(gè)字段 }  ClientDataSet1.Last;  ClientDataSet1.Prior;  s2 := ClientDataSet1.Fields[1].AsString;  { 讀取第四行第二個(gè)字段 }  ClientDataSet1.RecNo := 4;  s3 := ClientDataSet1.Fields[1].AsString;  { 查看結(jié)果 }  with Memo1.Lines do begin    Clear;    Add('第二行第二個(gè)字段: ' + s1);    Add('倒數(shù)第二行第二個(gè)字段: ' + s2);    Add('第四行第二個(gè)字段: ' + 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 可以讀取幾個(gè)指定字段的 TField 對(duì)象的列表 }procedure TForm1.Button5Click(Sender: TObject);var  List: TList;  Field: TField;  i: Integer;begin  List := TList.Create;  ClientDataSet1.GetFieldList(List, 'ACCT_NBR; 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 AnsiChar;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;//這是后面的例子用到的函數(shù), 轉(zhuǎn)換 TClientDataSet 時(shí)間格式到 TDateTimefunction TDateTimeRecToDateTime(DataType: TFieldType; Data: TDateTimeRec): TDateTime;var  TimeStamp: TTimeStamp;begin  case DataType of    ftDate:      begin        TimeStamp.Time := 0;        TimeStamp.Date := Data.Date;      end;    ftTime:      begin        TimeStamp.Time := Data.Time;        TimeStamp.Date := DateDelta;      endelse    try      TimeStamp := MSecsToTimeStamp(Data.DateTime);    except      TimeStamp.Time := 0;      TimeStamp.Date := 0;    endend;  Result := TimeStampToDateTime(TimeStamp);end;{ GetCurrentRecord 是把當(dāng)前行的所有字段(不包括 Blob 字段)讀入到緩沖區(qū) }procedure TForm1.Button7Click(Sender: TObject);type  THoldingsStruct = packed record { 這是根據(jù) holdings.xml 建立的數(shù)據(jù)結(jié)構(gòu) }    ACCT_NBR: Double;    SYMBOL: array[0..7] of AnsiChar; { 其 Size=7, 但后面還有個(gè) #0 }    SHARES: Double;    PUR_PRICE: Double;    PUR_DATE: Integer;//    Other: array[0..4] of Byte; { 它后面還若干字節(jié)偏移, 測(cè)試時(shí)其字節(jié)數(shù)等于前面的字段數(shù) }  end;var  buf: THoldingsStruct;  DateTimeRec: TDateTimeRec;begin  //ShowMessage(IntToStr(ClientDataSet1.RecordSize)); { 可通過這個(gè)值對(duì)照上面的結(jié)構(gòu) }  if ClientDataSet1.GetCurrentRecord(@buf) then with Memo1.Lines do  begin    Clear;    Add(FloatToStr(buf.ACCT_NBR));    Add(buf.SYMBOL);    Add(FloatToStr(buf.SHARES));    Add(FloatToStr(buf.PUR_PRICE));    DateTimeRec.Date := buf.PUR_DATE;    Add(DateToStr(TDateTimeRecToDateTime(ftDate, DateTimeRec)));  end;end;
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【delphi】ClientDataSet詳細(xì)解讀
ClientDataset的使用
delphi的memo問題,怎么將在memo中輸入換行后的多行數(shù)據(jù)都保存到數(shù)據(jù)庫的一個(gè)字段下面
Delphi中關(guān)于NMUDP控件的用法(原創(chuàng))
delphi 收發(fā)短信
delphi中如何刪除dcef3的cookie和緩存?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服