線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4025
推到 Plurk!
推到 Facebook!

陣列改用StringList

尚未結案
amandaLi3
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-29 11:22:37 IP:210.192.xxx.xxx 未訂閱
請教各位: 我怎麼將下面的陣列用法改成StringList? 找了很多文章,都說StringList也可以用Recored,可是怎麼用呢? 可否舉例說明? type myWacRec=Record item : String; price : real; num : Integer; end; . . . //若是StringList,下面怎麼改呢? Var myAry : array of myWacRec; begin SetLength(myAry,10); myAry[0].item = 'AAAA'; myAry[0].price = 20.9; myAry[0].num = 10' . . . end; 謝謝!!
h@visli
資深會員


發表:101
回覆:417
積分:418
註冊:2004-02-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-29 12:32:03 IP:222.248.xxx.xxx 未訂閱
pmyWacRec = ^myWacRec; myWacRec=Record item : String; price : real; num : Integer; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var ts: tstrings; Rec: pmyWacRec; begin GetMem(Rec, SizeOf(Rec)); Rec.item := 'AAA'; Rec.price := 21.9; Rec.num := 3; ts := tstringlist.Create; ts.AddObject(Rec.item, TObject(Rec)); end; ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
amandaLi3
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-29 14:53:14 IP:210.192.xxx.xxx 未訂閱
不好意思,再請教一下,放進去後,我該如何應用呢? 例如,我怎麼去找出item='1110',它的price/num的值呢? 是不是要用indexof找出它的位置,可是該怎麼寫... table t1: item price num ---- ----- ---- 1109 12.92 3 1110 10.53 1 1112 15.15 2 --------------------------- type pmyRec = ^myRec; myRec=Record item : String; price : real; num : Integer; end; procedure TForm1.Button1Click(Sender: TObject); var ts: TstringList; Rec: pmyRec; begin ts := tstringlist.Create; GetMem(Rec, SizeOf(Rec)); --->這裡設定size,需要依t1的列數決定嗎? with q1 do begin Close; SQL.Text := 'Select item_id ,price,qty From t1 '; Open; While not eof do begin Rec.item := FieldByName('item_id').AsString; Rec.price := FieldByName('price').AsFloat; Rec.num := FieldByName('qty').AsInteger; ts.AddObject(Rec.item, TObject(Rec)); next; end; <再來怎麼搜尋資料呢?> ts.Free; end; end; 謝謝!!
h@visli
資深會員


發表:101
回覆:417
積分:418
註冊:2004-02-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-29 18:23:15 IP:222.248.xxx.xxx 未訂閱
type
  pmyRec = ^myRec;
  myRec=Record
    item  : String;
    price : real;
    num   : Integer;
  end;    procedure TForm1.Button1Click(Sender: TObject);
var
  ts: TstringList;
  Rec, freeRec: pmyRec;
  Lable_price: real;
  i: integer;
begin
  ts := tstringlist.Create;
  GetMem(Rec, SizeOf(Rec)); --->這裡設定size,需要依t1的列數決定嗎?
  //不需要,與t1的列數無關
  with q1 do
  begin
    Close;
    SQL.Text := 'Select item_id ,price,qty From t1 ';
    Open;
    While not eof do
    begin
      Rec.item := FieldByName('item_id').AsString;
      Rec.price := FieldByName('price').AsFloat;
      Rec.num := FieldByName('qty').AsInteger;
      ts.AddObject(Rec.item, TObject(Rec));
      next;
    end;
<再來怎麼搜尋資料呢?>
    Lable_price := pmyRec(ts.Objects[2]).price;        //ts釋放之前記得先把對應的Object(即pmyRec所指內存給釋放了)
    for i := ts.Count - 1 downto 0 do
    begin
      freeRec := pmyRec(ts.Objects[i]);
      ts.Objects[i] := nil;
      FreeMem(FreeRec, SizeOf(freeRec));
    end;
 
    ts.Free;
  end;
