delphi adoconnection econvert错误

时间:2010-10-25 15:17:37

标签: delphi delphi-7 adoconnection

我有以下代码提出EConvertError - “无法将TAdoConnection分配给TAdoConnection”

var
  wTmpADOConn       : TADOConnection;
begin
  //
  Result := nil;
  try
    Result := TADOConnection.Create(nil);
    wTmpADOConn := afunc(aNameConn);//aFunc-Function which returns a pointer to a  TADOConnection object, aNameConn - string- the name of connection
    if wTmpADOConn <> nil then
    begin
      Result.Assign(wTmpADOConn);//here the error is raising

我无法理解我做错了什么。我试图将变量wTmpADOConn转换为TAdoConnection或TPersistent,但没有成功。

我知道复制对象时可以使用Assign过程。

代码是用Delphi 7编写的。

LE:谢谢大家,问题是该对象是一个共享对象,是对另一个ADOConnection的引用。我想要自己的对象,所以我可以释放它,而不需要释放引用。逻辑很复杂,我需要一些机制来从该引用创建一个对象。

4 个答案:

答案 0 :(得分:2)

您无法将TADOConnection分配给TADOConnection,因为此类分配未在TADOConnection类中实现。这很常见 - 很多类都没有实现Assign方法,你不能指望任何TPersistent后代实现Assign方法 - 通常不需要它。

答案 1 :(得分:1)

wTmpADOConn参考来自哪里?如果它来自不同的可执行模块(dll)并且没有使用packeges,则wTmpADOConn和Result的类型将不匹配。

答案 2 :(得分:1)

TAdoConnection(与其他“连接”类一样)不仅仅是分配内存的块。通常它包含活动资源的句柄或其他状态信息,例如与数据库的开放连接,打开的文件等。

连接通常不是为了在不同实例之间共享这种“实时”连接而设计的。

无论如何,如果afunc返回一个新创建的连接而不是一个共享对象,你可以只返回创建的连接。如果afunc返回nil,则创建一个新的,如下所示:

var
  wTmpADOConn       : TADOConnection;
begin
  Result := afunc(aNameConn);//aFunc-Function which returns a pointer to a  TADOConnection object, aNameConn - string- the name of connection
  if Result <> nil then
    Result := TADOConnection.Create(nil);

当然,你的逻辑可能很复杂......我只是在玩你从函数中展示的东西......

另一种方法是重新使用aFunc返回连接的参数并打开一个新的...

最好的问候。

答案 3 :(得分:0)

基于答案(尤其是jachguate),我通过分配连接字符串来解决它。代码吼叫

  Result.ConnectionString:=wTmpADOConn.ConnectionString;
  Result.LoginPrompt:=wTmpADOConn.LoginPrompt;
  Result.Name:=wTmpADOConn.Name;

所有答案都是+1。谢谢

最好的问候,