Delphi ZeosLib [不兼容的类型:'TZConnection' 和 'TZAbstractConnection']

Delphi ZeosLib [Incompatible types: 'TZConnection' and 'TZAbstractConnection']

我在 Delphi 7 中有一个带有 zeos 6 的系统,我使用以下功能:

function zIncCodeByYear (zQry : TZquery; ....): String;
var
  zConLocal, zConOriginal : TZConnection;
  ... 
begin
  bActive := zQry.Active;
  zConOriginal :=  zQry.Connection;

这一直运行良好,现在我需要将此系统转换为 Delphi Seatle,并因此转换为 Zeos trunk (7.2),安装此版本后,及时编译,我收到错误:

[dcc32 错误]zeosfuncs.pas(265):E2010 不兼容的类型:'TZConnection' 和 'TZAbstractConnection'

会发生什么?这个版本如何从zquery获取连接?

您并没有真正提供太多代码。但据推测 Zeos 将 TZQuery.Connection 的类型更改为 TZAbstractConnection。因此,您只需按如下方式更改局部变量声明即可:

var
  zConLocal, zConOriginal : TZAbstractConnection;

还要记住原则:Program to an interface, not an implementation(不幸的是,该问题的公认答案非常有趣,但错误。至少我链接的答案是正确的。)

您可以简单地使用 ZAbstractConnection,转换为 TZConnection 对您来说没有任何区别。在这种特定情况下,无论您做什么都没有错。

在 TZConnection 的帮助下,数据库、协议等一些属性正在发布中。在基础 class TZAbstractConnection 中,它们是 public.