Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Campos se vacían en ClientDataSet (https://www.clubdelphi.com/foros/showthread.php?t=91586)

novato_erick 09-03-2017 21:04:44

Campos se vacían en ClientDataSet
 
Hola Chicos como han estado? Rato de no pasar por el Foro... Ya han pasado 6 años y cada vez aprendo algo nuevo y paso siempre investigando gracias porque existe este foro que siempre me ah colaborado.

Ahora necesito que me saquen de una duda:

utilizo en el 100% de mis sistema basado en Base de Datos el Término Entidad Relacion SQL anteriormente simplemente utilizaba transacciones haciendo commit o rollback con el componente TSQLQuery con los componente DBExpress y simple mandaba a cada tabla la información que se deseaba guardar.

ahora estoy con los ClienteDataSet (Algo Anticuado) ya que ahora la ultima version de delphi Trae otros componentes bueno ese es otro tema largo y aun en estudio y practica por mi parte.


Volviendo al Tema: utilizo maestro detalle utilizando ClientDAtaSet

ejemplo:

Código SQL [-]
TCOMPRAS
-------------
ID_COMPRAS
NUMCOMPRA
FACT_PROV
ID_PROVEEDOR
SUBTOTAL
IVA
TOTAL


TDETALLE_COMPRA
----------------------
ID_COMPRAS    /*FK*/
ID_ARTICULO
CANTIDAD
P_COMPRA
IVA_ART
TOTAL

El asunto es que a la hora de mostrar en mi dbgrid por ejemplo el campoCODIGO Y DESCRIPCION lo agregue en el clientdataset detalle como un campo mas no es algo que esta en la db haciendo que cada vez que hago un Insert me borra los campos de CODIGO Y DESCRIPCION mas no los que estan en la db. Esto lo hice para mostrar al usuario un poco mas de detalle que no seran necesarios guardarlo en la tabla detalles.

en Fin aqui esta el ejemplo a nivel de codigo:

Código Delphi [-]
procedure TfrmCompras.btnAgregaClick(Sender: TObject);
begin
  if DBEditNumFactura.Text = '0' then
  begin
    ShowMessage('Favor Ingresar el Numero de Factura de Compra');
    DBEditNumFactura.SetFocus;
    Exit;
  end
  else
  begin
  //  dmConexion.cdsComprasDetalle.First;
    dmConexion.cdsComprasDetalle.Insert;
    dmConexion.cdsComprasDetalleID_ARTICULO.AsInteger := idartcompra;
    dmConexion.cdsComprasDetalleCANTIDAD.AsFloat := CantArtCompra;
    dmConexion.cdsComprasDetallePUNITARIO.AsFloat := PCompra;
    dmConexion.cdsComprasDetalleIMPUESTO.AsFloat := ImpuestoCal;
    dmConexion.cdsComprasDetalleIMPUESTOPUNIDAD.AsFloat := puniconiva;
    MontoImpuestoUnitario := puniconiva * CantArtCompra;
    dmConexion.cdsComprasDetalleMONTOIMPUESTO.AsFloat := MontoImpuestoUnitario;
    dmConexion.cdsComprasDetalleTOTAL.AsFloat := totalcompralinea;
    dmConexion.cdsComprasDetalleCOD_BARRA.AsString := edtCodBarra.Text;
    dmConexion.cdsComprasDetalleDESCRIBE.AsString := edtDetalleArt.Text;
    NewCantidadArt := CantArtCompra + CantOldArt;
    dmConexion.cdsComprasDetalleNUEVACANTART.AsFloat :=
      roundto(NewCantidadArt, 2);
    ///

    ///
end;

Espero una mejor idea para hacer esto....


Saludos Cordiales:


novato_erick

Al González 09-03-2017 22:25:04

Yo empezaría añadiendo comas y acentos a la descripción del problema. Así se entendería bastante bien lo que planteas. :)

novato_erick 09-03-2017 23:52:11

1 Archivos Adjunto(s)
Hola AlGonzalez:
Archivo Adjunto 3500
Adjunto Imagen del Comportamiento

