全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1348
推到 Plurk!
推到 Facebook!

access表insert into的問題

答題得分者是:allenchan
oktony
中階會員


發表:67
回覆:132
積分:64
註冊:2004-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-09 13:28:22 IP:222.79.xxx.xxx 未訂閱
一個access表裏有個ID的字段是自動編號的,裏面還有name等字段,我用ADOQuery的insert into語句像這個表插入紀錄時,必須插入ID字段不然系統會提示出錯說參數不全,可是insert into的時候ID參數又不能為空必須指定一個值,這樣程式能正常插入數據,可是access的自動編號功能就失效了,請問如何解決這個問題?是不是不要用access的自動編號而必須自己編一個累加的函數才可以呢?謝謝!
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-09 13:47:18 IP:210.65.xxx.xxx 未訂閱
Hi oktony,    用一個 Query 或是 Table,再用 Append 後對其餘欄位逐一給值試試!!    可以參考這一篇,裡面就有用到這種寫法: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44484 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-09 13:48:46 IP:203.70.xxx.xxx 未訂閱
請問您 SQL 語法如何呢?你 insert into 時不要把 ID 放進去就好啦, 我測試的 Table 名稱為 Test,有 ID, Name, Addr 三欄,ID 為自動編號。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("insert into Test (Name, Addr) Values ('111', '222')");
    ADOQuery1->ExecSQL();
}
oktony
中階會員


發表:67
回覆:132
積分:64
註冊:2004-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-09 14:07:19 IP:222.79.xxx.xxx 未訂閱
我的sql語法如下: with ADOQuery1 do begin Close; SQL.Clear; SQL.Add('INSERT INTO personnel_change VALUES'); SQL.Add('(:ID,:empID,:name,:changetime,:memo)'); Parameters.ParamValues['ID']:='2';{不能為空,我只好填任填一個數字} Parameters.ParamValues['empID']:=dbeID.Text; Parameters.ParamValues['name']:=dbeName.Text; Parameters.ParamValues['changetime']:=DateToStr(Date); Parameters.ParamValues['memo']:='abc'; ExecSQL; end; 如果我把ID參數不寫的話,就會出錯,提示:查詢的數目與目標字段中的數目不同。
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-09 14:19:04 IP:203.70.xxx.xxx 未訂閱
with ADOQuery1 do
begin
  Close;
  SQL.Clear;
  SQL.Add('INSERT INTO personnel_change (empID, name, changetime, memo) VALUES');
  SQL.Add('(:ID,:empID,:name,:changetime,:memo)');
  Parameters.ParamValues['ID']:='2';{不能為空,我只好填任填一個數字}
  Parameters.ParamValues['empID']:=dbeID.Text;
  Parameters.ParamValues['name']:=dbeName.Text;
  Parameters.ParamValues['changetime']:=DateToStr(Date);
  Parameters.ParamValues['memo']:='abc';
  ExecSQL;
end;
oktony
中階會員


發表:67
回覆:132
積分:64
註冊:2004-12-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-09 15:43:09 IP:222.79.xxx.xxx 未訂閱
不能用啊,我原先寫的跟您也是一樣的,會提示insert into語法錯誤,要我寫的那樣才能正常運行,就是自動編號不能用了。
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-09 15:59:30 IP:203.70.xxx.xxx 未訂閱
會有什麼錯誤訊息呢?是用到 keyword 當欄位名稱的訊息嗎?改成這樣呢?
with ADOQuery1 do
begin
  Close;
  SQL.Clear;
  SQL.Add('INSERT INTO personnel_change ([empID], [name], [changetime], [memo]) VALUES');
  SQL.Add('(:empID,:name,:changetime,:memo)');
  Parameters.ParamValues['empID']:=dbeID.Text;
  Parameters.ParamValues['name']:=dbeName.Text;
  Parameters.ParamValues['changetime']:=DateToStr(Date);
  Parameters.ParamValues['memo']:='abc';
  ExecSQL;
end;
oktony
中階會員


發表:67
回覆:132
積分:64
註冊:2004-12-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-09 16:00:59 IP:222.79.xxx.xxx 未訂閱
另外還要謝謝fishman提供的範例,不過小弟初學,看不太懂,能說的具體一些嗎?
oktony
中階會員


發表:67
回覆:132
積分:64
註冊:2004-12-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-09 16:07:55 IP:222.79.xxx.xxx 未訂閱
謝謝allenchan,加上[]就可以了,很感謝!
系統時間:2024-06-29 5:36:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!