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

使用Parameter 發生錯誤

答題得分者是:GrandRURU
superrakce
一般會員


發表:24
回覆:35
積分:11
註冊:2006-10-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-06 15:42:10 IP:114.33.xxx.xxx 訂閱
 ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.Parameters.Clear;

ADOQuery1.SQL.Add(('SELECT 公司代碼 FROM AMST WHERE account=:IDD and password=:PWW'));
ADOQuery1.Parameters.CreateParameter('IDD',ftstring,pdInput,50,UserID);
ADOQuery1.Parameters.CreateParameter('PWW',ftstring,pdInput,50,UserPW);

ADOQuery1.Open;
ADOQuery1.First;

執行後跑出這麼一行錯誤訊息:'行1:' ':'附近的語法不正確
可是在網路上爬了很多文,Parameter 不就是要加上「 : 」
怎麼現在出錯了?

使用 Delphi 7 、資料庫是sql2000
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-06 16:07:06 IP:59.120.xxx.xxx 未訂閱
咦?
不是應該用「ADOQuery1.Parameters.ParamByName('IDD').Value := ValueName;」來指定嗎?

===================引 用 superrakce 文 章===================
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.Parameters.Clear;

ADOQuery1.SQL.Add(('SELECT 公司代碼 FROM AMST WHERE account=:IDD and password=:PWW'));
ADOQuery1.Parameters.CreateParameter('IDD',ftstring,pdInput,50,UserID);
ADOQuery1.Parameters.CreateParameter('PWW',ftstring,pdInput,50,UserPW);

ADOQuery1.Open;
ADOQuery1.First;

執行後跑出這麼一行錯誤訊息:'行1:' ':'附近的語法不正確
可是在網路上爬了很多文,Parameter 不就是要加上「 : 」
怎麼現在出錯了?

使用 Delphi 7 、資料庫是sql2000
superrakce
一般會員


發表:24
回覆:35
積分:11
註冊:2006-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-06 16:26:05 IP:114.33.xxx.xxx 訂閱
原來只要一行 Parameters.ParamByName('IDD').Value :=userid;
然後ADOQuery 的ParametersCheck 要設為true
ADOQuery 裡的Parameters也不需要設定
就可以達成了

突然從c# 轉過來,中毒太深,沒想到一行就全搞定了
這是原先我參考的資料

cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-05-06 19:46:12 IP:220.128.xxx.xxx 未訂閱
怎麼有那麼多人用 Parameter ?我以前的同事也是超愛用,但我卻嫌麻煩,都是用 Format(),一行搞定。

ADOQuery1..Close;
ADOQuery1.SQL := Format('SELECT 公司代碼 FROM AMST WHERE account=''%s'' and password=''%s''', [UserID, UserPW]);
ADOQuery1.SQL.Open;


sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-05-07 00:47:51 IP:114.35.xxx.xxx 訂閱
用 Parameter 的好處很多
1. 批次新增 / 更新時,SQL 只須被 database server 編譯一次,即可重複使用,提昇效能。
2. 不會受到輸入值中有單引號等特殊字元的影響,使得 SQL 字串出現錯誤
3. 防止 SQL Injection 的最重要方法
絕對值得使用,千萬不要怕麻煩
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2011-05-06 10:48:58, 註解 無‧
系統時間:2024-11-25 19:54:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!