Agregué dos Campos llamado CÓDIGO Y DESCRIPCIÓN en un clientDataSet denominado cdsComprasDetalle en la que estos dos campos no están en la tabla DETALLE_COMPRAS.

Al hacer un segundo insert en el hilo anterior simplemente me borra los datos que los campos CÓDIGO Y DESCRIPCIÓN más no en los detalles como CANTIDAD, TOTAL, IMPUESTO, ETC.

Nota: Una imagen dice más que mil palabras...

Saludos

movorack 10-03-2017 13:51:55

Usa campos calculados

novato_erick 24-04-2017 22:51:24

Hola Chicos:

Cita:

movorack:
Usa campos calculados
Disculpa mi ignorancia pero los campos calculados requiere que al iniciar o activar el dataSet me causa un error ya que el mismo es para calcular valores no?

Provee con Campos Aggregate sin embargo al llamarlo al DBGrid no me los muestra incluso si activo los campos y en el ClientDataSet.

Saludos

novato_erick

jhonny 24-04-2017 22:55:40

Cita:

Empezado por novato_erick (Mensaje 515906)
Hola Chicos:



Disculpa mi ignorancia pero los campos calculados requiere que al iniciar o activar el dataSet me causa un error ya que el mismo es para calcular valores no?

Provee con Campos Aggregate sin embargo al llamarlo al DBGrid no me los muestra incluso si activo los campos y en el ClientDataSet.

Saludos

novato_erick


Creo que en ese caso debes cerciorarte de declarar tus campos calculados como InternalCalc.

novato_erick 24-04-2017 23:04:12

Cita:

jhonny
Creo que en ese caso debes cerciorarte de declarar tus campos calculados como InternalCalc.
Ok pruebo y les confirmo como me va.

novato_erick 24-04-2017 23:27:41

Hola Jhonny:

Cita:

jhonny
Creo que en ese caso debes cerciorarte de declarar tus campos calculados como InternalCalc.
Fue la solución a mi dolor de cabeza. en Agregar otro Campo utilcé InternalCalc colocando el tipo de Datos correspondiente a los campos de Tipo String a DESCRIB, NEWCANT Float y COD_BARRA String.

Doy por solucionado mi problema "Campos se Vacían en ClientDataSet".

Saludos a Todos;

jhonny 24-04-2017 23:32:54

Cita:

Empezado por novato_erick (Mensaje 515911)
Hola Jhonny:



Fue la solución a mi dolor de cabeza. en Agregar otro Campo utilcé InternalCalc colocando el tipo de Datos correspondiente a los campos de Tipo String a DESCRIB, NEWCANT Float y COD_BARRA String.

Doy por solucionado mi problema "Campos se Vacían en ClientDataSet".

Saludos a Todos;

¡Estupendo! ^\||/ :)

movorack 24-04-2017 23:47:06

Gracias jhonny

novato_erick, tanto el Calulated como el InternalCalc te permitian lograr lo que querias que era calcular el valor por registro.
La diferencia está en que el Calculated recalcula su valor cada vez que lo despliega, en cambio el InternalCalc lo almacena, de tal manera que hasta puedes hacer ordenamientos por los valores almacenados en este tipo de campo.

novato_erick 25-04-2017 03:30:02

Cita:

Empezado por movorack (Mensaje 515913)
Gracias jhonny

novato_erick, tanto el Calulated como el InternalCalc te permitian lograr lo que querias que era calcular el valor por registro.
La diferencia está en que el Calculated recalcula su valor cada vez que lo despliega, en cambio el InternalCalc lo almacena, de tal manera que hasta puedes hacer ordenamientos por los valores almacenados en este tipo de campo.

Hola:

movorack Asi es no me quede con la espina de saber la diferencia por la que hice un aprueba de Calculated ya que me mandaba error al compilar en la que al activar mi clientdataset no habia en el campo valor alguno para calcular...

Agradezco chicos enormemente su colaboración como siempre... Cualquier rato si pasan a Panamá son bienvenidos a mi tierra precisamente un lugar llamado Chiriquí donde hay de todo un poco..


Saludos Grandes Chicos del Club Delphi


La franja horaria es GMT +2. Ahora son las 15:55:51.

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