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

請教SQL語法中的'+'及引號使用原則

答題得分者是:ha0009
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-17 16:19:22 IP:63.84.xxx.xxx 未訂閱
請教各位前輩﹒ 記得timhuang前輩針對有關在SQL語法中使用' '及引號﹐做過一些解釋﹐但目前小弟有接触到這些方面的實例﹐對其使用的原則又產生了一些混淆﹐請各位前輩不吝賜教﹒ 例如﹕ adoquery1.SQL.Text := 'insert into 訂單 values (''' Edit1.Text ''' , ''' DBLookupcombobox1.Text ''' , ''' Edit2.Text ''')' ; 此中的各' '及各引號的意義為何﹖是否可以不使用' '﹖ 使用Access2000資料庫形態 謝謝﹗ 努力,相信會獲得美麗! 忻晟
------
忻晟
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-17 17:14:38 IP:202.39.xxx.xxx 未訂閱
假設在 dbexplorer 或其它地方直接輸入 sql 的話 (3/4/5 是字串型態欄位, 所以用引號) 樣子如下: insert into 訂單 values ('3' , '4' , '5') 由於 SQL.Text 是 string 型態, 所以前後須用引號 此時記住一原則, 原字串中遇有引號者, 該引號前後再補一個引號 變成如下: 'insert into 訂單 values ('''3''' , '''4''' , '''5''')' 再把 3/4/5 等值換成 Edit1.Text/DBLookupComboBox1.Text/Edit2.Text 的話 就得用加號了, 變成如下:  'insert into 訂單 values (''' + Edit1.Text + ''' , ''' + DBLookupcombobox1.Text + ''' , '''+ Edit2.Text + ''')' 把這一部份的值指定給 ADOQuery1.SQL.Text 的話, 就成為: adoquery1.SQL.Text := 'insert into 訂單 values (''' + Edit1.Text + ''' , ''' + DBLookupcombobox1.Text + ''' , '''+ Edit2.Text + ''')' ;    小弟解釋得不知對不對, 如有錯誤, 還望指正. 另外, 如果不想這麼麻煩, 就用
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-17 17:58:32 IP:63.84.xxx.xxx 未訂閱
謝謝hagar版主指教﹒ 如版主所言﹕ --------------------------------- 假設在 dbexplorer 或其它地方直接輸入 sql 的話 (3/4/5 是字串型態欄位, 所以用引號) 樣子如下: insert into 訂單 values ('3' , '4' , '5') 由於 SQL.Text 是 string 型態, 所以前後須用引號 此時記住一原則, 原字串中遇有引號者, 該引號前後再補一個引號 變成如下: 'insert into 訂單 values ('''3''' , '''4''' , '''5''')' --------------------------------- 加一個引號應該是變成''3'',''4'',''5'' 怎么會成三個引號的﹖還請版主賜教﹒另外﹐如下例﹕ Adoconnection1.Execute('Select * into [客戶.txt]' 'in "d:\" "Text;" from 客戶'); 這段Code中的加號作用是否是將前后兩段敘述合并起來﹐因為小弟將' '去掉如下﹐也可正常運行﹒ Adoconnection1.Execute('Select * into [客戶.txt] in "d:\" "Text;" from 客戶'); 如果是這樣的話﹐那這里放加號的目的單單是為了方便檢視嗎﹖ 也不知道這樣講對与否﹐還請前輩多多指點﹒ 謝謝﹗ 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/07/17 18:01:11
------
忻晟
timhuang
尊榮會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-17 18:39:54 IP:203.95.xxx.xxx 未訂閱
會變成三個引號是因為要組字串的關係. 剛好在字串開頭或結束的地方也要一個 ' (單引號), 所以會讓你感覺好像多了一個 ' (單引號).    寫成這樣你就明白了.
var
  stra, strb, strc, strsql: string;    begin
  stra := '3';
  strb := '4';
  strc := '5';      strsql := 'insert into table values (''' + stra +''', '''+ strb + ''', ''' + strc + ''' ) ';    end;
紅色的單引號是字串的頭和尾, 如同 stra:='3' 的單引號一樣, 要有頭有尾, 在紅色單引號間的連續兩個單引號是代表在字串內的一個單引號, 如:
  showmessage(' I''m a student!');
會顯示 I'm a student! 一個單引號而已. 為減輕你看指令的困難, 建議你可以在 ADOQuery1.ExecSQL 之前先做 ADOQuery1.SQL.SaveToFile('c:\sql.txt');這樣除了除錯比較方便外, 也可以順便檢驗你的 sql command 有沒有錯!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-17 18:58:42 IP:63.84.xxx.xxx 未訂閱
----------------------------------- 會變成三個引號是因為要組字串的關係. 剛好在字串開頭或結束的地方也要一個 ' (單引號), 所以會讓你感覺好像多了一個 ' (單引號). ----------------------------------- 謝謝版主的指教﹒    請問組字串的概念是什么﹖看來小弟的理解能力蠻差的< >< > 勞煩版主了﹗ 謝謝﹗ 努力,相信會獲得美麗! 忻晟
------
忻晟
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-17 19:32:20 IP:61.30.xxx.xxx 未訂閱
你好: 呵呵.. 組字串對我也是一種困擾所以我都使用另一種方式來組合字串。就以你的範例來說 > src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-17 19:59:43 IP:63.84.xxx.xxx 未訂閱
引言: 你好: 呵呵.. 組字串對我也是一種困擾所以我都使用另一種方式來組合字串。就以你的範例來說 > src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
謝謝ha0009版主﹕ 那如果我要使用Edit1.Text, Edit2.Text, Edit3.Text 來代替其欄位值時﹐該如何寫以上的Code﹖ 謝謝﹗ 努力,相信會獲得美麗! 忻晟
------
忻晟
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-17 20:40:12 IP:61.56.xxx.xxx 未訂閱
你好: 你要注意的就是值的型態,如果是數值就無所謂,如果是字串就要記得加上引號,如果是日期就要加上 # 號。以下範例我假設第一個參數是字串,餘下是數值與日期,則組合方式如下 format (''insert into 訂單 values ("%s", %d, #%s#)', [Edit1.Text, Edit2.Text, Edit3.Text]); 其實很簡單不要想的太複雜 src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-18 01:17:36 IP:63.84.xxx.xxx 未訂閱
謝謝ha0009版主的指教﹒ 小弟的實例中語法如下﹐但出現錯誤﹐請前輩指點﹕ ADOQuery1.SQL.Text := Format('Insert Into 訂單 Values ("%s","%s","%s",#%s#,%d)',[Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text, Edit5.Text]); 謝謝﹗ 努力,相信會獲得美麗! 忻晟
------
忻晟
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-18 01:45:36 IP:61.56.xxx.xxx 未訂閱
你好: 請注意傳入參數的型別喔,下列兩例都可正確執行。 < class="code"> ADOQuery1.SQL.Text := Format(''Insert Into 訂單 Values ("%s","%s","%s",#%s#,%s)'',[Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text, Edit5.Text]); ADOQuery1.SQL.Text := Format(''Insert Into 訂單 Values ("%s","%s","%s",#%s#,%d)'',[Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text, StrToInt (Edit5.Text)]);
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-18 08:30:19 IP:202.39.xxx.xxx 未訂閱
引言: 加一個引號應該是變成''3'',''4'',''5'' 怎么會成三個引號的﹖還請版主賜教﹒另外﹐如下例﹕ Adoconnection1.Execute('Select * into [客戶.txt]' 'in "d:\" "Text;" from 客戶'); 這段Code中的加號作用是否是將前后兩段敘述合并起來﹐因為小弟將' '去掉如下﹐也可正常運行﹒ Adoconnection1.Execute('Select * into [客戶.txt] in "d:\" "Text;" from 客戶'); 如果是這樣的話﹐那這里放加號的目的單單是為了方便檢視嗎﹖ 也不知道這樣講對与否﹐還請前輩多多指點﹒ 謝謝﹗
您沒看清楚小弟說的, 小弟的意思是原字串中的引號前後各加一個單引號 您想一下, 在 Delphi 內的 string 是不是前後要有一個單引號 所以原來字串有單引號的, 前後各加一個單引號 呵呵! 好像還是解釋很模糊! --- --<-<-<@ 發表人 -
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-18 11:49:27 IP:63.84.xxx.xxx 未訂閱
---------------------------------- ADOQuery1.SQL.Text := Format(''Insert Into 訂單 Values ("%s","%s","%s",#%s#,%d)'',[Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text, StrToInt (Edit5.Text)]); ----------------------------------- 謝謝ha0009前輩的指點﹒ 照版主所言﹐小弟做以測試﹐發現若在'Format('之后不能加雙引號﹐只能加單引號﹒如引言中﹐需改為單引號才可以Run 如下﹕ ADOQuery1.SQL.Text := Format('Insert Into 訂單 Values ("%s","%s","%s",#%s#,%d)',[Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text, StrToInt (Edit5.Text)]); 另外﹐Values之后的字串若為字串形態的﹐就只能加雙引號而不能加單引號了﹐這是否是因為該字串被包含在Format('Insert...')之中需在字串兩端多加一個引號的原因﹔還是与前者無關﹐在此語法中必須使用雙引號﹖ 努力,相信會獲得美麗! 忻晟
------
忻晟
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-07-18 12:07:45 IP:61.30.xxx.xxx 未訂閱
你好: format 的第一個參數是字串, 第二個參數是 Variant 的陣列。    1. 第一個參數的前後是以單引號開始與結束,我的範例確實是使用單引號,但 Post 上論壇後卻多了個單引號,我也不知道為什麼 > < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-07-18 12:36:48 IP:63.84.xxx.xxx 未訂閱
謝謝ha0009版主的解釋﹒    小弟明白了﹗ 學會了一種比較方便的組字串方法﹒ 還要感謝 > > 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-06-01 23:08:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!