GerTorresM
08-08-2015, 03:13:55
Hola a tod@s
la situación que se me presenta en la día de hoy es la siguiente:
Cree una unidad .pas en la cual deseo manejar el acceso y manejo de los datos de un app, en orden de ideas cree esta unidad
unit UCoreBD;
interface
uses DBClient,Provider, ADODB, Dialogs, SysUtils, Classes,
//CS
UDMModuloDatosBD;
// Funciones de la BD
function getClientDataset(pName : string; pParent : Tcomponent ; pSql : String) : TClientDataSet;
procedure liberarClientDataset(pClientDataset : TClientDataSet ; pParent : Tcomponent);
implementation
function getClientDataset(pName : string; pParent : Tcomponent ; pSql : String) : TClientDataSet;
var qConsulta_temporal: TADOQuery;
dsProvedir_temporal : TDataSetProvider;
cds_temporal : TClientDataSet;
begin
Result:= nil;
qConsulta_temporal:= nil;
dsProvedir_temporal:= nil;
try
qConsulta_temporal:= TADOQuery.Create(nil);
qConsulta_temporal.ConnectionString:= UDMModuloDatosBD.getConexion.ConnectionString;
qConsulta_temporal.SQL.Text:= pSql;
qConsulta_temporal.Open;
dsProvedir_temporal:= TDataSetProvider.Create(pParent);
dsProvedir_temporal.DataSet:= qConsulta_temporal;
dsProvedir_temporal.Name:= 'DSP_' + pName ;
cds_temporal := TClientDataset.Create(pParent);
cds_temporal.ProviderName:= dsProvedir_temporal.Name;
cds_temporal.Name:= pName;
cds_temporal.PacketRecords:= -1;
cds_temporal.open;
Result:= cds_temporal;
except
end;
end;
procedure liberarClientDataset(pClientDataset : TClientDataSet; pParent : Tcomponent);
begin
TProvider(FindComponent(pClientDataset.ProviderName)).DataSet.Free;
TProvider(FindComponent(pClientDataset.ProviderName)).Free;
end;
En orden de ideas el primer método trabaja a la perfección y su codifcación es la siguiente
procedure TFPedido.FormCreate(Sender: TObject);
begin
self.conjuntoDatos:= getClientDataset('ConjuntoDatos', Self , 'Select * from pedido');
Self.dsPedidos.DataSet:= self.conjuntoDatos;
self.dbgrdPeidos.DataSource:= Self.dsPedidos;
end;
Ahora una vez creando el primer método, escrbi el segundo con el que deseo liberar los componentes de datos pero al construir la app me envia el siguiente mensaje de error el compilador
Build
[Error] UCoreBD.pas(51): Undeclared identifier: 'FindComponent'
[Fatal Error] Pedidos.dpr(14): Could not compile used unit 'Core\UCoreBD.pas'
Agradezco de antemano cualquier comentario y el tiempo dedicado
gertorresm
co
la situación que se me presenta en la día de hoy es la siguiente:
Cree una unidad .pas en la cual deseo manejar el acceso y manejo de los datos de un app, en orden de ideas cree esta unidad
unit UCoreBD;
interface
uses DBClient,Provider, ADODB, Dialogs, SysUtils, Classes,
//CS
UDMModuloDatosBD;
// Funciones de la BD
function getClientDataset(pName : string; pParent : Tcomponent ; pSql : String) : TClientDataSet;
procedure liberarClientDataset(pClientDataset : TClientDataSet ; pParent : Tcomponent);
implementation
function getClientDataset(pName : string; pParent : Tcomponent ; pSql : String) : TClientDataSet;
var qConsulta_temporal: TADOQuery;
dsProvedir_temporal : TDataSetProvider;
cds_temporal : TClientDataSet;
begin
Result:= nil;
qConsulta_temporal:= nil;
dsProvedir_temporal:= nil;
try
qConsulta_temporal:= TADOQuery.Create(nil);
qConsulta_temporal.ConnectionString:= UDMModuloDatosBD.getConexion.ConnectionString;
qConsulta_temporal.SQL.Text:= pSql;
qConsulta_temporal.Open;
dsProvedir_temporal:= TDataSetProvider.Create(pParent);
dsProvedir_temporal.DataSet:= qConsulta_temporal;
dsProvedir_temporal.Name:= 'DSP_' + pName ;
cds_temporal := TClientDataset.Create(pParent);
cds_temporal.ProviderName:= dsProvedir_temporal.Name;
cds_temporal.Name:= pName;
cds_temporal.PacketRecords:= -1;
cds_temporal.open;
Result:= cds_temporal;
except
end;
end;
procedure liberarClientDataset(pClientDataset : TClientDataSet; pParent : Tcomponent);
begin
TProvider(FindComponent(pClientDataset.ProviderName)).DataSet.Free;
TProvider(FindComponent(pClientDataset.ProviderName)).Free;
end;
En orden de ideas el primer método trabaja a la perfección y su codifcación es la siguiente
procedure TFPedido.FormCreate(Sender: TObject);
begin
self.conjuntoDatos:= getClientDataset('ConjuntoDatos', Self , 'Select * from pedido');
Self.dsPedidos.DataSet:= self.conjuntoDatos;
self.dbgrdPeidos.DataSource:= Self.dsPedidos;
end;
Ahora una vez creando el primer método, escrbi el segundo con el que deseo liberar los componentes de datos pero al construir la app me envia el siguiente mensaje de error el compilador
Build
[Error] UCoreBD.pas(51): Undeclared identifier: 'FindComponent'
[Fatal Error] Pedidos.dpr(14): Could not compile used unit 'Core\UCoreBD.pas'
Agradezco de antemano cualquier comentario y el tiempo dedicado
gertorresm
co