全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1438
推到 Plurk!
推到 Facebook!

Delphi的變數與SQL指令的用法?

答題得分者是:Chance36
zeke
一般會員


發表:6
回覆:8
積分:2
註冊:2004-02-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-06 17:34:38 IP:61.216.xxx.xxx 未訂閱
程式部分如下 var Temp_i: integer; Temp_qt: integer; procedure Torder_add_form.Button1Click(Sender: TObject); begin with ADOQuery2 do begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Select product_qt from Product_store'); ADOQuery2.SQL.Add('Where product_num LIKE ''%' DBLookupComboBox2.Text '%'' '); ADOQuery2.Open; Temp_i := strtoint(Edit2.Text); Temp_qt := ADOQuery2.FieldByName('product_qt').AsInteger; Temp_qt := Temp_qt - Temp_i; end; with ADOQuery2 do begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Update Product_store'); ADOQuery2.SQL.Add('Set product_qt = Temp_qt '); ADOQuery2.SQL.Add('Where product_num LIKE ''%' DBLookupComboBox2.Text '%'' '); ADOQuery2.Open; end; end; 問題一 ADOQuery2.SQL.Add('Set product_qt = Temp_qt ');中,Temp_qt為Dephi的變數要如何指定給SQL中的product_qt??? 問題二 ADOQuery2.SQL.Add('Where product_num LIKE ''%' DBLookupComboBox2.Text '%'' ');中, 其實DBLookupComboBox2.Text的值就是我要收詢的值,並不要用到%,可是把%一拿掉就會出錯,我該如何改呢??? 如程式有其他錯誤,煩請教導,謝謝!!!
arvinhsu
一般會員


發表:0
回覆:10
積分:7
註冊:2003-04-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-06 18:15:31 IP:210.58.xxx.xxx 未訂閱
你的程式邏輯有點怪怪的,因為若是照這個SQL 下去有可能會產生多筆資料所以你可能要確定只會查詢到單一筆資料。 若確定只會查出單一筆資料的話那你只需要改下半段的程式: ADOQuery2.SQL.Add('Set product_qt = Temp_qt '); ==> ADOQuery2.SQL.Add('Set product_qt = ' Temp_qt );
zeke
一般會員


發表:6
回覆:8
積分:2
註冊:2004-02-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-06 18:49:53 IP:61.216.xxx.xxx 未訂閱
to arvinhsu:    我要查的的確是一筆不會重複的資料,但是我卻不知道,如何修改 ADOQuery2.SQL.Add('Where product_num LIKE ''%'+DBLookupComboBox2.Text+'%'' ');    我嘗試著用你教的方法將 ADOQuery2.SQL.Add('Set product_qt = Temp_qt '); 改成 ADOQuery2.SQL.Add('Set product_qt = ' + Temp_qt ); 但是程式執行後卻出現Where附近語法有錯誤.    
引言: 你的程式邏輯有點怪怪的,因為若是照這個SQL 下去有可能會產生多筆資料所以你可能要確定只會查詢到單一筆資料。 若確定只會查出單一筆資料的話那你只需要改下半段的程式: ADOQuery2.SQL.Add('Set product_qt = Temp_qt '); ==> ADOQuery2.SQL.Add('Set product_qt = ' Temp_qt );
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-06 19:48:52 IP:211.20.xxx.xxx 未訂閱
引言: with ADOQuery2 do begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Update Product_store'); ADOQuery2.SQL.Add('Set product_qt = Temp_qt '); ADOQuery2.SQL.Add('Where product_num LIKE ''%' DBLookupComboBox2.Text '%'' '); ADOQuery2.Open; end; end;
若product_num為文字欄位則改成下列:    with ADOQuery2 do
    begin
      ADOQuery2.Close;
      ADOQuery2.SQL.Clear;
      ADOQuery2.SQL.Add('Update Product_store');
      ADOQuery2.SQL.Add('Set product_qt = '+IntToStr(Temp_qt));
      ADOQuery2.SQL.Add('Where product_num ='''+DBLookupComboBox2.Text+''' ');
      ADOQuery2.Open;
    end;
end;    若product_num為數值欄位則改成下列:    with ADOQuery2 do
    begin
      ADOQuery2.Close;
      ADOQuery2.SQL.Clear;
      ADOQuery2.SQL.Add('Update Product_store');
      ADOQuery2.SQL.Add('Set product_qt = '+IntToStr(Temp_qt));
      ADOQuery2.SQL.Add('Where product_num ='+DBLookupComboBox2.Text);
      ADOQuery2.Open;
    end;
end;
ps:上述+為全形請改半形的
zeke
一般會員


發表:6
回覆:8
積分:2
註冊:2004-02-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-06 22:16:46 IP:61.216.xxx.xxx 未訂閱
謝謝兩位的指導!! 我已經會指定數值與字串變數了 但還是遇到令我想破頭的問題,product_qt為數值product_num為文字時 with ADOQuery2 do begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Update Product_store'); ADOQuery2.SQL.Add('Set product_qt = ' inttostr(Temp_qt)); ADOQuery2.SQL.Add('Where product_num = ''' DBLookupComboBox2.Text ''' '); ADOQuery2.Open; end; 執行後出現'ADOQuery2:Command Text does not return a result set' 發表人 - zeke 於 2004/02/06 22:17:38 發表人 - zeke 於 2004/02/06 22:18:15
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-06 23:11:56 IP:211.76.xxx.xxx 未訂閱
您好: update必須用ADOQuery2.ExecSQL; 不能用ADOQuery2.Open; 因為ADOQuery2.Open;需有回傳值,而update沒有 ~~應無所住而生其心~~
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-06 23:13:40 IP:211.20.xxx.xxx 未訂閱
抱歉 我疏忽了    最後的AdoQuery1.Open; // Select 指令使用的 改成AdoQuery1.ExecSQL;// 無傳回值的sql指令
zeke
一般會員


發表:6
回覆:8
積分:2
註冊:2004-02-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-06 23:31:37 IP:61.216.xxx.xxx 未訂閱
感謝 arvinhsu 和 Chance36 與 terrychen 三位前輩的指導!!!
系統時間:2024-05-13 0:33:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!