Muy complicado de hacer; las diferentes implementaciones estan en distintos arboles de herencia.
Por ejemplo en DB.pas se define el tipo TParam para operar con los parametros de los TQuery
Pero en ADODB.pas se define otro tipo TParameter que no tiene nada que ver con TParam
Tampco hay un ancestro comun para los TQuery. ADOQuery hereda de TCustomAdoDataSet quien hereda de TDataSet; y es en TCustomAdoDataSet donde se agrega la funcionalidad para los TParameter
Lo mas cercano que podes hacer es declarar una interface y luego crear clases wrapper, asi:
Código Delphi
[-]
unit Unit3;
interface
type
IQuery = interface
['{055FBC2E-FB1C-41DC-9696-B3071C8D04C4}']
procedure SetParamValue(const AName: string; AValue: Variant);
function GetParamValue(const AName: string): Variant;
procedure Close;
procedure Open;
end;
procedure cargar_query(const AQuery: IQuery; const Parametro, Valor: string);
implementation
procedure cargar_query(const AQuery: IQuery; const Parametro, Valor: string);
begin
AQuery.Close;
AQuery.SetParamValue(Parametro, Valor);
AQuery.Open;
end;
end.
Wrapper ADO:
Código Delphi
[-]
type
TAdoQueryWrapper = class(TADOQuery, IQuery)
public
procedure SetParamValue(const AName: string; AValue: Variant);
function GetParamValue(const AName: string): Variant;
end;
function TAdoQueryWrapper.GetParamValue(const AName: string): Variant;
begin
Result := Parameters.ParamByName(AName).Value;
end;
procedure TAdoQueryWrapper.SetParamValue(const AName: string; AValue: Variant);
begin
Parameters.ParamByName(AName).Value := AValue;
end;
Ejemplo de uso:
Código Delphi
[-]
procedure TForm2.Button1Click(Sender: TObject);
var
AQuery: TAdoQueryWrapper;
begin
AQuery := TAdoQueryWrapper.Create(NIL);
AQuery.Connection := ADOConnection1;
DataSource1.DataSet := AQuery;
AQuery.SQL.Text := ' SELECT * FROM Clientes WHERE Id > :Id ';
cargar_query(AQuery, 'Id', '5');
end;