又來煩各位大大了\ |
尚未結案
|
shie
一般會員 發表:7 回覆:10 積分:3 註冊:2003-09-12 發送簡訊給我 |
請教大大:
會出現:raised exception class EOleException with message 'INSERT INTO 陳述式的語法錯誤' 中斷看結果為
sqlA='insert into (欄位一,欄位二) values'
strA=('值一','值二')
執行至-->AdoQuery1.ExecSQL;就錯誤了~~
while not ADOQ.eof do begin
if ADOQ.Fields[0].asstring <> '' then begin
sql:='';
sqlA :='';
sqlA := sqlA sqlName[0];
strA := strA ADOQ.Fields[0].asstring ;
for i := 1 to 5 do begin
if ADOQ.Fields[i].asstring <> '' then begin
sqlA := sqlA ',' sqlName[i] ;
strA := strA ''',''' ADOQ.Fields[i].asstring ;
end;
end; sql:='Insert INTO all (' sqlA ') Values';
sql:=sql '(''' strA ''')';
AdoQuery1.SQL.Text:=sql;
AdoQuery1.ExecSQL;
AdoQ.Next;
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
試試看:
引言: 請教大大: 會出現:raised exception class EOleException with message 'INSERT INTO 陳述式的語法錯誤' 中斷看結果為 sqlA='insert into (欄位一,欄位二) values' strA=('值一','值二') 執行至-->AdoQuery1.ExecSQL;就錯誤了~~ while not ADOQ.eof do begin if ADOQ.Fields[0].asstring <> '' then begin sql:=''; sqlA :=''; sqlA := sqlA sqlName[0]; strA := strA ADOQ.Fields[0].asstring ; for i := 1 to 5 do begin if ADOQ.Fields[i].asstring <> '' then begin sqlA := sqlA ','#34 sqlName[i] #34 ; // 欄位名稱加雙引號 strA := strA ''',''' ADOQ.Fields[i].asstring ; end; end; sql:='Insert INTO all (' sqlA ') Values'; sql:=sql '(''' strA ''')'; AdoQuery1.SQL.Text:=sql; AdoQuery1.ExecSQL; AdoQ.Next; |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi shie, 調整了一下語法,大致如下,若還有錯誤,建議你將 Mapping 出來的語法 SQL 丟到 Memo 中看一下結果
while not ADOQ.eof do begin if ADOQ.Fields[0].AsString <> '' then begin sqlA := sqlName[0]; strA := QuotedStr(ADOQ.Fields[0].asstring); for i := 1 to 5 do begin if ADOQ.Fields[i].asstring <> '' then begin sqlA := sqlA ',' sqlName[i] ; strA := strA ',' QuotedStr(ADOQ.Fields[i].asstring); end; end; sql :='Insert INTO all (' sqlA ') Values' '(' strA ')'; AdoQuery1.SQL.Text := sql; AdoQuery1.ExecSQL; AdoQ.Next; end;---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi shie, 既然是將一個 Query 的結果寫進另外一個 Table 中,為何不乾脆使用
INSERT INTO TABLE1 (FILED1, FILED2, FILED3, FILED4, ... SELECT FIELD1, FIELD2, FIELD3, FIELD4, ... FROM TABLE2 WHERE XXX語法來做,又快又有效率 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
shie
一般會員 發表:7 回覆:10 積分:3 註冊:2003-09-12 發送簡訊給我 |
|
kevin622
一般會員 發表:0 回覆:22 積分:9 註冊:2003-10-16 發送簡訊給我 |
請教大大:
會出現:raised exception class EOleException with message 'INSERT INTO 陳述式的語法錯誤' 中斷看結果為
sqlA='insert into (欄位一,欄位二) values'
strA=('值一','值二')
執行至-->AdoQuery1.ExecSQL;就錯誤了~~
while not ADOQ.eof do begin
if ADOQ.Fields[0].asstring <> '' then begin
sql:='';
sqlA :='';
sqlA := sqlA sqlName[0];
strA := strA ADOQ.Fields[0].asstring ;
for i := 1 to 5 do begin
if ADOQ.Fields[i].asstring <> '' then begin
sqlA := sqlA ',' sqlName[i] ;
strA := strA ''',''' ADOQ.Fields[i].asstring ; <=== 感覺應該是這裡在跑迴圈產生的字串不太正確
end;
end; sql:='Insert INTO all (' sqlA ') Values';
sql:=sql '(''' strA ''')';
AdoQuery1.SQL.Text:=sql; <== 你可以在這下中斷點看看 sql 的內容是否正確
AdoQuery1.ExecSQL;
AdoQ.Next; §§§ 量力而為 §§§
當覺得力量不足時,就是該為自己充電的時候了。
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
shie
一般會員 發表:7 回覆:10 積分:3 註冊:2003-09-12 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
shie
一般會員 發表:7 回覆:10 積分:3 註冊:2003-09-12 發送簡訊給我 |
版主您好:你的回答我有一點不解煩請教導一下~~如下是我要匯入的資料裡頭就有不少的問題,
匯入資料中如果有使用單引號時﹐就要在多加一個單引號用于區分<==那是不是在程式上要做判斷呢要如何下程式碼如varChar := "'";<==是這樣嗎
1.匯入的資料中有","或是引號有法去解嗎資料如: Wucyuan W.Rd., West District, Taichung City 403, Taiwan (R.O.C.) 台中市403五權西路一段二號
2.insert into tablex (field1, field2, .. ) values (:value1, :value2, .. )
也可以用我這次請教的程式碼舉例嗎(參數運用在資料庫的用法)謝謝各位大大 發表人 - shie 於 2004/03/11 10:32:30
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 我們這樣舉例來講﹕ 當引號出現在字串中時﹐請再加上一個引號用于區分﹒
普通﹕I'm a student.
出現在字串中﹕ShowMessage('I''m a student.'); 當引號出現在SQL中﹐因為SQL語法本來就是字串形態﹐所以除了在字串中需要加上的那個引號之外﹐還要再為字串兩端各加上一個引號﹐用于區分﹒
普通﹕Select * From Table Where Field1 = 'Public''s'
出現在SQL中﹕ADOQuery1.SQL.Text := 'Select * From Table Where Field1 = "Public''s"'; 從您需要匯入的資料來看﹕Wucyuan W.Rd., West District, Taichung City 403, Taiwan (R.O.C.) 台中市403五權西路一段二號
此處并沒有涉及引號﹐所以應可不必更改﹐在出現在SQL中時﹐只需要兩端加上雙引號即可﹐如下﹕
ADOQuery1.SQL.Text := 'Insert Into Table (Field1) Values ("Wucyuan W.Rd., West District, Taichung City 403, Taiwan (R.O.C.) 台中市403五權西路一段二號"); 參考看看﹗ =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
shie
一般會員 發表:7 回覆:10 積分:3 註冊:2003-09-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |