Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   FindComponent en Unidades .pas (https://www.clubdelphi.com/foros/showthread.php?t=88830)

GerTorresM 08-08-2015 03:13:55

FindComponent en Unidades .pas
 
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

Código Delphi [-]
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

Código Delphi [-]
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

GerTorresM 08-08-2015 03:29:59

FindComponent en unidad.pas - Finalizado
 
Bien leyendo un poco pude encontrar que antes de utilizar FindComponent, debe indicar sobre que Form se ha de efectuar la busqueda, el código corregido es el siguiente

Código Delphi [-]

procedure liberarClientDataset(pClientDataset : TClientDataSet; pParent : Tcomponent);
begin
  TProvider(pParent.FindComponent(pClientDataset.ProviderName)).DataSet.Free;
  TProvider(pParent.FindComponent(pClientDataset.ProviderName)).Free;
  pClientDataset.Free;
end;


Listo para el que lo requiera


La franja horaria es GMT +2. Ahora son las 07:45:32.

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