buenas a todos
XP sp2, mysql, verdion de delphi desconocida, la imagen del about no la pude subir
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