Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Actualizar Base de Datos desde TClientDataSet conectado a TSQLQuery (https://www.clubdelphi.com/foros/showthread.php?t=95115)

giulichajari 11-03-2021 02:08:06

Actualizar Base de Datos desde TClientDataSet conectado a TSQLQuery
 
Hola yo de vuelta.

Tengo un TclientDataSet que, mediante un Provider esta conectado a un TSQLQuery(es decir no un TSQLTable).

El mismo lo utilizo a traves de un DataSource obviamente para mostrar el detalle de un pedido. entonces hice lo siguiente:


Código Delphi [-]
procedure TPEDIDO.gpedidotempColExit(Sender: TObject);
 begin
  DataModule1.cdsdetpedido.Edit;
  if (gpedidotemp.Fields[gpedidotemp.SelectedIndex]=
  gpedidotemp.DataSource.DataSet.FieldByName('Acuenta')) then

  begin

   DataModule1.quact.Close;
   DataModule1.quact.ParamByName('acta').AsFloat := gpedidotemp.SelectedField.AsFloat ;
   DataModule1.quact.ParamByName('idp').AsInteger:=
   gpedidotemp.DataSource.DataSet.FieldByName('idproducto').AsInteger;

   DataModule1.quact.ExecSQL();

  end;
 end;

Al salir de una columna intento guardar el dinero a cuenta por ejemplo.

Tambien intente

Código Delphi [-]
procedure TDataModule1.cdsdetpedidoAcuentaChange(Sender: TField);
begin
DataModule1.cdsdetpedido.Edit;
DataModule1.cdsdetpedido.Post;
DataModule1.cdsdetpedido.ApplyUpdates(0);
end;

Pero no se vuelcan los cambios en la bd. Probe usar TDBNavigator y le doy click en editar escribo y luego click en el tilde pero los cambios no se guardan.

Puede ser que al provenir los datos de un TSQLQuery no realize los cambios? Si es asi que debo hacer un query para cada operacion?

kuan-yiu 11-03-2021 08:14:15

Yo ese proceso siempre lo hago dentro de una transacción. Cuanto se empieza a editar inicio la transacción y tras 'ApplyUpdates' si no hay errores la finalizo con 'commit'.
Utilizo todos los eventos del 'TClientDataSet' que o bien se enlazan automáticamente con los eventos del 'TdbNavigator' o los lanzo según necesite.

Neftali [Germán.Estévez] 11-03-2021 09:03:04

Cita:

Empezado por giulichajari (Mensaje 540318)
Pero no se vuelcan los cambios en la bd. Probe usar TDBNavigator y le doy click en editar escribo y luego click en el tilde pero los cambios no se guardan.


Habría que saber si se produce algún error que se esté enmascarando.
¿Has ejecutado debuggando desde el IDE?
¿La consulta es actualizable?
¿Qué numero te devuelve al ApplyUpdates (integer)?

giulichajari 12-03-2021 01:11:11

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 540321)
Habría que saber si se produce algún error que se esté enmascarando.
¿Has ejecutado debuggando desde el IDE?
¿La consulta es actualizable?
¿Qué numero te devuelve al ApplyUpdates (integer)?

Finalmente encontre el error y era que no tenia un campo id autoincremental y unico en la tabla detallepedido. Ahora el DBNavigator funciona perfecto aunque mi codigo tambien.

Lo unico que al hacer click en el mas (+) del DBNavigator para agregar un detalle al pedido me dice "Field iddetpedido must have a value", este es campo id autoincremental que coloque!

Gracias a ambos por las respuestas


La franja horaria es GMT +2. Ahora son las 16:52:10.

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