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

縮短判斷式的迴圈

尚未結案
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-15 20:15:28 IP:61.59.xxx.xxx 未訂閱
對不起關於該問題之主題不知應怎麼發問 我的問題是X= 1~10 當X=1時A1欄之值=QTY,當X=2時A2欄之值=QTY,.... 但這樣就要寫很長的判斷式 ----------------------------------------------------------------- IF X=1 Then Begin Query.ParamByName('A1').AsInteger := QTY; Query.ParamByName('A2').AsInteger := 0; . . Query.ParamByName('A10').AsInteger := 0; End; IF X=2 Then Begin Query.ParamByName('A1').AsInteger := 0; Query.ParamByName('A2').AsInteger := QTY; . . Query.ParamByName('A10').AsInteger := 0; End; ----------------------------------------------------------------- 請問 1.如果欄位名剛好為'名稱' 同X之數字順序時,如A1,A2....A10時 FD := A IntToStr(X); Query.ParamByName('' FD '').AsInteger := ??; 2.如果欄位名沒有規則,如A,B,C....時 除了用比較規矩(笨)的方法外有沒有比較好的方法?
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-15 20:36:38 IP:211.76.xxx.xxx 未訂閱
規則性 Query.ParamByName('A1').AsInteger := 0; Query.ParamByName('A2').AsInteger := 0; . . Query.ParamByName('A9').AsInteger := 0; Query.ParamByName('A10').AsInteger := 0; Query.ParamByName('A'+inttostr(X)).AsInteger := QTY; 不規則性 Fd='FF' Query.ParamByName('AA').AsInteger := 0; Query.ParamByName('BB').AsInteger := 0; . . Query.ParamByName(Fd).AsInteger := QTY;
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-15 21:03:08 IP:218.16.xxx.xxx 未訂閱
若沒有其他 Params, 無論欄位名有沒有規則 :
var i : integer
  for i := 0 to Query.ParamCount - 1 do
    Query.Params[i].AsInteger = 0;
  Query.Params[X - 1].AsInteger = QTY;
若中間穿插其他 Params :
有規則
var i : integer
  for i := 1 to 10 do
    Query.ParamByName('A'   IntToStr(i)).AsInteger := 0;
  Query.ParamByName('A'   IntToStr(X)).AsInteger := QTY;
 
沒規則
Query.ParamByName('A').AsInteger := 0;
Query.ParamByName('C').AsInteger := 0;
Query.ParamByName('E').AsInteger := 0;
Query.ParamByName('F').AsInteger := 0;
Query.ParamByName('G').AsInteger := 0;
Query.ParamByName('R').AsInteger := 0;
Query.ParamByName('Q').AsInteger := 0;
Query.ParamByName('X').AsInteger := 0;
Query.ParamByName('Y').AsInteger := 0;
Query.ParamByName('Z').AsInteger := 0;    Case X of
1 : Query.ParamByName('A').AsInteger := QTY;
2 : Query.ParamByName('C').AsInteger := QTY;
3 : Query.ParamByName('E').AsInteger := QTY;
4 : Query.ParamByName('F').AsInteger := QTY;
5 : Query.ParamByName('G').AsInteger := QTY;
6 : Query.ParamByName('R').AsInteger := QTY;
7 : Query.ParamByName('Q').AsInteger := QTY;
8 : Query.ParamByName('X').AsInteger := QTY;
9 : Query.ParamByName('Y').AsInteger := QTY;
10 : Query.ParamByName('Z').AsInteger := QTY;
END;
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-15 21:16:46 IP:61.221.xxx.xxx 未訂閱
1. 就是利用 'F' + IntToStr
for i := 1 to 10 do
begin
  Query.ParamByName('F'+IntToStr(i)).AsInteger := 0;
end;
Query.ParamByName('F'+IntToStr(X)).AsInteger := QTY;
2. 的話可以利用陣列來預存欄位名比較快. A, B, C 還是算有規律的. A, B, C...., J 的話
var
  c, k: char;
begin
  k := 'D';
  for c:= 'A' to 'C' do
  begin
    Query.ParamByName('F'+c).AsInteger := 0;
  end;
  Query.ParamByName('F'+k).AsInteger := QTY;
end;
若沒有規律的話, 就這樣子做.
var
  FFieldName: Array[1..10] of String;
  XFieldName: String;
  i: integer;
begin
  FFieldName[1] := 'Qu';
  FFieldName[2] := 'FB';
  //..
  FFieldName[10] := 'IODD';      XFieldName:='FB';      for i := 1 to 10 do
  begin
    Query.ParamByName(FFieldName[i]).AsInteger := 0;
  end;
  Query.ParamByName(XFieldName).AsInteger := QTY;
end;
系統時間:2024-06-27 2:54:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!