Having some trouble with this...need to have my app work with both ADO and non-ADO datasets, so I need a conversion function that maps a standard VCL TParams list to an ADO TParameters. I keep getting typecast errors but can't see why. Here's the code...any hints? TIA
----------------------------
function TDBServer.ConvertToADOParms(Owner: TADODataset; aParams: TParams): TParameters;
var
aSize,i: integer;
Dir: TParameterDirection;
aResult : TParameters;
begin
// Convert a standard TParams object to an ADO-specific TParameters object
try
aResult :=nil;
Result :=aResult;
if aParams = nil then exit;
aResult :=TParameters.create( Owner, TParameter);
for i:=0 to aParams.count - 1 do
begin
if aParams = nil then
continue;
aSize :=aParams.size;
case aParams.ParamType of
ptUnknown:
Dir :=pdUnknown;
ptInput:
begin
Dir :=pdInput;
if aParams.size < length(aParams.value) then
aSize :=length(aParams.value);
end;
ptOutput:
Dir :=pdOutput;
ptInputOutput:
Dir :=pdInputOutput;
ptResult:
Dir :=pdReturnValue;
else
Dir :=pdInput;
end;
with aResult.AddParameter do
begin
Name := widestring(aParams.Name);
Datatype :=aParams.DataType;
Direction :=Dir;
Size :=aSize;
Value :=aParams.value;
end;
end;
Result :=aResult;
except
on e:exception do
begin
showmessage('Could not convert standard parameter object to ADO parameter object: '+
e.message);
aResult :=nil;
exit;
end;
end;
end;
----------------------------
function TDBServer.ConvertToADOParms(Owner: TADODataset; aParams: TParams): TParameters;
var
aSize,i: integer;
Dir: TParameterDirection;
aResult : TParameters;
begin
// Convert a standard TParams object to an ADO-specific TParameters object
try
aResult :=nil;
Result :=aResult;
if aParams = nil then exit;
aResult :=TParameters.create( Owner, TParameter);
for i:=0 to aParams.count - 1 do
begin
if aParams = nil then
continue;
aSize :=aParams.size;
case aParams.ParamType of
ptUnknown:
Dir :=pdUnknown;
ptInput:
begin
Dir :=pdInput;
if aParams.size < length(aParams.value) then
aSize :=length(aParams.value);
end;
ptOutput:
Dir :=pdOutput;
ptInputOutput:
Dir :=pdInputOutput;
ptResult:
Dir :=pdReturnValue;
else
Dir :=pdInput;
end;
with aResult.AddParameter do
begin
Name := widestring(aParams.Name);
Datatype :=aParams.DataType;
Direction :=Dir;
Size :=aSize;
Value :=aParams.value;
end;
end;
Result :=aResult;
except
on e:exception do
begin
showmessage('Could not convert standard parameter object to ADO parameter object: '+
e.message);
aResult :=nil;
exit;
end;
end;
end;