縮短判斷式的迴圈 |
尚未結案
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
對不起關於該問題之主題不知應怎麼發問
我的問題是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 發送簡訊給我 |
規則性
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 發送簡訊給我 |
若沒有其他 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 發送簡訊給我 |
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; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |