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

SQL語法的使用

尚未結案
shiungyi
一般會員


發表:14
回覆:33
積分:9
註冊:2003-05-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-19 12:15:56 IP:163.29.xxx.xxx 未訂閱
以下為小弟的原始碼 with Query1 do begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('insert into STBCFC'); Query1.SQL.Add('values('' curr '','' bank '','' ser_no '',)'); Query1.SQL.Add('' top '','' date '','' job_code '','' data_no '',); Query1.SQL.Add('' ban_idno '','' p_code '','' p_date '','' name '',); Query1.SQL.Add('' kind_code '','' data_kind '','' data_atm_sign '',); Query1.SQL.Add('' data_atm '','' inst_amt_sign '','' inst_amt '',); Query1.SQL.Add('' ward_split '','' cntry '','' nt_exchg_rate '',); Query1.SQL.Add('' swift_bank '','' oppo_bank '','' data_source ''); ExecSQL; end ***[Error] Unit1.pas(84): Too many actual parameters 請教各位 小弟到底那裡下錯指令 謝謝
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-19 12:55:33 IP:218.16.xxx.xxx 未訂閱
是 ' 符號的問題    由於 ' 是用來括住字串的所在字串內要用 ' 要特別技巧,常用的有三種 :
1. 用兩個 ' 如
ShowMessage('I don''t know'); // I don't know
2. 用 #39
ShowMessage('I'#39'd love to'); // I'd love to ('I'   #39   'd love to' 亦可)
3. 用 QuotedStr (只適用於在頭尾加 ' )
ShowMessage(' I said :'   QuotedStr('Nice to meet you')); // I said :'Nice to meet you'
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-19 12:59:41 IP:211.76.xxx.xxx 未訂閱
引言: 以下為小弟的原始碼 with Query1 do begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('insert into STBCFC');//本行改為紅色部份 Query1.SQL.Add('insert into STBCFC(curr,bank,ser_no,top,date,job_code,data_no,ban_idno, p_code,p_date,name,kind_code,data_kind,data_atm_sign,data_atm,inst_amt_sign,inst_amt,ward_split,cntry,nt_exchg_rate,swift_bank,oppo_bank,data_source)'); Query1.SQL.Add('values('' curr '','' bank '','' ser_no '',)'); Query1.SQL.Add('' top '','' date '','' job_code '','' data_no '',); Query1.SQL.Add('' ban_idno '','' p_code '','' p_date '','' name '',); Query1.SQL.Add('' kind_code '','' data_kind '','' data_atm_sign '',); Query1.SQL.Add('' data_atm '','' inst_amt_sign '','' inst_amt '',); Query1.SQL.Add('' ward_split '','' cntry '','' nt_exchg_rate '',); Query1.SQL.Add('' swift_bank '','' oppo_bank '','' data_source ''); ExecSQL; end ***[Error] Unit1.pas(84): Too many actual parameters 建議用參數傳值較不會出問題 如 SQL: Insert into table(FieldName) values(:FieldValue) Query1.ParamByName(FieldName).Value:=FieldValue; 請教各位 小弟到底那裡下錯指令 謝謝
發表人 - cmj 於 2003/05/19 13:02:10
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-19 13:05:31 IP:218.85.xxx.xxx 未訂閱
這種情況建議使用Format,例如 Query1.SQL.Add(Format('insert into STBCFC values(''%s'', ''%s''...', [curr, bank]));
shiungyi
一般會員


發表:14
回覆:33
積分:9
註冊:2003-05-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-19 17:21:46 IP:163.29.xxx.xxx 未訂閱
依照CMJ兄的改法 with Query1 do begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('insert into STBCFC(curr,bank,ser_no,top,date,job_code,data_no,ban_idno, p_code,p_date,name,kind_code,data_kind,data_atm_sign,data_atm,inst_amt_sign,inst_amt,ward_split,cntry,nt_exchg_rate,swift_bank,oppo_bank,data_source)'); Query1.SQL.Add('values('' curr '','' bank '','' ser_no '',)'); Query1.SQL.Add('' top '','' date '','' job_code '','' data_no '',); Query1.SQL.Add('' ban_idno '','' p_code '','' p_date '','' name '',); Query1.SQL.Add('' kind_code '','' data_kind '','' data_atm_sign '',); Query1.SQL.Add('' data_atm '','' inst_amt_sign '','' inst_amt '',); Query1.SQL.Add('' ward_split '','' cntry '','' nt_exchg_rate '',); Query1.SQL.Add('' swift_bank '','' oppo_bank '','' data_source ''); ExecSQL; end 其傳回值 ***[Error] Unit1.pas(99): Too many actual parameters 小弟實在是技窮了 請大家幫幫忙 謝謝
payne
初階會員


發表:1
回覆:40
積分:38
註冊:2002-04-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-19 17:58:23 IP:140.92.xxx.xxx 未訂閱
with Query1 do begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('insert into STBCFC(curr,bank,ser_no,top,date,job_code,data_no,ban_idno, p_code,p_date,name,kind_code,data_kind,data_atm_sign,data_atm,inst_amt_sign,inst_amt,ward_split,cntry,nt_exchg_rate,swift_bank,oppo_bank,data_source)'); Query1.SQL.Add('values("' curr '","' bank '","' ser_no '","'); Query1.SQL.Add('"' top '","' date '","' job_code '","' data_no '",'); Query1.SQL.Add('"' ban_idno '","' p_code '","' p_date '","' name '",'); Query1.SQL.Add('"' kind_code '","' data_kind '","' data_atm_sign '",'); Query1.SQL.Add('"' data_atm '","' inst_amt_sign '","' inst_amt '",'); Query1.SQL.Add('"' ward_split '","' cntry '","' nt_exchg_rate '",'); Query1.SQL.Add('"' swift_bank '","' oppo_bank '","' data_source ')'); ExecSQL; end;
payne
初階會員


發表:1
回覆:40
積分:38
註冊:2002-04-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-19 18:16:58 IP:140.92.xxx.xxx 未訂閱
sorry 剛剛的有點錯,修改如下 with Query1 do begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('insert into STBCFC(curr,bank,ser_no,top,date,job_code,data_no,ban_idno, p_code,p_date,name,kind_code,data_kind,data_atm_sign,data_atm,inst_amt_sign,inst_amt,ward_split,cntry,nt_exchg_rate,swift_bank,oppo_bank,data_source)'); Query1.SQL.Add('values("' curr '","' bank '","' ser_no '","'); Query1.SQL.Add(top '","' date '","' job_code '","' data_no '","'); Query1.SQL.Add(ban_idno '","' p_code '","' p_date '","' name '","'); Query1.SQL.Add(kind_code '","' data_kind '","' data_atm_sign '","'); Query1.SQL.Add(data_atm '","' inst_amt_sign '","' inst_amt '","'); Query1.SQL.Add(ward_split '","' cntry '","' nt_exchg_rate '","'); Query1.SQL.Add(swift_bank '","' oppo_bank '","' data_source '")'); ExecSQL; end;
cmj
高階會員


發表:15
回覆:242
積分:226
註冊:2002-06-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-19 18:42:52 IP:211.76.xxx.xxx 未訂閱
with Query1 do 
begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('insert into STBCFC(curr ,bank ,ser_no ,top ,date ,job_code,           '); 
  Query1.SQL.Add('                   data_no ,ban_idno ,p_code ,p_date ,name,           ');
  Query1.SQL.Add('                   kind_code ,data_kind ,data_atm_sign ,data_atm,     '); 
  Query1.SQL.Add('                   inst_amt_sign ,inst_amt ,ward_split ,cntry,        ');
  Query1.SQL.Add('                   nt_exchg_rate ,swift_bank ,oppo_bank ,data_source) ');      Query1.SQL.Add('            values(:curr ,:bank ,:ser_no ,:top ,:date ,:job_code,     '); 
  Query1.SQL.Add('                   :data_no ,:ban_idno ,:p_code ,:p_date ,:name,      ');
  Query1.SQL.Add('                   :kind_code ,:data_kind ,:data_atm_sign ,:data_atm, ');
  Query1.SQL.Add('                   :inst_amt_sign ,:inst_amt ,:ward_split ,:cntry,    '); 
  Query1.SQL.Add('                   :nt_exchg_rate ,:swift_bank ,:oppo_bank ,:data_source) ');      Query1.ParamByName('curr').Value         := curr;
  Query1.ParamByName('bank').Value         := bank;  
  Query1.ParamByName('ser_no').Value       := ser_no;
  Query1.ParamByName('top').Value          := top;
  Query1.ParamByName('date').Value         := date;
  Query1.ParamByName('job_code').Value     := job_code;
  Query1.ParamByName('data_no').Value      := data_no;
  Query1.ParamByName('ban_idno').Value     := ban_idno;
  Query1.ParamByName('p_code').Value       := p_code;
  Query1.ParamByName('p_date').Value       := p_date;
  Query1.ParamByName('name').Value         := name;
  Query1.ParamByName('kind_code').Value    := kind_code;
  Query1.ParamByName('data_kind').Value    := data_kind;
  Query1.ParamByName('data_atm_sign').Value:= data_atm_sign;
  Query1.ParamByName('data_atm').Value     := data_atm;
  Query1.ParamByName('inst_amt_sign').Value:= inst_amt_sign;
  Query1.ParamByName('inst_amt').Value     := inst_amt;
  Query1.ParamByName('ward_split').Value   := ward_split;
  Query1.ParamByName('cntry').Value        := cntry;
  Query1.ParamByName('nt_exchg_rate').Value:= nt_exchg_rate;
  Query1.ParamByName('swift_bank').Value   := swift_bank;
  Query1.ParamByName('oppo_bank').Value    := oppo_bank;
  Query1.ParamByName('data_source').Value  := data_source; 
  ExecSQL;
end;
1.你的問題是Table Field數目和資料數目不符合,假如有23個 Field要有23個資料對應. 2.請檢查table STBCFC內欄位是否如上面程式碼所述23 Fields ,Field Name不對自行修改. 3.用Query1.ParamByName(FieldName).Value:=FieldValue,來設定比較不會因資料形態問題而出錯. 發表人 - cmj 於 2003/05/19 18:47:59
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-19 18:47:03 IP:61.217.xxx.xxx 未訂閱
我比較喜歡用#39來代替',看起來比較清楚,另外我有算過了,前後欄位數是相同的, 如果還是***[Error] Unit1.pas(84): Too many actual parameters 那你可能要先檢查一下你的Table->STBCFC欄位跟你的SQL語法是否一致...
with Query1 do begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('insert into STBCFC(curr,bank,ser_no,top,date,job_code,data_no,ban_idno, p_code,p_date,name,kind_code,data_kind,data_atm_sign,data_atm,inst_amt_sign,inst_amt,ward_split,cntry,nt_exchg_rate,swift_bank,oppo_bank,data_source)');
  Query1.SQL.Add('values(' #39 curr #39 ',' #39 bank #39 ',' #39 ser_no #39 ',');
  Query1.SQL.Add(#39 top #39 ',' #39 #39 date #39 ',' #39 job_code #39 ',' #39 data_no #39 ',');
  Query1.SQL.Add(#39 ban_idno #39 ',' #39 p_code #39 ',' #39 p_date ',' name #39 ',');
  Query1.SQL.Add(#39 kind_code #39 ',' #39 data_kind #39 ',' #39 data_atm_sign #39 ',');
  Query1.SQL.Add(#39 data_atm #39 ',' #39 inst_amt_sign #39 ',' #39 inst_amt #39 ',');
  Query1.SQL.Add(#39 ward_split #39 ',' #39 cntry #39 ',' #39 nt_exchg_rate #39 ',');
  Query1.SQL.Add(#39 swift_bank #39 ',' #39 oppo_bank #39 ',' #39 data_source #39 ')');
ExecSQL;
end;
TRY TRY SEE
引言: 依照CMJ兄的改法 . .
發表人 - chih 於 2003/05/19 18:50:04
shiungyi
一般會員


發表:14
回覆:33
積分:9
註冊:2003-05-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-19 20:46:43 IP:163.29.xxx.xxx 未訂閱
DEAR CHIC 小弟依照您的指示 修正後 系統回覆之訊息為 '一般SQL錯誤' 關鍵字'TOP'附近的語法不正確 另外 小弟自行修改的版本 with Query1 do begin Close; SQL.Clear; Query1.SQL.Add('insert into STBCFC'); Query1.SQL.Add('values('' curr '','' bank '','' ser_no '','); Query1.SQL.Add(''' top '','' date '','' job_code '','' data_no '','); Query1.SQL.Add(''' ban_idno '','' p_code '','' p_date '','' name '','); Query1.SQL.Add(''' kind_code '','' data_kind '','' data_atm_sign '','); Query1.SQL.Add(''' data_atm '','' inst_amt_sign '','' inst_amt '','); Query1.SQL.Add(''' ward_split '','' cntry '','' nt_exchg_rate '','); Query1.SQL.Add(''' swift_bank '','' oppo_bank '','' data_source '')'); ExecSQL; 則回傳 '一般SQL錯誤' 字串或二進位資料會被截斷 發表人 - shiungyi 於 2003/05/19 20:52:04
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-19 20:52:51 IP:61.216.xxx.xxx 未訂閱
hi...shiungyi 1.如果是這樣...TOP有可能是保留字,你要把這各欄位名稱改掉, 我再看了一下date也有可能是保留字,你的Database是哪一種ㄋ?? 2.你改的寫法,依照一般新增的語法是這樣的 insert into ABC//宣告寫入哪各Table (A1, A2, A3)//宣告寫入哪些欄位 values (AA1, AA2, AA3)//這裡給值 你應該可以看出你缺少哪一段了吧??有問題在post <>< face="Verdana, Arial, Helvetica">引言: DEAR CHIC 小弟依照您的指示 修正後 系統回覆之訊息為 '一般SQL錯誤' 關鍵字'TOP'附近的語法不正確 發表人 - chih 於 2003/05/19 20:58:05
timhuang
尊榮會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-19 22:21:28 IP:61.221.xxx.xxx 未訂閱
不好意思, 插個花. shiungyi 兄應該是使用    insert into table values ('aa', 'bb', 'cc', ... )    的語法才是, 要注意將所有的欄位值都要寫, 若是這樣的話可以這樣下:    
  SQL.ADD('insert into STBCFC        ');
  SQL.ADD('   values (               ');      SQL.ADD(QuotedStr(curr)       +', ');
  SQL.ADD(QuotedStr(bank)       +', ');
  SQL.ADD(QuotedStr(ser_no)     +', ');
  SQL.ADD(QuotedStr(top)        +', ');
  ...
  //略
  ...
  SQL.ADD(QuotedStr(data_source)+', ');      SQL.ADD('          )               ');
若不是弟想的, 請 shiungyi 兄將 table 的 schema 貼上來或是將欄位貼上來讓大家好幫你
shiungyi
一般會員


發表:14
回覆:33
積分:9
註冊:2003-05-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-20 18:18:59 IP:163.29.xxx.xxx 未訂閱
DEAR timhuang 使用您的方法後 出現轉換NUMBERIC到資料型別NUMBERIC時,發生算術溢位錯誤 經查證後發現 因IBM主機LOAD檔時 不會將小數點下傳 造成整數欄位溢位 後來在處理時 將欄位重拆 並加入小數點後 程式已能正常執行 謝謝 Justmade,cmj,Rain,payne,chih,timhuang 的指導 SHIUNGYI
系統時間:2024-05-15 13:00:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!