end;
---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 --------------------------- 發表人 - h@visli 於 2005/09/29 18:24:02
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
amandaLi3
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-30 09:33:38 IP:210.192.xxx.xxx 未訂閱
不好意思,我表達的不夠清楚 我想知道怎麼運用index... 因為我只知道item,所以必須靠著item去找出它的位置,再去找出price //我怎麼知道是在2這個位置呢? Lable_price := pmyRec(ts.Objects[2]).price; 以上,謝謝!!
h@visli
資深會員


發表:101
回覆:417
積分:418
註冊:2004-02-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-30 10:16:47 IP:222.248.xxx.xxx 未訂閱
引言: 不好意思,我表達的不夠清楚 我想知道怎麼運用index... 因為我只知道item,所以必須靠著item去找出它的位置,再去找出price //我怎麼知道是在2這個位置呢? Lable_price := pmyRec(ts.Objects[2]).price; 以上,謝謝!!
我不清楚你的具體應用,如果你程序中是要把這個TStrings顯示出來的話,例如運用了TListBox等可視化組件,那麼就很簡單了,直接可以取ListBox1.ItemIndex為當前選擇的Index。 而如果你程序中并沒有把這個TStrings顯示出來的話,要在ts中進行定位,就需要循環查找比較了: [code] for i := ts.Count - 1 downto 0 do begin if pmyRec(ts.Objects[i]).item = 'AAA' then begin _price := pmyRec(ts.Objects[i]).price; break; end; end; ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
amandaLi3
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-30 11:12:04 IP:210.192.xxx.xxx 未訂閱
了解,謝謝!! 我以為也可以像一般StringList一樣用indexOf(),就可以找出他的位置了 因為料號資料量大,所以我想先將符合條件的料號找出來,將其金額/數量都先放進陣列 才不用每次都進資料庫做select,來找金額或數量。
h@visli
資深會員


發表:101
回覆:417
積分:418
註冊:2004-02-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-30 15:39:29 IP:222.248.xxx.xxx 未訂閱
引言: 了解,謝謝!! 我以為也可以像一般StringList一樣用indexOf(),就可以找出他的位置了 因為料號資料量大,所以我想先將符合條件的料號找出來,將其金額/數量都先放進陣列 才不用每次都進資料庫做select,來找金額或數量。
這樣的話,倒不如直接采用數組(臺灣叫陣列)的形式, 而不用再使用TStrings:
procedure TForm1.Button1Click(Sender: TObject);
type
  myRec=Record
    item : String;
    price : real;
    num : Integer;
  end;
var
  ArrRec: array of myRec;
  L: integer;
begin
  Q1.SQL.Clear;
  Q1.SQL.Add('select count(*) from t1');
  Q1.Open;
  L := Q1.Fields[0].AsInteger;
  if L = 0 then exit;  //退出
  SetLength(ArrRec, L);
  Q1.SQL.Clear;
  Q1.SQL.Add('Select item_id ,price,qty From t1');
  Q1.Open;
  for L := 0 to Q1.RecordCount - 1 do
  begin
    ArrRec[L].item := Q1.FieldByName('item_id').AsString;
    ArrRec[L].price := Q1.FieldByName('price').AsFloat;
    ArrRec[L].num := Q1.FieldByName('qty').AsInteger;
    Q1.Next;
  end;
  //......//
end;
---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 --------------------------- 發表人 - h@visli 於 2005/09/30 15:42:42
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
amandaLi3
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-30 16:20:09 IP:210.192.xxx.xxx 未訂閱
謝謝 h@visli.... 我原本是用陣列的,想說看看有沒有辦法利用indexOf一行解決... 看樣子,還是不能偷懶的 
h@visli
資深會員


發表:101
回覆:417
積分:418
註冊:2004-02-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-09-30 21:45:37 IP:222.248.xxx.xxx 未訂閱
引言: 謝謝 h@visli.... 我原本是用陣列的,想說看看有沒有辦法利用indexOf一行解決... 看樣子,還是不能偷懶的 < face="Verdana, Arial, Helvetica"> 用indexOf也是可以的, 如: _price := pmyRec(ts.Objects[ts.indexof('AAA')]).price; ---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
系統時間:2017-12-13 15:28:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!