这是旧的。但我的情况可能发生在别人身上。所以我张贴这个答案。
这个错误也发生在我身上。 我正在使用Access数据库并在窗体上使用一些TADOTable。 该关系是master-detail,我将所有表与IDE Designer连接在一起。 我的桌子是tbl_Floor,tbl_FloorParts,tbl_Seat,其中tbl_Floor是tbl_FloorParts的主人,tbl_FloorParts是tbl_Seat的主人。 所以为了解决这个错误,我做了这个诀窍。
procedure Tfrm_Main.UpdateTblFloor(...);
var
FID:Integer;
q:TADOQuery
begin
FID:=tbl_Floor.FieldByName('FID').AsInteger;
tbl_Floor.Close;
q:=TADOQuery.Create(nil);
try
q.Connection:=tbl_Floor.Connection;
q.SQL.Add('Update [Floor]');
q.SQL.Add(...);//Set Fields that needed to be updated
q.SQL.Add('where [FID]='+IntToStr(FID));
q.ExecSQL;
finally
q.free;
end;
tbl_Floor.Open;
tbl_Floor.Locate('FID',FId,[loPartialKey]);
end;
和我说这些事件tbl_Floor,tbl_FloorParts
procedure Tfrm_Main.tbl_FloorAfterOpen(DataSet: TDataSet);
begin
tbl_FloorParts.Open;
end;
procedure Tfrm_Main.tbl_FloorBeforeClose(DataSet: TDataSet);
begin
tbl_FloorParts.Close;
end;
procedure Tfrm_Main.tbl_FloorPartsAfterOpen(DataSet: TDataSet);
begin
tbl_Seat.Open;
end;
procedure Tfrm_Main.tbl_FloorPartsBeforeClose(DataSet: TDataSet);
begin
tbl_Seat.Close;
end;
其实,所有的dbcomponents现在扔掉。使用常规组件重新创建gui,使用对象创建中间件,并将对象转换为数据库转换 - 它肯定比用adonis搞乱更快...... – Vegar 2009-01-29 19:58:08
它真的很神秘吗?哇... – 2009-01-29 20:20:55
其实,我使用clientdatasets的一切...而且由于安德烈亚斯(安德烈亚斯豪斯拉登)为他们加快了速度,情况甚至更好。 – 2009-02-02 17:56:22