2017-06-01 4 views
1

Je travaille sur un code existant qui contient des composants TQuery. J'essayais de créer une fonction qui convertit les paramètres TQuery en TParameters afin que je puisse les assigner dans la propriété Parameters d'un composant ADO (comme ADOQuery ou ADODataSet).Comment faire pour convertir un objet TParams (TQuery) en objet TParameters (ADO).?

J'ai essayé ce qui suit, que j'ai obtenu sur internet.

function ConvertToADOParms(Owner: TADODataset; aParams: TParams): TParameters; 

var i: integer; 

begin 
// Convert a standard TParams object to an ADO-specific TParameters object 
Result :=nil; 
try 
    if aParams = nil then exit; 
    Result :=TParameters.create(Owner, TParameter); 
    for i:=0 to aParams.count - 1 do 
    begin 
    if aParams[i] = nil then continue; 
    with Result.AddParameter do 
    begin 
     Name := aParams[i].Name; 
     Datatype :=aParams[i].DataType; 
     Direction :=TParameterDirection(aParams[i].ParamType); 
     Size :=aParams[i].size; 
     Value :=aParams[i].value; 
    end; 
    end; 
except 
    on e:exception do 
    begin 
    Result :=nil; 
    showmessage('Could not convert standard parameter object to ADO parameter object: '+e.message); 
    end; 
end; 
end; 

Mais j'obtiens erreur de classe non valide Typecast. Quand je débogue le code j'ai trouvé que l'erreur se produit à cette fonction dans l'unité ADODB

function TParameters.GetCommand: TADOCommand; 
begin 
    Result := GetOwner as TADOCommand; 
end; 

Aide S'il vous plaît. J'utilise Delphi 5

+0

@Victoria Merci beaucoup Cela a fonctionné pour moi.Alors le problème était dû à l'écrasement? –

Répondre

2

Je n'ai pas beaucoup de sens du prototype de fonction. Il demande un propriétaire pour la collection qui est retournée par la fonction et en tant que tel devrait être indépendant.

Je voudrais simplement me débarrasser de cela et opérer directement avec l'objet ADO passé. Par exemple:

procedure FillParamsADO(Params: TParams; Dataset: TADODataset); 
var 
    i: Integer; 
begin 
    Dataset.Parameters.Clear; 
    for i := 0 to Params.Count-1 do 
    begin 
    with Dataset.Parameters.AddParameter do 
    begin 
     Name := Params[i].Name; 
     DataType := Params[i].DataType; 
     Direction := TParameterDirection(Params[i].ParamType); 
     Size := Params[i].Size; 
     Value := Params[i].Value; 
    end; 
    end; 
end;