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

試了好久都是出現這個錯誤

尚未結案
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-19 00:25:13 IP:61.217.xxx.xxx 未訂閱
我用BDE,Tquery,DataSource,DataBase連結ACCESS資料,照著範例KEY,一直出 現這個錯誤,我是那裡沒有設定好,請各位高手幫幫我,謝謝!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-19 08:37:18 IP:210.61.xxx.xxx 未訂閱
您的SQL字串有問題 可能是少了引號或者少了空白之類的 或許您可以把sql表達式po上來 我們幫您看看
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-19 08:38:55 IP:218.163.xxx.xxx 未訂閱
leo2568 你好: 看起來是 SQL 錯誤, 能 po 上 TQuery.SQL 內容, 以及 Access 之 Table/Column 結構嗎 ?
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-19 12:06:56 IP:202.145.xxx.xxx 未訂閱
pedroMickey您們好,我把程式碼po 上來,請幫忙,謝謝! unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, DBTables, StdCtrls, DBCtrls, Mask, Buttons; type TForm1 = class(TForm) Database1: TDatabase; UpdateSQL1: TUpdateSQL; BitBtnAppend: TBitBtn; BitBtnModify: TBitBtn; BitBtnDelete: TBitBtn; BitBtnYes: TBitBtn; BitBtnCancel: TBitBtn; BitBtnQuit: TBitBtn; BitBtnprior: TBitBtn; bitbtnNext: TBitBtn; Query1: TQuery; Query1RECNO: TStringField; Query1ORDER_NO: TStringField; Query1GRADE: TStringField; Query1BATCH: TStringField; Query1VOLUME: TStringField; Query1DATE_1: TDateTimeField; Query1DATE_2: TDateTimeField; Query1DATE_3: TDateTimeField; Query1DATE_4: TDateTimeField; Query1ISCHANGE: TBooleanField; Query1SCRIP: TMemoField; Label1: TLabel; DBEdit1: TDBEdit; DataSource1: TDataSource; Label2: TLabel; DBEdit2: TDBEdit; Label3: TLabel; DBEdit3: TDBEdit; Label4: TLabel; DBEdit4: TDBEdit; Label5: TLabel; DBEdit5: TDBEdit; Label6: TLabel; DBEdit6: TDBEdit; Label7: TLabel; DBEdit7: TDBEdit; Label8: TLabel; DBEdit8: TDBEdit; Label9: TLabel; DBEdit9: TDBEdit; DBCheckBox1: TDBCheckBox; Label10: TLabel; DBMemo1: TDBMemo; procedure FormActivate(Sender: TObject); procedure BitBtnQuitClick(Sender: TObject); procedure BitBtnYesClick(Sender: TObject); procedure BitBtnAppendClick(Sender: TObject); procedure BitBtnCancelClick(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtnpriorClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin UpdateSql1.InsertSQL.Clear; UpdateSql1.InsertSQL.Add('INSERT INTO G_DATA1 '); UpdateSql1.InsertSQL.Add(' ( ORDER_NO, '); UpdateSql1.InsertSQL.Add(' GRADE , '); UpdateSql1.InsertSQL.Add(' BATCH , '); UpdateSql1.InsertSQL.Add(' VOLUME, '); UpdateSql1.InsertSQL.Add(' DATE_1, '); UpdateSql1.InsertSQL.Add(' DATE_2, '); UpdateSql1.InsertSQL.Add(' DATE_3, '); UpdateSql1.InsertSQL.Add(' DATE_4, '); UpdateSql1.InsertSQL.Add(' ISCHANGE, '); UpdateSql1.InsertSQL.Add(' SCRIP )'); UpdateSql1.InsertSQL.Add(' VALUES '); UpdateSql1.InsertSQL.Add(' (:ORDER_NO,:GRADE,:BATCH,'); UpdateSql1.InsertSQL.Add(' :VOLUME,:DATE_1,'); UpdateSql1.InsertSQL.Add(' :DATE_2,:DATE_3,'); UpdateSql1.InsertSQL.Add(' :DATE_4,:ISCHANGE,:SCRIP ) '); UpdateSql1.ModifySQL.Clear; UpdateSql1.ModifySQL.Add('UPDATE G_DATA1 '); UpdateSql1.ModifySQL.Add('SET '); UpdateSql1.ModifySQL.Add('ORDER_NO = :ORDER_NO,'); UpdateSql1.ModifySQL.Add('GRADE = :GRADE ,'); UpdateSql1.ModifySQL.Add('BATCH = :BATCH ,'); UpdateSql1.ModifySQL.Add('VOLUME = :VOLUME ,'); UpdateSql1.ModifySQL.Add('DATE_1 = :DATE_1 ,'); UpdateSql1.ModifySQL.Add('DATE_2 = :DATE_2 ,'); UpdateSql1.ModifySQL.Add('DATE_3 = :DATE_3 ,'); UpdateSql1.ModifySQL.Add('DATE_4 = :DATE_4 ,'); UpdateSql1.ModifySQL.Add('SCRIP = :SCRIP '); UpdateSql1.ModifySQL.Add('WHERE ORDER_NO = :ORDER_NO'); UpdateSQL1.DeleteSQL.Clear; UpdateSql1.DeleteSQL.Add('DELETE FROM G_DATA1 '); UpdateSql1.DeleteSQL.Add('WHERE ORDER_NO = :ORDER_NO'); Query1.CachedUpdates := true; Query1.UpdateObject := UpdateSql1; Query1.SQL.Clear; Query1.SQL.Add('SELECT * FROM G_DATA1'); Query1.Close; Query1.Open; end; procedure TForm1.BitBtnQuitClick(Sender: TObject); begin DataBase1.Close; Query1.SQL.Clear; close; end; procedure TForm1.BitBtnYesClick(Sender: TObject); begin Try DataBase1 .StartTransaction; Query1 .ApplyUpdates; Query1 .CommitUpdates; DataBase1 .Commit; Except DataBase1.Rollback; Query1.CancelUpdates; ShowMessage('存檔失敗 '); close; end; Query1.Close; Query1.Open; end; procedure TForm1.BitBtnAppendClick(Sender: TObject); begin Query1.Append; Query1ORDER_NO.Value:=''; Query1GRADE.Value :=''; Query1BATCH.Value :=''; Query1VOLUME.Value :=''; Query1Date_1.Value := date; Query1Date_2.Value := date; Query1Date_3.Value := date; Query1Date_4.Value := date; Query1ischange.Value:= False; Query1scrip.Value := ''; Dbedit2.SetFocus; end; procedure TForm1.BitBtnCancelClick(Sender: TObject); begin Query1.Cancel; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin Query1.Next; end; procedure TForm1.BitBtnpriorClick(Sender: TObject); begin Query1.Prior; end; procedure TForm1.FormCreate(Sender: TObject); begin end; end.
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-19 12:09:24 IP:202.145.xxx.xxx 未訂閱
補充一下,其中field[scrip]是備註欄位.
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-19 12:26:33 IP:218.163.xxx.xxx 未訂閱
改成這樣試試 :
procedure TForm1.BitBtnAppendClick(Sender: TObject);
begin
  Query1.Append;
  Query1Date_1.Value := date;
  Query1Date_2.Value := date;
  Query1Date_3.Value := date;
  Query1Date_4.Value := date;
  Query1ischange.Value:= False;
  Dbedit2.SetFocus;
end;
另外, 不知您何時 post Query1, 是交給 DBGrid 等資料感知元件做嗎 ?
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-19 12:31:59 IP:202.145.xxx.xxx 未訂閱
謝謝版主Mickey,我先試試看,有問題再發問...
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-19 12:42:53 IP:202.145.xxx.xxx 未訂閱
剛剛回應得太快,我是要按新増的BitbtnAppend先清空dbedit1等,供輸入資料,再按BitbtnYes post Query1的.
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-11-19 13:35:54 IP:218.163.xxx.xxx 未訂閱
剛剛試不出你的 Error, 卻遇到 "Update Fail" Error....    你 UpdateSQL1 (Modify/Delete) 最後一行 UpdateSql1.ModifySQL.Add('WHERE ORDER_NO = :ORDER_NO'); 與 UpdateSql1.DeleteSQL.Add('WHERE ORDER_NO = :ORDER_NO');    應該改成 UpdateSql1.ModifySQL.Add('WHERE ORDER_NO = :OLD_ORDER_NO'); 與 UpdateSql1.DeleteSQL.Add('WHERE ORDER_NO = :OLD_ORDER_NO'); 才對 發表人 - Mickey 於 2003/11/19 13:40:54
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-11-19 14:57:12 IP:202.145.xxx.xxx 未訂閱
我想這樣子應該可以了!謝謝版主!
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-11-20 23:02:15 IP:61.217.xxx.xxx 未訂閱
謝謝這個部份問題解決了,但是當我在連續新増記錄時,約數筆時就會出現上述的錯誤.
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-11-20 23:31:06 IP:218.32.xxx.xxx 未訂閱
你可以用 Delphi 提供的 "SQL Monitor"工具, 追蹤看看 ApplyUpdate 時 BDE 下了什麼 SQL. 另外, 你 ACCESS/ODBC 版本是 ? 我無法複製你所發生的問題....
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-11-20 23:38:03 IP:61.217.xxx.xxx 未訂閱
我把壓縮檔po到『會員求助檔案上傳區』煩請幫忙除錯,謝謝!(MYtest1.rar) ACCESS:XP 發表人 - leo2568 於 2003/11/20 23:49:06
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-11-21 23:53:26 IP:218.32.xxx.xxx 未訂閱
你 REC_NO 是 "自動編號" 程式不能去控制值, ACCESS 會於 Insert 時, 自動賦予, 所以 UpdateSQL 的 SQL 需改成 : Insert : insert into G_DATA1 (ORDER_NO, GRADE, BATCH, VOLUME, DATE_1, DATE_2, DATE_3, DATE_4, ISCHANGE, SCRIP) values (:ORDER_NO, :GRADE, :BATCH, :VOLUME, :DATE_1, :DATE_2, :DATE_3, : DATE_4, :ISCHANGE, :SCRIP) Delete : delete from G_DATA1 where ORDER_NO = :OLD_ORDER_NO Modify : update G_DATA1 set ORDER_NO = :ORDER_NO, GRADE = :GRADE, BATCH = :BATCH, VOLUME = :VOLUME, DATE_1 = :DATE_1, DATE_2 = :DATE_2, DATE_3 = :DATE_3, DATE_4 = :DATE_4, ISCHANGE = :ISCHANGE, SCRIP = :SCRIP where ORDER_NO = :OLD_ORDER_NO
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-11-22 00:10:56 IP:202.145.xxx.xxx 未訂閱
Mickey版主,辛苦你了 當我在insert新記錄時,自動編號欄位沒有及時更新,必須結束程式再重新進入程式才能看到此筆記錄的編號,也是sql指令錯誤造成的嗎? 再次謝謝你 ,我差點放棄使用
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-11-22 11:10:10 IP:218.32.xxx.xxx 未訂閱
因為是 ACCESS 賦予值, 所以前端 Insert 進去後, 並不會知道,    ACCESS 給了啥值, 必須要 Close; Open; 才會更新.    ApplyUpdate Button 稍稍改一下:
procedure TForm1.BitBtnYesClick(Sender: TObject);
var OrderNO:string;
begin
  Try
    DataBase1 .StartTransaction;
    Query1    .ApplyUpdates;
    Query1    .CommitUpdates;
    DataBase1 .Commit;
    OrderNo := Query1.FieldByName('ORDER_NO').AsString;// 存當時的 Key 值
    Query1.Close;
    Query1.Open;
    Query1.Locate('ORDER_NO',OrderNO,[]); // 重新將資料指標只回原資料列
  Except
    DataBase1.Rollback;
    Query1.CancelUpdates;
    ShowMessage('存檔失敗 ');
  end;
end;
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

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