FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
Access en red
Hola a todos, necesito una ayuda con el siguiente tema:
Tengo que adaptar un sistema desarrollado en Delphi6 con una base de datos en Access para que funcione en red. Pueden llegar a ser hasta 6 usuarios que se conecten a la vez y no más de tres que realicen el mismo proceso a la vez. Utilizo ADOConnection, ADOTable, etc... He adaptado el código iniciando transacciones al momento de grabar los datos en las tablas pero algo no está bien... lo he probado con dos usuarios, el proceso de uno lo termina bien y en el otro da un error. Agrego el código desarrollado para una tarea de ingresos de artículos a una tabla INGRESOS, actualizar una tabla STOCK y agregar los datos en otra tabla MOVIM... Desde ya, muchas gracias !!!
Última edición por Neftali [Germán.Estévez] fecha: 27-02-2017 a las 08:46:19. Razón: Añadir TAG's |
#2
|
||||
|
||||
Me pierdo entre tanto código sin las etiquetas
Más allá del problema, hay varias cosas para mejorar en tú código. Hay muchas cosas que lo hacen muy difícil de leer, por ejemplo el como haces las comparaciones booleanas.
Luego otro punto importantísimo es el manejo de excepciones. Veo bloques try-except en los que ocultas las excepciones; esto ocurre porque dejas el bloque except vacío. Créeme, es una muy mala idea. Podría estar ocurriendo algo malo y como lo ocultas, ni siquiera vos te puedes enterar del error. Te recomiendo que elimines estos bloques try-except en el cual no controlas las excepciones. Además como bonus le quitas nivel de sangría y complejidad al código, habiéndolo más fácil de entender También veo que utilizas un condicional para verificar si los DataSet (tablas, query) están activos, y si no lo están, abrirlos. No es necesario preguntar. Con poner Active a True, el componente solo ya se encarga de verificarlo. También podes usar el método Open, es equivalente a poner Active a True Todos estos consejos sean para mejorar el código, que está muy extenso y hace muchas cosas, y como ya dije, es complejo Falta más información sobre el problema. Cuando hay un error, debes colocar en tú post en que línea (si es una excepción) y el mensaje. Si el error es de programación (datos inconsistentes, no hace lo que quiero, etc) deberías decirnos que sucede. A simple vista pareciera que estas iterando, grabando los datos, pero el Post sobre las tablas lo haces una vez. Debes hacer una combinación de insert (o append) y post por cada registro que querés guardar. Para edit es igual |
#3
|
|||
|
|||
Gracias Agustín por tu respuesta y tus observaciones, las voy a tener en cuenta !!!
El tema del error es así, cuando graba el primero (de los dos usuarios con los que probé) sale todo bien, termina el proceso y cierra el formulario como se esperaba, pero cuando graba el otro, hace el ADOConection1.CommitTrans, dice que terminó el proceso, pero luego aparece el error: "Ha intentado confirmar o deshacer una transacción sin iniciar una antes"... |
#4
|
|||
|
|||
Cita:
Última edición por Neftali [Germán.Estévez] fecha: 27-02-2017 a las 08:47:21. Razón: Añadir TAG's |
#5
|
||||
|
||||
Para colocar TAG's al código revisa este enlace.
Te recomiendo también que revises la Guía de estilo de los foros, ya que eres nuevo por aquí. Un saludo.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
Cita:
|
#7
|
||||
|
||||
Cita:
Para eso deberías "debuggar" el código e ir ejecutándolo línea a línea. Tal vez en algún otro evento que se lanza desde aquí, o en algún otro sitio se esté cerrando esa transacción.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 27-02-2017 a las 11:05:54. |
#8
|
||||
|
||||
No estoy de acuerdo con lo de preguntar por la transacción. De hacerlo habría que hacerlo antes porque ya modifico los datos de la BD fuera de una transacción y perdes la seguridad que te garantiza y la posibilidad de hacer rollback. Más bien lo justo sería abortar todo si falla el BeginTransaction
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Error Interbase Access violation The code attempted to access a virtual | ryderMX | Firebird e Interbase | 3 | 21-11-2015 11:11:46 |
Ado y Access | jocey | Conexión con bases de datos | 2 | 25-02-2008 17:58:25 |
access con la pda | joel20 | Conexión con bases de datos | 0 | 08-01-2007 13:30:30 |
ado + access | gustavoh | Conexión con bases de datos | 3 | 03-10-2005 05:30:49 |
Access!! | PTW | Conexión con bases de datos | 5 | 15-04-2004 02:00:10 |
|