Reputation: 12584
I have the following code wich is raising an EConvertError - "can not assign TAdoConnection to 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
I can not understand what I'm doing wrong. I've tried to cast to TAdoConnection or TPersistent the variable wTmpADOConn, but without success.
I know that for copying an object it can be used the Assign procedure.
Code is written in Delphi 7.
LE: thank you all, the problem is that the object is a shared object, is a reference to another ADOConnection. And I want my own object so i can free it, without freeing the reference. The logic is complex, and I need some mechanism to create an object from that reference.
Upvotes: 2
Views: 1105
Reputation: 15893
Where does wTmpADOConn reference come from? If it is from a different executable module (dll) and packages are not used, the types of wTmpADOConn and Result will not match.
Upvotes: 1
Reputation: 12584
based on the answers (especially jachguate), I resolved it by assigning the connection string. code bellow
Result.ConnectionString:=wTmpADOConn.ConnectionString;
Result.LoginPrompt:=wTmpADOConn.LoginPrompt;
Result.Name:=wTmpADOConn.Name;
+1 for all the answers. Thank you
best regards,
Upvotes: 0
Reputation: 17203
TAdoConnection (like other "connection" classes) is not just a block of assigned memory. Usually it contains handles or other state-information to active resources, like a open connection to a database, open files, and such.
And the connections are usually not designed to share this "live" connection among different instances.
Anyway, if afunc returns a newly created connection and not a shared object, you can just return the afunc created one. If afunc return nil, create a new one, like this:
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);
of course, your logic may be complex... I'm just playing with what you showed from your function...
Another way to do this is to re-use the parameters of the aFunc returned connection and open a new one...
Best regards.
Upvotes: 1
Reputation: 27493
You can't assign TADOConnection to TADOConnection because such an assignment is not implemented in TADOConnection class. That is quite common - a lot of classes do not implement Assign method, and you can't expect that any TPersistent descendant implements the Assign method - usually there is no need in it.
Upvotes: 2