SQL語法的使用 |
尚未結案
|
shiungyi
一般會員 發表:14 回覆:33 積分:9 註冊:2003-05-16 發送簡訊給我 |
以下為小弟的原始碼 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 發送簡訊給我 |
是 ' 符號的問題 由於 ' 是用來括住字串的所在字串內要用 ' 要特別技巧,常用的有三種 :
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 發送簡訊給我 |
引言: 以下為小弟的原始碼 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 發送簡訊給我 |
|
shiungyi
一般會員 發表:14 回覆:33 積分:9 註冊:2003-05-16 發送簡訊給我 |
依照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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
我比較喜歡用#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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
不好意思, 插個花. 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |