Ver Mensaje Individual
  #1  
Antiguo 13-08-2015
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Reputación: 19
GerTorresM Va por buen camino
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
Responder Con Cita