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

請問,一個SQL命令串問題

尚未結案
mahler
一般會員


發表:3
回覆:7
積分:2
註冊:2005-03-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-03 00:54:50 IP:221.239.xxx.xxx 未訂閱
要寫入文本格式資料到ACCESS,資料是從TXT文件按照某種規則提取的,其中可能含有“’”等符號。現已將各個FIELD的資料抓到ANSISTRING變數中,可以顯示在STRINGGRID中,但是加起來的SQL命令串會報告錯誤。嘗試手工去掉“’”,可以正常寫入到DB中。小弟初次使用BCB,不知自動處理的代碼該如何寫,最好不去掉“’”,應該能夠讓SQL不誤解的。
mahler
一般會員


發表:3
回覆:7
積分:2
註冊:2005-03-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-03 01:00:33 IP:221.239.xxx.xxx 未訂閱
請教 一個SQL命令串的問題 要寫入文本格式資料到ACCESS,資料是從TXT文件按照某種規則提取的,其中可能含有“’”等符號。現已將各個FIELD的資料抓到ANSISTRING變數中,可以顯示在STRINGGRID中,但是加起來的SQL命令串會報告錯誤。嘗試手工去掉“’”,可以正常寫入到DB中。小弟初次使用BCB,不知自動處理的代碼該如何寫,最好不去掉“’”,應該能夠讓SQL不誤解的。
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-04 02:46:44 IP:203.204.xxx.xxx 未訂閱
"'"是SQL的內部符號~要判斷'可借用BCB內建的QuotedStr()函式
Ex:
#include "SysUtils.hpp"
....
..
.
ADOQuery1->Close();
ADOQuery1->SQL->Add("Select * from HappyUsers where UserRemark='%" QuotedStr("'") "00'");
ADOQuery1->Open();
相關用法請查閱Help
mahler
一般會員


發表:3
回覆:7
積分:2
註冊:2005-03-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-04 17:49:26 IP:222.69.xxx.xxx 未訂閱
多謝解疑。 不過還是不太明白。 查過HELP,QUOTEDSTR的作用是把“XXXXX‘XXXXXX”變爲“‘XXXXX’‘XXXXXX’”,可是如果直接對VALUE串做處理,還是會錯。樣例中的使用方法還是看不明白,能否稍做解釋?謝謝。
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-04 18:26:44 IP:203.204.xxx.xxx 未訂閱
因為你將 ADOQuery1->SQL->Add("Select * from HappyUsers where UserRemark='%"+QuotedStr("'")+"00'"); 諸如此字串丟給sql~是由sql在判斷該句的意思~而'是sql他內定的"關鍵字符" 也就是他看到這個字~他就必須依照他內定的處理動作執行~也就不知道該進行我 們要的動作~加上QuotedStr你可以把他看成是在告訴sql這個字不是你的關鍵字 無須依內定方式處理~~~上句SQL是找UserRemark=任意文字加上'00 的意思
mahler
一般會員


發表:3
回覆:7
積分:2
註冊:2005-03-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-04 22:35:18 IP:222.69.xxx.xxx 未訂閱
謝謝ROGAN先進的熱心答復,把我的實驗做一個彙報: CODE: AnsiString SqlTxt,dan; ADOQuery1->Prepared = true; ADOQuery1->Close(); ADOQuery1->SQL->Clear(); SqlTxt = "INSERT INTTO TABLE (A) Values (\"; SqlTxt = dan; SqlTxt = \");"; ADOQuery1->SQL->Add(SqlTxt); ADOQuery1->ExecSQL(); 報錯的情況有以下幾種: 一、dan = “XXXX’XXXX” 出錯 二、dan = “’XXXX’’XXXX’” 出錯 三、dan = “’%XXXX’’XXXX’” 出錯 四、dan = “’%XXXX’’XXXX%’” 出錯 五、dan = “XXXX’XXXX” dan = QuotedStr(dan) 出錯 六、dan = “XXXX’XXXX” 並在SQL->Add(SqlTxt);前加入一行SqlTxt = QuotedStr(SqlTxt); 出錯 不報錯的情況有以下幾種: 一、dan = “’XXXX’XXXX’” 存入的是’XXXX’XXXX’ 二、dan = “XXXX’’XXXX” 存入的是XXXX’’XXXX 二、dan = “’%XXXX’XXXX’” 存入的是’%XXXX’XXXX’ 三、dan = “’%XXXX’XXXX%’” 存入的是’%XXXX’XXXX%’ 總結: 一、%不起任何作用 二、只用單引號包起或者用兩個單引號REPLACE串內的單引號,可以運行 三、用QuotedStr必錯 四、在運行正常的情況下,對原始串的所有改變都被寫入DB 五、似乎沒有什麽辦法既不報錯,又只寫入原始串
mahler
一般會員


發表:3
回覆:7
積分:2
註冊:2005-03-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-05 14:23:09 IP:218.78.xxx.xxx 未訂閱
終於發現是我多加了兩個雙引號 謝謝ROGAN,加分嘍
系統時間:2024-04-30 3:31:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!