Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-08-2008
Avatar de morta71
morta71 morta71 is offline
Miembro
 
Registrado: may 2006
Ubicación: Girona - España
Posts: 30
Poder: 0
morta71 Va por buen camino
problema actualización registros relacionados

Hola, desde hace tiempo estoy intentando realizar una aplicación de facturación, ya solventé varios problemillas que me fueron surgiendo pero ahora estoy algo estancado en lo siguiente:

tengo dos tablas relacionadas, pedidos y albaranes:

PEDIDOS (ID, FECHA, IDCLIENTE)
ALBARANES(ID, IDPEDIDO, FECHA)
relacion ALBARANES.IDPEDIDO = PEDIDOS.ID

El problema es que un pedido se puede servir en varios albaranes, según va llegando el material solicitado.

En el mantenimiento de documentos maestro-detalle como albaranes, hasta ahora lo que hice era sencillo, volcar sobre un StringGrid la información de las líneas de albarán, editarlas y al pulsar "Aceptar", realizo el borrado de todas las líneas de la albarán y grabar el contenido del StringGrid en la tabla.

Esto no me sirve con la tabla pedidos, ya que si he servido algún albarán aparecerá un error de integridad.

Hace días que estoy dandole vueltas al asunto y no acabo de ver una solución sencilla que me permita mantener una transacción abierta el mínimo de tiempo posible.

Alguien con más experiencia podría orientarme un poquito.

Gracias
Responder Con Cita
  #2  
Antiguo 28-08-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Corrigeme si me equivoco, pero, ¿estas diciendo que para actualizar tus tablas primero borras los registros y despues insertas los datos correctos?, creo que esto esta muy mal y ya estas viendo las consecuencias.
Yo te sugiero que utilices Update al menos en la tabla de pedidos para que no te de ese error cuando modifiques la info, otro consejo es que utlices los controles para datos (DBGrid, DBEdit, etc...) y dataset's para actualizar tus tablas.

Saludos!!!
Responder Con Cita
  #3  
Antiguo 29-08-2008
Avatar de morta71
morta71 morta71 is offline
Miembro
 
Registrado: may 2006
Ubicación: Girona - España
Posts: 30
Poder: 0
morta71 Va por buen camino
Gracias por tu respuesta boreg.

En una tabla "normal", como la de clientes, utilizo el Update tal y como me sugieres.

Sinembargo, en más de un sitio leí que las transacciones deben quedar abiertas el mínimo tiempo posible, por tanto, quizás equivocadamente, cree el programa donde edito el Albarán (cabecera y líneas de albarán) sin conexión a la BD, y al pulsar en "Grabar" vuelco toda la información en la BD, en la cabecera realizo un Update y con las líneas las borro y las inserto de nuevo, un solo COMMIT para grabar cabecera y líneas en una transacción (es el concepto que creí interpretar en algún texto sobre transacciones).

Posiblemente no sea el método adecuado. De la manera que me dices, entiendo que debería realizar un COMMIT con cada Update para no matener la transacción abierta mientras se editan otras líneas. Sería éste el método correcto que me sugieres boreg??
Responder Con Cita
  #4  
Antiguo 29-08-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Pues te diré que no soy en experto en el tema de las transacciones, pero creo que no es necesario que tengas abierta una transaccion para hacer update en una tabla (mientras no uses dataset's),

Cita:
...De la manera que me dices, entiendo que debería realizar un COMMIT con cada Update para no matener la transacción abierta mientras se editan otras líneas...
creo que en este caso estás hablando de los albaranes (detalle), quizás no sea necesario que hagas un update por cada linea, ya que podrías hacerlo al finalizar la edicion de todas las lineas y, como tú comentabas al principio, solo harás un commit, por supuesto tambien alctualizando la cabecera(¿tabla de pedidos?).

Espero haberme explicado bien, de lo contrario con gusto aclararé tus dudas, claro que si alguien mas puede dar su punto de vista sería excelente.

Saludos
Responder Con Cita
  #5  
Antiguo 30-08-2008
Avatar de morta71
morta71 morta71 is offline
Miembro
 
Registrado: may 2006
Ubicación: Girona - España
Posts: 30
Poder: 0
morta71 Va por buen camino
Cita:
Pues te diré que no soy en experto en el tema de las transacciones, pero creo que no es necesario que tengas abierta una transaccion para hacer update en una tabla (mientras no uses dataset's),
Por este motivo no utilizo el DBGrid, ya que debe ir asociado a un dataset que me abrirá una transacción en el momento en que se ejecute un "Edit" en el dataset.

Cita:
creo que en este caso estás hablando de los albaranes (detalle), quizás no sea necesario que hagas un update por cada linea, ya que podrías hacerlo al finalizar la edicion de todas las lineas y, como tú comentabas al principio, solo harás un commit, por supuesto tambien alctualizando la cabecera(¿tabla de pedidos?).
Exactamente me refiero a eso, por ello guardo el detalle en un StringGrid (de momento hasta ahora era la mejor opción que encontré), el problema es que en el Grid puede haber inserciones, ediciones y borrado de líneas, por lo que si no borro y creo las líneas de nuevo, de alguna manera debería guardar una especie de histórico de movimientos para poder reflejarlos adecuadamente en la BD y es ahí donde estoy atascado.

Posiblemente mi método es el de complicarme la vida in extremis, fué la solución para una tabla maestro-detalle sin dependencias, al incluir dependencias el tema se me ha complicado, por lo que deduzco que el planteamiento está mal pero, aparte de utilizar DBGrid + DataSet, no se me ocurren otras soluciones, y por ello la petición de ayuda.

Gracias por tu aporte.
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
Mejorar busqueda de registros y actualizacion JuanchoArg Conexión con bases de datos 2 10-05-2006 03:06:48
Borrar Registros relacionados senpiterno Conexión con bases de datos 3 04-11-2004 10:31:33
Actualizacion de Registros Nelson Alberto Conexión con bases de datos 0 07-10-2004 19:11:15
Actualizacion automatica de registros Eklypsex Firebird e Interbase 2 19-05-2004 13:05:49
Falla Actualizacion de Registros vic_ia Conexión con bases de datos 0 14-01-2004 02:44:52


La franja horaria es GMT +2. Ahora son las 08:24: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
Copyright 1996-2007 Club Delphi