PDA

Ver la Versión Completa : Actualizar Datos en DBGrid desde TClientDaset


GerTorresM
13-08-2015, 23:58:07
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


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í


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.



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