Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-08-2003
Red_Delphi Red_Delphi is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
Red_Delphi Va por buen camino
Question ClienDataSet

Tengo lo siguiente:
un ClientDataSet maestro y uno de detalle. asociados mediante la propiedad DataSetField del segundo d ellos.
el primer ClientDataSet, tiene un DataSetProvider apuntando a una Query. normal hasta ahora.
mi duda es la siguiente. cuando quiero grabar cualkier cambio sobre el primer ClientDataSet, con un ApplyUpdates basta.
pero y si kiero grabar cambios sobre el segundo ClientDataSet ¿?¿?¿?¿?

de k manera lo hago. mediante una pantalla de entrada de datos, modifico unos datos sobre el segundo ClientDataSet, pero como grabo eso. con un Apply Updates no vale. pork no sta asociado a ningun provider. y un applyupdates del maestro me da error pork le doy valores nulos de sus campos, los cuales no los toco para nada. y eso me hace k no sirva ese apply......

me podriais exar un cable???????

gracias. y un saludo.
Responder Con Cita
  #2  
Antiguo 26-08-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

En realidad lo tienes que hacer por el ApplyUpdates del ClientDataSet maestro.

Al estar relacionados mediante DatasetField, el DataSetProvider del maestro, actualiza tanto el ClientDataSet maestro como el detalle.

Sobre el problema que te ocurre. ¿ Como dejas en blanco el registro en el Dataset maestro ?. Antes de crear registros de detalles, tendrías que crear o posicionarte en un registro válido en el Dataset maestro.

NOTA : Al crear un registro detalle, recuerda de establecer correctamente la conexión entre el registro maestro y el detalle, asignando el valor correspondiente en el campo de relación. (Yo lo hago en el evento AfterInsert).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 26-08-2003 a las 11:48:11.
Responder Con Cita
  #3  
Antiguo 26-08-2003
Red_Delphi Red_Delphi is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
Red_Delphi Va por buen camino
Question

el tema es el siguiente.
es una pantalla maestro detalle. donde la cabecera son campos del maestro y una grid mas abajo los campos de Client..... de detalle.
hay una operacion que es la de modificar. y pone en modo edicion los 2 ClientData..... entonces tan solo modifico unos datos del ClientDatase.... detalle. o sea del Grid. y kiero que esos datos de queden grabados en base d datos.

con lo cual al hacer un applyupdate, falla pork los valores del registro para el ClientData... maestro son los mismos y los encuentra duplicados. creo que el exo de modificar unos datos del detalle y luego hacer applyupdates, crea un nuevo registro ,pero la informacion de maestro es la misma y la encuentra duplicada.
de ahi mi pregunta que de que manera podria solucionar eso, o como arregrarlo d otro modo.

espero haberme explicado mejor.

gracias Marc y un saludo.
Responder Con Cita
  #4  
Antiguo 26-08-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Que raro que intente crear un nuevo registro del maestro.

En todo caso parece que en el Provider trabajas con el UpdateMode a upWhereAll. A mi me gusta trabajar con upWhereKeyOnly.

Si activas este modo, tienes que indicar cuales són los campos de clave primaria (tanto en el maestro como en el detalle). Para ello, tienes que abrir los campos persistentes, y en el campo de clave primaria, activar en la propiedad Flags, el Flag pfInKey.

Espero que trabajando en este modo se solucione el problema. (Utilizo mucho las relaciones maestro-detalles con esta configuración, y no me traen problemas).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 26-08-2003
Red_Delphi Red_Delphi is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
Red_Delphi Va por buen camino
Question

he colocado el upWhereKeyOnly en el Provider. y luego en los campos de los ClienDataSet tanto maestro, como detalle. he entrado en los campos que estan agregados, y a los que son de la clave primaria, le he activado la propiedad de pfInKey=True

y lo que decia. pongo en edición los ClientDataSet, y cambio los datos de detalle. hago un applyupdates y me da error de "imposible insertar un registro duplicado, o algo asi........"
y es por el tema que te decia de que como quiere hacer un insert, supongo, pues los datos de maestro no han sido cambiados. digo yo.....

bueno espero que tarde o temprano, surja una buena solución, jejeje.

muxas gracias y un saludo.
Responder Con Cita
  #6  
Antiguo 26-08-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Pón un objeto SQLMonitor, de esta forma podrás verificar si se envía una sentencia INSERT para el registro de la tabla maestra, o no. Quizá el problema está en otro lado.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 27-08-2003
Red_Delphi Red_Delphi is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
Red_Delphi Va por buen camino
Exclamation

Error: "No se puede insertar una fila de claves duplicadas en el objeto 'QueryDetalle'. con indice unico 'QueryDetalle1'

Este error es el que da cuando hago applyupdates del ClientDataSet maestro. y mirando por el 'sqlmonitor', lo que veo que quiere hacer, es una update de la tabla de detalle. para los valores que han cambiado.

el apartado de modificar que hago. pone el ClientDataSet detalle en modo Edit, y luego cambio unos valores y hago un Post de ese ClientDataSet.

Luego al grabar cambios hago el applyupdates para el maestro. y pasa lo que pasa

espero que poco a poco se acerque alguna solución para este lio que tengo montado.

un saludo y gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:45:08.


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
Copyright 1996-2007 Club Delphi