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

又來煩各位大大了\

尚未結案
shie
一般會員


發表:7
回覆:10
積分:3
註冊:2003-09-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-09 12:32:14 IP:218.166.xxx.xxx 未訂閱
請教大大: 會出現: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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-09 13:30:43 IP:218.163.xxx.xxx 未訂閱
試試看:
引言: 請教大大: 會出現: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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-09 13:35:02 IP:210.65.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-09 13:49:52 IP:210.65.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-09 14:25:48 IP:218.166.xxx.xxx 未訂閱
謝謝各位大大的回答: 二位所見意的我試了,結果一樣~~我忘了說資料是存入ACCESS Fishman你好~~因為我資料來源(欄位)不會是一樣`~所以才沒有用你的方法~~謝謝你們`~再辛苦了幫忙了我試了好久唷`~~~~
kevin622
一般會員


發表:0
回覆:22
積分:9
註冊:2003-10-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-09 20:13:55 IP:203.70.xxx.xxx 未訂閱
請教大大: 會出現: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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-09 21:07:40 IP:211.76.xxx.xxx 未訂閱
shie,標題無意義請修正,敬請配合    
shie
一般會員


發表:7
回覆:10
積分:3
註冊:2003-09-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-10 10:17:35 IP:218.166.xxx.xxx 未訂閱
謝謝各位大大: 首先謝謝副站長~~新手發問~~下次改進~~ 問題解決了是因為欄位的名稱跟保留字相同(自己糊塗因為我是維護沒有去注意欄位名稱),再問問題~~延續~~不好意思 1.匯入的資料中有","或是引號有法去解嗎資料如: Wucyuan W.Rd., West District, Taichung City 403, Taiwan (R.O.C.) 台中市403五權西路一段二號 2.匯入資料太長會有問題嗎-->欄位是設為備註 謝謝各位大大了
cashxin2002
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-10 10:41:21 IP:63.84.xxx.xxx 未訂閱
您好﹗    1. 匯入資料中如果有使用單引號時﹐就要在多加一個單引號用于區分﹐如﹕ ShowMessage('I''m a student.'); //顯示結果為I'm a student. 2. 備忘欄位形態﹐資料庫允許儲存的最大容量為 65,535 個字元﹒ 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
timhuang
尊榮會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-10 11:42:04 IP:203.95.xxx.xxx 未訂閱
若是有關鍵字或是保留字的問題時, 建議你可以採用參數式的方式來進行寫入資料庫的動作. 如:
  insert into tablex (field1, field2, .. ) values (:value1, :value2, .. )
利用參數的方式來進行時, 可以避免掉自組 command 的關鍵字對應問題.
shie
一般會員


發表:7
回覆:10
積分:3
註冊:2003-09-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-03-11 09:54:26 IP:211.75.xxx.xxx 未訂閱
版主您好:你的回答我有一點不解煩請教導一下~~如下是我要匯入的資料裡頭就有不少的問題, 匯入資料中如果有使用單引號時﹐就要在多加一個單引號用于區分<==那是不是在程式上要做判斷呢要如何下程式碼如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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-03-11 11:01:14 IP:63.84.xxx.xxx 未訂閱
您好﹗    我們這樣舉例來講﹕    當引號出現在字串中時﹐請再加上一個引號用于區分﹒ 普通﹕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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-03-15 10:49:25 IP:218.166.xxx.xxx 未訂閱
感謝各位大大:問題解決了. 有點不知如何給分.因為各位大大都很好..最後我給..Fishman 大大因為我依照你的見意修改了.也感謝版主cashxin2002的講解和舉例說明.. 再次謝謝
系統時間:2024-05-14 14:35:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!