Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Providers (https://www.clubdelphi.com/foros/forumdisplay.php?f=10)
-   -   Actualizar Datos en DBGrid desde TClientDaset (https://www.clubdelphi.com/foros/showthread.php?t=88853)

GerTorresM 13-08-2015 23:58:07

Actualizar Datos en DBGrid desde TClientDaset
 
Hola a tod@s

La situación que se me presenta en la tarde de hoy es la siguiente

Los Componentes utilizados son los siguientes:

- TADOQuery
- TProvider
- TClientDataset

y la funcion con la que los trabajo es la siguiente

Código Delphi [-]
function crearClientDataset(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:= DMBDSistema.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 ;
    dsProvedir_temporal.ResolveToDataSet:= False;
    dsProvedir_temporal.UpdateMode:=  upWhereKeyOnly;

    cds_temporal := TClientDataset.Create(pParent);
    cds_temporal.ProviderName:= dsProvedir_temporal.Name;
    cds_temporal.Name:= pName;
    cds_temporal.PacketRecords:= -1;
    Result:= cds_temporal;
  except
  end;
end;


En orden de ideas pretendo mostrar en un DBGrid que se alimenta desde un TCLientDataset, con un Provider, que se asocia con el TAdoQuery los datos propios de la consulta, asocio las propiedades básicas de los componentes y cuando se ejecuta muestra efectivamente los datos en la grilla.

en el formulario queda así

Código Delphi [-]
  self.cds_Usuario:= crearClientDataset('cds_Usuario', Self, 'Select * from ' + const_Tabla_usuario);
  self.cds_Usuario.Close;
  Self.cds_Usuario.OnCalcFields:= CalcularCampo;
  Self.cds_Usuario.Open;
  self.dsUsuario:= TDataSource.Create(self);
  Self.dsUsuario.DataSet:= Self.cds_Usuario;
  Self.dbgrdDBGDatos.DataSource:= Self.dsUsuario;

El fomulario es utilizado para que sirva de base para trabajar con otros formularios que a su vez ejecutan algun tipo de procedimiento tal como la inserción de registros, para esto utilizo una serie de instrucciones SQL que manejo como funciones ej.

Código Delphi [-]

function AdicionarRegistro(NombreTabla, ListaCampo, ValorCampo: string; pCondicional : String = '') : Boolean;
var qConsulta_temporal: TADOQuery;
    condicional_local : string;
begin
  Result:= False;
  if pCondicional <> '' then
    condicional_local :=  ' where ' + pCondicional;

  qConsulta_temporal:= TADOQuery.Create(nil);
  qConsulta_temporal.ConnectionString:= DMBDSistema.getConexion.ConnectionString;
  qConsulta_temporal.sql.text:= ' Insert Into ' + NombreTabla + ' (' + ListaCampo + ')' +
    ' Values (' + ValorCampo + ')' + condicional_local;
  try
    qConsulta_temporal.ExecSQL;
    Result:= True
  finally
    TADOConnection(qConsulta_temporal).Connected:= False;
    qConsulta_temporal.Free;
  end;
end;

Bien en orden de ideas cuando cierro la ventana con la que ingrese la información y ejecuto el ApplyUpdate del TclientDataset, no veo ningún tipo de actualización, es decir no aparecen los nuevos registros ni tampoco los borrados


Que hacer, Agradezco de antemano su tiempo



gertorresm
Colombia


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

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