FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Yo tengo el mismo problema: dos equipos(PC1 y PC2) conectados en red local. Cada equipo tiene instalado el mismo programa que atacan a la base de datos Firebird 2.5 que está en el equipo pc1. Pc2 tiene firebird cliente. el puerto 3050 está abierto, Firewall está inactivo(de momento)...
El programa está desarrollado en delphi xe7. Si estoy introduciendo datos en un equipo(pc1) al introducir datos en el otro(pc2) se queda pensando .. y cuando cierro el programa en el primero (pc1) sale un error en el segundo: "deadlock update conflicts with concurrent update....." He seguido por debug donde da el error y me da en Previamente no hay ningún update de ninguna tabla porque es lo primero que hace el programa después de login. Que estoy haciendo mal? Gracias |
#2
|
||||
|
||||
Lee mi contestación anterior.
Haz una búsqueda por "deadlock" en los foros, llegarás a hilos como este, por ejemplo.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código Únete al grupo Teaming clubdelphi | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 25-03-2021 a las 10:35:19. |
#3
|
|||
|
|||
A ver Casimiro , un poco de paciencia con los novatos, jejeje...
Creo que he contestado a casi todas las preguntas que haces: 1.-Ni siquiera has dicho el error, simplemente has dicho que "se queda bloqueado dando error" R.- "deadlock update conflicts with concurrent update....." 2.-¿Es un programa en un ordenador al que se conectan los demás o es un programa en cada ordenador que conecta a un servidor firebird? R.-Cada equipo tiene instalado el mismo programa que atacan a la base de datos Firebird 2.5 que está en el equipo pc1 3.- ¿Qué parámetros usas en el componente de base de datos y en el de transacción? Creo que ni has dicho los componentes que usas? R.- Es cierto, esta no la había contestado. Uso componentes dbexpress. No uso transacciones (al menos donde da el error). los parámetros de conexión : DriverName=FIREBIRDCONNECTION getDriverFunc=getDriverFirebird Database=C:\baseDatos\datos\GESTORIA.FDB RoleName=RoleName User_Name=sysdba Password=masterkey sqldialect=3 LocaleCode=0000 Blobsize=-1 CommitRetain=False waitonlocks=True isolationlevel=ReadCommitted trim char=False HostName=localhost Estos son los parámetros en el equipo PC1 que hace de servidor. En el otro se cambia el Hostname. El programa se queda pensando al hacer ZI.EXECSQL No se que más datos poner, si necesitas algo más, por favor, pídemelo. Y sobretodo GRACIAS por tu tiempo. |
#4
|
|||
|
|||
Creo que se ha solucionado.
He metido el update dentro de una transacción y de momento parece que funciona. Seguiré probando. Gracias Casimiro. |
#5
|
||||
|
||||
¿Usas algún bloque TRY...EXCEPT o TRY...FINALLY? Lo digo porque es posible que salte alguna excepción que, al no ser tratada adecuadamente, deje la conexión "colgada" (por ejemplo, porque no se cierra la conexión). De hecho, al usar transacciones estás creando una especie de "burbuja de seguridad" que hace que, si hay un error, no se ejecute el programa SQL y por eso te deja de dar error ahora. El problema es que, si cuando hay error no se cierra correctamente la transacción (no se hace roll-back) esa transacción se quede ahí hasta que se cierra el programa, con los problemas que puedan derivarse de ello (en el mejor de los casos, desperdicio de memoria).
Por supuesto, hay que usar transacciones siempre que se hace un programa que posibilite a varios usuarios acceder a una misma base de datos. |
#6
|
|||
|
|||
Si, ya lo he metido dentro de un bloque try except.
Y a partir de ese momento ha empezado a funcionar bien. Lo curioso es que el Update se quedaba colgado (sin dar ningún tipo de error en el ordenador donde se estaba ejecutando) y eso impedia el acceso de otros ordenadores y en estos sí que terminaba por salir un error deadlok. Gracias Nuño |
#7
|
|||
|
|||
perdonar he estado un tiempo fuera, dentro del try...except que excepción tendría que poner.
Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Firebird remoto - Modificar registros | Gregorio Cíber | Conexión con bases de datos | 8 | 23-03-2021 22:32:04 |
modificar variios registros con dataset | pmtzg | Conexión con bases de datos | 7 | 11-02-2012 12:05:02 |
Modificar registros desde DBgrid | quakerman | Conexión con bases de datos | 7 | 09-11-2011 03:40:03 |
modificar registros | yossi | SQL | 6 | 11-06-2010 03:43:58 |
modificar registros query | Buelos | Firebird e Interbase | 8 | 02-03-2008 00:52:00 |
|