Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   TADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=63726)

bastian 27-02-2009 17:23:36

TADOQuery
 
buenas a todos
XP sp2, mysql, verdion de delphi desconocida, la imagen del about no la pude subir:confused: o debria venir aca




quiero crear una clase la cual me provea un punto de accesso comun
a un componente que me permita realizar consultas, TADOQuery, aqui viene el condigo

la idea basica era realizar un patron Singleton...

pero me sale un error : Cannto perform this operation on a closed dataset.
cuando le doy F9 al proyecto y en el form que usa esta clase

Código:

unit DBQuery;

interface

uses
  DB, ADODB,
  DM, ListaSE, QParametro;

type
  TDBQuery = class

    private

      parametroCargado : Boolean;
      listaSE : TListaSE;

      class var
        query : TADOQuery;
        preguntador : TDBQuery;
      constructor Create();// override;

    public
      class function getInstance(): TDBQuery;
      class function sayHi() : String;

      function consultaSelect( consulta : String ) : Integer;
      function getFieldByName( campo : String ) : Variant;
      destructor Destroy(); override;
      procedure cargarParametro( param : TQParametro);


  end;

implementation

{ TDBQuery }

procedure TDBQuery.cargarParametro(param: TQParametro);
begin
  listaSE.insertarFinal(param);
  Self.parametroCargado := True;
end;

function TDBQuery.consultaSelect(consulta: String): Integer;
var
  param : TQParametro;
  nombre , valor : String;

begin

  Self.query.SQL.Clear();
  Self.query.SQL.Add(consulta);

  if parametroCargado = True then
  begin

      while Self.listaSE.esVacio() <> true do
      begin

        param := Self.listaSE.getDato();
        nombre := param.getNombre();
        valor :=  param.getValor();

        Self.query.Parameters.ParamByName( nombre ).Value := valor;

      end;
      parametroCargado := False;

  end;

  Result := Self.query.RecordCount;
end;

constructor TDBQuery.Create;
begin

  query := TADOQuery.Create(nil);
  query.Connection := DataModule1.AC1;

  ///--------------------------------------------------
  //If query.Active then query.Close;
  //  query.Prepared := True;
  //  query.Open();
  ///--------------------------------------------------

  listaSE := TListaSE.Create();

end;

destructor TDBQuery.Destroy;
begin
  query.Free;
  //lista.Free;

  //If query.Active then query.Close;
  query.Prepared := False;
  inherited;
end;

function TDBQuery.getFieldByName(campo: String): Variant;
begin
  Self.query.FieldByName(campo).Value;
  Self.query.Next;
end;

class function TDBQuery.getInstance: TDBQuery;
begin
  if Self.preguntador = nil then begin
    preguntador := TDBQuery.Create();
  end;

  Result := preguntador;
end;

class function TDBQuery.sayHi: String;
begin
  Result := 'Hola Amigo. THis is a test, dont scare yourself.';
end;

end.
procedure TDBQuery.cargarParametro(param: TQParametro);
begin
  listaSE.insertarFinal(param);
  Self.parametroCargado := True;
end;

function TDBQuery.consultaSelect(consulta: String): Integer;
var
  param : TQParametro;
  nombre , valor : String;

begin

  Self.query.SQL.Clear();
  Self.query.SQL.Add(consulta);

  if parametroCargado = True then
  begin

      while Self.listaSE.esVacio() <> true do
      begin

        param := Self.listaSE.getDato();
        nombre := param.getNombre();
        valor :=  param.getValor();

        Self.query.Parameters.ParamByName( nombre ).Value := valor;

      end;
      parametroCargado := False;

  end;

  Result := Self.query.RecordCount;
end;

constructor TDBQuery.Create;
begin

  query := TADOQuery.Create(nil);
  query.Connection := DataModule1.AC1;

  //TDataSet.
  //query.Recordset.Open(nil, nil, nil, nil, 1);
  listaSE := TListaSE.Create();

end;

function TDBQuery.getFieldByName(campo: String): Variant;
begin
  Self.query.FieldByName(campo).Value;
  Self.query.Next;
end;

class function TDBQuery.getInstance: TDBQuery;
begin
  if Self.preguntador = nil then begin
    preguntador := TDBQuery.Create();
  end;

  Result := preguntador;
end;

class function TDBQuery.sayHi: String;
begin
  Result := 'Hola Amigo. THis is a test, dont scare yourself.';
end;

end.

Debe de ser algun error en la creacion ya que no estoy usando componentes visuales, algo que normalmente se hace automaticamente
jpero que?
Si es algun error de novato perdon:p

Neftali [Germán.Estévez] 27-02-2009 18:17:14

Cita:

Empezado por bastian (Mensaje 339607)
XP sp2, mysql, verdion de delphi desconocida, la imagen del about no la pude subir o debria venir aca

pero me sale un error : Cannto perform this operation on a closed dataset.
cuando le doy F9 al proyecto y en el form que usa esta clase

No hace falta que subas la imagen del about, basta con que mires el númeo y lo digas.

En cuanto al error, tiene pinta de que estás accediendo a consultar/editar/... el dataset (Query) sin haberlo abierto antes.
Ejecuta paso a paso y sabrás exactamente en qué linea está fallando.


La franja horaria es GMT +2. Ahora son las 09:35:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi