Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-09-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Campos que se pierden después de un Applyupdates

Resulta que tengo un Clientdataset enlazado a con sus componentes de datos y todo. Hago un append al clientdataset y muestro una ventana para capturar los datos, posteriormente con un botón hago el post de los mismos.

En el evento AfterPost del CDS aplico de inmediato el cambio a la base de datos mediante Applyupdates y luego refresco el CDS.

El problema:
El registro si es grabado fisicamente a la base de datos como debe ser pero en la forma todos los campos se borran tan pronto hago el applyupdates de manera que si por ejemplo inmediatamente después de la instrucción applyupdates quiero acceder a un campo del CDS, el campo me aparece vacío. El CDS no lo cierro sino hasta varias líneas después.

No sé si esté haciendo algo mal o me haya faltado alguna propiedad pero ya revise todo y aparentemente está correcto.

A ver si a alguien le ha pasado o si alguien sabe por que sucede esto.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #2  
Antiguo 04-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola AzidRain, yo trabajo con dbExpress y los ClientDataSet, cuando hago ApplyUpdates sobre el ClientDataSet no me ha dado problemas, lo que si he notado es cuando colocas la propiedad LogChanges a False es como si no obedeciera a ApplyUpdates y no hace nada, no ves cambios en tu BD. Esta propiedad solo lo he utilizado cuando me creo tablas en memoria para que no me grabe todos los cambios que hago sobre cada registro así siempre tengo un solo registro con los ultimos cambios, nose podrías probar de colocar esa propidad a True.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 04-09-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Aqui lo raro es que los datos si se van a la base de datos y se guardan, pero como que el clientdataset pierde sincronía o algo porque limpia todos los campos y ya no muestra los del registro que se acaba de insertar y que de hecho se convierte en el actual. Cabe mencionar que hago el refresh correspondiente justo después de aplicar los cambios.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 04-09-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 18
felipe88 Va por buen camino
Cita:
Empezado por AzidRain Ver Mensaje
Cabe mencionar que hago el refresh correspondiente justo después de aplicar los cambios.
Hola Azid, mira que este mismo problema se presenta en un programa que usamos aca en mi oficina (Desarrollado por personas ajenas a la empresa), de un momento a otro este no queria dejar guardar registros, entonces los desarrolladores decidieron añadir unas lineas y un query para solucionar este probrema seguido de un refresh como tu dices... efectivamente hemos tenido que tolerar este molesto efecto visual, si damos click en actualizar los datos nos sale un error "no puede actualizar sin guardar bla, bla, bla..." o si hago click por fuera parece como si los borrara... en fin, desde mi punto de vista y sin ser muy técnico le atribullo al refresh este problema, eso si; no estoy diciendo que sea la unica opción, como he dicho el desarrollo es de otras personas y hasta ahora no han hecho nada al respecto ... espero encuentren la solución, cualquier cosa la comentaré al respecto
__________________
Web
Responder Con Cita
  #5  
Antiguo 04-09-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Necio que soy, lo de menos sería cerrar el formulario y tan-tan, si quieren editarlo nuevamente que lo abran con la opción adecuada y punto. El chiste es que los datos que muestra el formulario corresponden a lo que vendria siendo la tabla maestra y a su vez muestra datos de al menos 3 tablas hijas. Esta tabla maestra tiene un campo autoincrementado que la identifica y como es obvio es necesario saber el número que le asignó la BD para a su vez colocarlo en la clave foránea de las tablas hijas. Inicialmente habia pensado en aplicar los cambios con applyupdates y luego acceder al valor de la clave mediante fielbyname de la cdspadre pero ahi fue donde me di cuenta que siempre vaciaba los datos de todo el registro. Lo que hice fue ir directamente a la BD y pedirle el último autoinc y proceder de ahí. Lo que que me ha seguido molestando es el por qué se borran todos los campos justo despues del applyupdates.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 05-09-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Usas MySQL? Igual no tiene nada que ver, pero tengo idea de haber visto algo relacionado al respecto con los autoinc. Voy a aventurar algo, a ver si no es descabellado:

Cuando haces el Refresh, el CDS debe solicitar nuevamente los datos al servidor (o al provider), pero posiblemente no tenga aún el valor autoinc generado por el servidor; luego entonces, no sabe qué registro pedir.

// Saludos
Responder Con Cita
  #7  
Antiguo 05-09-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Si Roman, uso MySQL...
Cita:
Cuando haces el Refresh, el CDS debe solicitar nuevamente los datos al servidor (o al provider), pero posiblemente no tenga aún el valor autoinc generado por el servidor; luego entonces, no sabe qué registro pedir.
Me parece que por ahí podría ser la cuestión, suena lógico, lo voy a probar con otras formas similares que tengo en mi aplicación que igual usan autoincs par a ver que pasa.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 05-09-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No he podido reproducir el comportamiento que describes ni con ZEOS ni con MyDAC, ¿qué componentes usas?

// Saludos
Responder Con Cita
  #9  
Antiguo 05-09-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Uso Zeos....
Ya descubrí que pasa.

Efectivamente es lo que decías Roman. El componente de acceso a datos, un Zquery tiene este SQL:
Código SQL [-]
 select * from tabla where campoindice=:campoindice

El parametro :campoindice lo utilizo para acceder algun registro en particular.
Ahora bien cuando deseo insertar uno nuevo ejecuto el query con el parametro en nulo (no devuelve nada obviamente) y hago un Append en el ClientDataset. Lleno todos los campos (excepto el valor clave que es un autoinc) y hago el post + applyupdates. Y aqui todo va bien como ya platiqué, se graba y todo muy bien. Pero...como tu decías y decías bien, para el ClientDataset el sigue teniendo un valor nulo en el parametro por lo que al darle refresh vuelvo a tener el query como al principio de la edición: vacío.

SOLUCION:
Después de hacer applyupdates, obtener el autoinc de MySQL y ahora sí colocarlo en el parámetro que estaba en nulo al principio y hacer el refresh. Voilá...funciona perfecto.

Gracias Román.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Sumar campos despues de Filtrado Sr.Scorpion Conexión con bases de datos 7 23-03-2007 12:31:57
key violatin después de un ApplyUpdates(0) jmlifi Varios 8 06-04-2006 14:54:36
obtener valor de un campo despues de un insert + applyupdates(0) wonder boy Conexión con bases de datos 1 10-06-2004 23:05:39
¿Por qué CommitRetaining funciona después de agregar, pero no después de modificar? Al González Firebird e Interbase 7 16-02-2004 23:47:28
campos de un grid despues de un query davidgaldo Conexión con bases de datos 1 13-11-2003 14:46:49


La franja horaria es GMT +2. Ahora son las 17:03:55.


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