1

目前,我们正在将Delphi7应用程序的数据库组件从BDE组件迁移到AnyDAC 版本 8.0.5组件(同时称为 FireDAC)。

我们在 MDI 子窗体中使用以下控件:

  • TADTable
  • TDataSource
  • TDBNavigator
  • TDBEdit(aTStringField分配给DataField属性)
  • TDBMemo(aTMemoField分配给 DataField 属性 [ DB Field Type = Blob])

所有数据库控件都相互连接

当我们更改两个或三个记录时,我们将EAccessViolation在断开连接期间收到一个TADCustomConnection. 出现EAccessViolationTCustomConnection(内部单元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。通常一切都像一个魅力,但如果我们排除fiBlobsTADTable.FetchOption.Items或如果我们只是RefreshRecordTADTable.BeforeEdit我们收到EAccessViolation.

任何帮助是极大的赞赏。

4

0 回答 0