目前,我们正在将Delphi7应用程序的数据库组件从BDE组件迁移到AnyDAC 版本 8.0.5组件(同时称为 FireDAC)。
我们在 MDI 子窗体中使用以下控件:
TADTable
TDataSource
TDBNavigator
TDBEdit
(aTStringField
分配给DataField
属性)TDBMemo
(aTMemoField
分配给 DataField 属性 [DB Field Type = Blob
])
所有数据库控件都相互连接
当我们更改两个或三个记录时,我们将EAccessViolation
在断开连接期间收到一个TADCustomConnection
. 出现EAccessViolation
在TCustomConnection
(内部单元DB
)的以下方法中:
procedure TCustomConnection.SendConnectEvent(Connecting: Boolean);
var
I: Integer;
ConnectEvent: TConnectChangeEvent;
begin
for I := 0 to FClients.Count - 1 do
begin
if FConnectEvents[I] <> nil then
begin
TMethod(ConnectEvent).Code := FConnectEvents[I];
TMethod(ConnectEvent).Data := FClients[I];
ConnectEvent(Self, Connecting);
end;
if TObject(FClients[I]) is TDataset then // <-- raises the EAccessViolation
TDataSet(FClients[I]).DataEvent(deConnectChange, Integer(Connecting));
end;
end;
原因EAccessViolation
是该TADCustomConnection.FCommands
属性包含已发布TADCommands
。通常一切都像一个魅力,但如果我们排除fiBlobs
在TADTable.FetchOption.Items
或如果我们只是RefreshRecord
在TADTable.BeforeEdit
我们收到EAccessViolation
.
任何帮助是极大的赞赏。