試了好久都是出現這個錯誤 |
尚未結案
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
pedro及Mickey您們好,我把程式碼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 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
改成這樣試試 :
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 發送簡訊給我 |
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
剛剛試不出你的 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 發送簡訊給我 |
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
你 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 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
因為是 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |