Ver Mensaje Individual
  #5  
Antiguo 31-01-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
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;

{ TAdoQueryWrapper }

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;
Responder Con Cita