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

請問在ADOQuery中使用引數在SQL內

尚未結案
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-28 18:25:38 IP:163.23.xxx.xxx 未訂閱
請問: 因為目前我用ADOQuery來寫SQL內的敘述但只能成功的傳進一個參數,要傳二個參數卻失敗,在DBGrid顯示不出來: ADOQuery1->Parameters->CreateParameter("chosecon",ftString,pdInput,30,Edit10->Text); ADOQuery1->SQL->Add("SELECT * FROM Adder WHERE Language_type=:chosecon"); ---上面可以成功的在DBGrid中,顯示在EDit所設定的值。 ---但是--- ADOQuery1->Parameters->CreateParameter("chosecon",ftString,pdInput,30,Edit10->Text); ADOQuery1->Parameters->CreateParameter("fieldname",ftString,pdInput,30,Edit11->Text); ADOQuery1->SQL->Add("SELECT * FROM Adder WHERE :fieldname=:chosecon"); ---卻不行,請問是否有違反語法規則 發表人 - erasy 於 2004/07/28 18:26:49 發表人 - erasy 於 2004/07/28 21:37:09
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-29 00:22:52 IP:211.162.xxx.xxx 未訂閱
Hi,erasy,您好! 不妨看看下面的code,希望能對您解決問題有所幫助,謝謝:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        AnsiString str1,str2,sSql;
        str1 = Edit10->Text;
        str2 = Edit11->Text;
        sSql = "select * from Table1 where "   str1   "='"   str2   "'";
        ADOQuery1->Close();
        ADOQuery1->SQL->Clear();
        ADOQuery1->SQL->Text = sSql;
        ADOQuery1->Open();
}
當需要將兩個參數值賦給sql語句時,我們在外面做動作就可以了。請留意一下,where後面要空一格,要不然就和str1連在一起了哦!您也可以結合下面這篇來看看 >人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網
------
人生在勤,不索何获?
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-29 00:31:45 IP:163.23.xxx.xxx 未訂閱
謝謝bigdogchina指教,這個方法我有寫過,只是基於好奇的心態,想試試看。
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-29 08:39:21 IP:211.20.xxx.xxx 未訂閱
請注意 在使用CreateParameter的方式時 SQL中的:chosecon前後方有沒有單引號 再想一下你的:fieldname是否需要單引號 你就會知道答案了
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-29 16:12:10 IP:163.23.xxx.xxx 未訂閱
引言: 請注意 在使用CreateParameter的方式時 SQL中的:chosecon前後方有沒有單引號 再想一下你的:fieldname是否需要單引號 你就會知道答案了
請問folkchen,在SQL語言中:chosecon原本應該是要加單引號,可是這邊卻沒有是因為我CreateParameter中變數加了"chosecon"的關係嗎?因為:fieldname應該是不需要單引號。
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-29 17:25:55 IP:211.20.xxx.xxx 未訂閱
>>在SQL語言中:chosecon原本應該是要加單引號,可是這邊卻沒有是因為我CreateParameter中變數加了"chosecon"的關係嗎?    NO~~ CreateParameter中變數加了 雙引號 是C要知道那裡到那裡是你要輸入的東東 它被丟進去SQL字串中,就會被帶上 單引號 了 >>因為:fieldname應該是不需要單引號。 原因同上 所以 :fieldname 會被帶上單引號,故會被SQL當成字串處理 SO~~ fieldname 要用變數字串去串它
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-29 20:12:48 IP:163.23.xxx.xxx 未訂閱
引言: >>在SQL語言中:chosecon原本應該是要加單引號,可是這邊卻沒有是因為我CreateParameter中變數加了"chosecon"的關係嗎? NO~~ CreateParameter中變數加了 雙引號 是C要知道那裡到那裡是你要輸入的東東 它被丟進去SQL字串中,就會被帶上 單引號 了 >>因為:fieldname應該是不需要單引號。 原因同上 所以 :fieldname 會被帶上單引號,故會被SQL當成字串處理 SO~~ fieldname 要用變數字串去串它
請問folkchen,妳的意思是說,把 ADOQuery1->SQL->Add("statement"); statement拿出來用字串的方式處理嗎?
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-30 08:19:18 IP:211.20.xxx.xxx 未訂閱
AnsiString SQL; AnsiString pFieldName; pFieldName = "Language_type" SQL = "SELECT * FROM Adder WHERE " pFieldName "=:chosecon" ADOQuery1->Parameters->CreateParameter("chosecon",ftString,pdInput,30,Edit10->Text); ADOQuery1->SQL->Add(SQL);
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-30 09:39:33 IP:163.23.xxx.xxx 未訂閱
謝謝foklchen指教,這個方法我知道,我只是想說CreateParameter產生的fieldname,能不能就直接在SQL敘述中做處理。
timhuang
尊榮會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-01 21:47:49 IP:61.62.xxx.xxx 未訂閱
引言: CreateParameter產生的fieldname,能不能就直接在SQL敘述中做處理。
Hi, 基本上是不行的, 若要使用 fieldname 的話, 必需是下在 sql command 之中, 而變數及參數等資訊, 可以放在 sql command 中或是以 parameters 處理皆可!
系統時間:2024-05-04 20:07:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!