請教SQL語法中的'+'及引號使用原則 |
答題得分者是:ha0009
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
請教各位前輩﹒ 記得timhuang前輩針對有關在SQL語法中使用' '及引號﹐做過一些解釋﹐但目前小弟有接触到這些方面的實例﹐對其使用的原則又產生了一些混淆﹐請各位前輩不吝賜教﹒ 例如﹕
adoquery1.SQL.Text := 'insert into 訂單 values (''' Edit1.Text ''' , ''' DBLookupcombobox1.Text ''' , ''' Edit2.Text ''')' ;
此中的各' '及各引號的意義為何﹖是否可以不使用' '﹖ 使用Access2000資料庫形態 謝謝﹗ 努力,相信會獲得美麗!
忻晟
------
忻晟 |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
假設在 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 發送簡訊給我 |
謝謝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 發送簡訊給我 |
會變成三個引號是因為要組字串的關係. 剛好在字串開頭或結束的地方也要一個 ' (單引號), 所以會讓你感覺好像多了一個 ' (單引號). 寫成這樣你就明白了.
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 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
你要注意的就是值的型態,如果是數值就無所謂,如果是字串就要記得加上引號,如果是日期就要加上 # 號。以下範例我假設第一個參數是字串,餘下是數值與日期,則組合方式如下
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 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
請注意傳入參數的型別喔,下列兩例都可正確執行。
< 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 發送簡訊給我 |
引言: 加一個引號應該是變成''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 發送簡訊給我 |
----------------------------------
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 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |