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

SQL UPDATE一問

答題得分者是:hagar
Fion_JO
一般會員


發表:2
回覆:4
積分:1
註冊:2009-11-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-02-05 14:25:07 IP:114.137.xxx.xxx 訂閱
想請問各位先進,以下是UPDATE的程式碼,執行時候出現'查詢運算式 memo=? start_T=? end_T=?中的語法錯誤(少了運算元),
搭配的資料庫是ACCESS,資料欄位類型皆為文字,不知道哪裡出了錯,還請各位高手幫忙解答
第一次發問,如有不周到之處請包含,謝謝

[code delphi]
adoquery1.Close;
adoquery1.SQL.Clear;

adoQuery1.SQL.Add('update schedule set');
adoQuery1.SQL.add('kind=:k'); //TRadioGroup
adoQuery1.SQL.add('memo=:m'); //TMemo
adoQuery1.SQL.add('start_T=:st'); //TDateTimePicker
adoQuery1.SQL.Add('end_T=:et'); //TDateTimePicker
adoQuery1.SQL.Add('where summary=:s'); //TEdit

adoQuery1.Parameters.ParamByName('k').Value:= inttostr(rdg_kind.ItemIndex);
adoQuery1.Parameters.ParamByName('m').Value:= Tmemo.text;
adoQuery1.Parameters.ParamByName('st').Value:= DateToStr(dpt_startT.Date);
adoQuery1.Parameters.ParamByName('et').Value:= DateToStr(dpt_endT.Date);
adoQuery1.Parameters.ParamByName('s').Value:= Trim(ed_summary.Text);

aDOQuery1.execsql;
[/code]

附加檔案:4b6bb9c3ad8b3_ERROR.jpg
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-02-05 16:44:52 IP:59.125.xxx.xxx 訂閱
少了幾個逗點
[code delphi]
adoquery1.SQL.Clear;
adoQuery1.SQL.Add('update schedule set');
adoQuery1.SQL.add('kind=:k, '); //TRadioGroup
adoQuery1.SQL.add('memo=:m,'); //TMemo
adoQuery1.SQL.add('start_T=:st,'); //TDateTimePicker
adoQuery1.SQL.Add('end_T=:et'); //TDateTimePicker
adoQuery1.SQL.Add('where summary=:s'); //TEdit
[/code]

------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2010-02-05 16:45:45, 註解 無‧
Fion_JO
一般會員


發表:2
回覆:4
積分:1
註冊:2009-11-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-02-05 20:32:10 IP:114.136.xxx.xxx 訂閱
先謝謝您幫忙解答。
已經如您所說加上逗號,但執行後出現UPDATE陳述式的語法錯誤
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-02-05 21:17:07 IP:59.124.xxx.xxx 訂閱
ADOQuery可以丟出完整的SQL字串,請不要連這點動作都捨不得作

===================引 用 Fion_JO 文 章===================
先謝謝您幫忙解答。
已經如您所說加上逗號,但執行後出現UPDATE陳述式的語法錯誤
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
Fion_JO
一般會員


發表:2
回覆:4
積分:1
註冊:2009-11-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-02-05 22:25:21 IP:114.136.xxx.xxx 訂閱
謝謝您的回答。
因為擔心一整句的SQL字串太長,執行上可能會有問題,所以才將字串拆開來寫。
即便是丟出一整句的SQL字串還是出現UPDATE陳述式語法錯誤。

[code delphi]
adoquery1.Close;
adoquery1.SQL.Clear;
adoQuery1.SQL.Add('update schedule set kind=:k,memo=:m,start_T=:st,end_T=:et where summary=:s ');
adoQuery1.Parameters.ParamByName('k').Value:= inttostr(rdg_kind.ItemIndex);
adoQuery1.Parameters.ParamByName('m').Value:= Tmemo.text;
adoQuery1.Parameters.ParamByName('st').Value:= DateToStr(dpt_startT.Date);
adoQuery1.Parameters.ParamByName('et').Value:= DateToStr(dpt_endT.Date);
adoQuery1.Parameters.ParamByName('s').Value:= Trim(ed_summary.Text);

aDOQuery1.execsql;
[/code]
編輯記錄
Fion_JO 重新編輯於 2010-02-05 22:26:38, 註解 無‧
sryang
尊榮會員


發表:39
回覆:762
積分:920
註冊:2002-06-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-02-05 23:04:28 IP:124.10.xxx.xxx 訂閱
如果 start_T 欄位與 end_T 欄位的型態是日期的話,給參數值時不需要做 DateToStr 的轉換,直接給 TDateTime 就可以了

------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-02-05 23:35:31 IP:59.124.xxx.xxx 訂閱
我想你誤會我的意思,不過我也確實記錯了,ADOQuery沒辦法吐出已組完的字串。
如果是這樣,你可以先捨棄使用Parameters直接去組字串,這樣你就可以從SQL.Text得到組完的字串,拿回去丟在Access上執行就知道到底是哪裡錯。

===================引 用 Fion_JO 文 章===================
謝謝您的回答。
因為擔心一整句的SQL字串太長,執行上可能會有問題,所以才將字串拆開來寫。
即便是丟出一整句的SQL字串還是出現UPDATE陳述式語法錯誤。

[code delphi]
adoquery1.Close;
adoquery1.SQL.Clear;
adoQuery1.SQL.Add('update schedule set kind=:k,memo=:m,start_T=:st,end_T=:et where summary=:s ');
adoQuery1.Parameters.ParamByName('k').Value:= inttostr(rdg_kind.ItemIndex);
adoQuery1.Parameters.ParamByName('m').Value:= Tmemo.text;
adoQuery1.Parameters.ParamByName('st').Value:= DateToStr(dpt_startT.Date);
adoQuery1.Parameters.ParamByName('et').Value:= DateToStr(dpt_endT.Date);
adoQuery1.Parameters.ParamByName('s').Value:= Trim(ed_summary.Text);

aDOQuery1.execsql;
[/code]
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-02-06 17:21:18 IP:180.92.xxx.xxx 未訂閱
------
What do we live for if not to make life less difficult for each other?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-02-08 08:58:10 IP:210.242.xxx.xxx 未訂閱
memo 應該是 ms access 的保留字, 欄位名稱不要用 memo
或是原 SQL 改成如下試試(memo 加中括號):

update schedule set kind = :k, [memo] = :m, start_T = :st, end_T = :et where summary = :s
Fion_JO
一般會員


發表:2
回覆:4
積分:1
註冊:2009-11-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-02-08 11:30:49 IP:114.137.xxx.xxx 訂閱
照您的方法修改欄位名稱或是加上memo加上[ ],
兩種方法皆可以執行並寫入資料庫,問題解決了~
看來是保留字所造成的問題
真是非常感謝

PS. 因為寫select時欄名使用memo是可以執行的,所以一直想不到可能會是保留字的問題,多謝您的提醒~

===================引 用 hagar 文 章===================
memo 應該是 ms access 的保留字, 欄位名稱不要用 memo
或是原 SQL改成如下試試(memo 加中括號):

updateschedulesetkind = :k, [memo] = :m, start_T = :st, end_T = :etwheresummary = :s
Fion_JO
一般會員


發表:2
回覆:4
積分:1
註冊:2009-11-20

發送簡訊給我
#11 引用回覆 回覆 發表時間:2010-02-08 11:31:49 IP:114.137.xxx.xxx 訂閱
謝謝解答~
系統時間:2024-04-25 10:06:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!