Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problemas con Servicios de Firebird (https://www.clubdelphi.com/foros/showthread.php?t=68545)

auribe 20-06-2010 08:02:01

Problemas con Servicios de Firebird
 
Hola a todos. Tengo un sistema de facturacion instalado en una maquina servidor y varias terminales acceden a la base de datos, el problemas es que en muchas ocasiones tengo que reiniciar el servicio de firebird server ya que la tabla de Detalle de factura se loockea y no permite que se inserte ningun record, obligandome a reiniciar el servicio y por supuesto deconectar los usuarios.

La aplicacion esta desarrollada en delphi 5, uso firebird 2.0 y corre bajo windows 2000 server.

Agradezco cualquier ayuda que puedan brindarme en este sentido..:)

Casimiro Noteví 20-06-2010 17:15:24

Con la poca información que das es difícil dar una opinión, pero parece un problema de mal uso de las transacciones por parte del programa.
Se supone que deben salir mensajes de error, ¿cuáles son?

auribe 02-07-2010 08:59:01

El mensaje de error es : lock conflict on no wait transaction. Tal parece que el error se produce cuando hay varias transacciones sumultaneas. En realidad no se como resolver este problema.

Muchas gracias por vuestra atención.

Casimiro Noteví 02-07-2010 10:42:07

Mira esto, ¿está tu componente ibtransaction cone sos parámetros?, pues entonces es mejor que lo pongas así:


auribe 04-07-2010 18:24:49

Gracias por tu respuesta, pero lo que me sugieres es configurar el objeto ibdatabase lo que ocurre es que no estoy utilizando los componentes de interbase para conectarme a la base de datos, sino el BDE de delphi. Ahora bien si la solucion consiste en cambiar los componentes y olvidarme de BDE, pues lo cambio. Ahora quiero estar seguro que esa es la solucion, ya que cambiarlo realmente requiere un esfuerzo extra, que dices?

Caral 04-07-2010 19:24:16

Hola
BDE es ODBC, osea, no sera una conexion directa.
El problema que tienes esta en que la transaccion no se termino de ejecutar.
Ademas de lo mencionado por Casimiro (en el Ibtransaction) si no haces un CommitRetained no se termina de hacer la transaccion y seguira el error.
Saludos
PD: Maestro: Algo he aprendido jejeje.

Casimiro Noteví 04-07-2010 19:34:27

Evidentemente el BDE es un poquito obsoleto, yo llegué a conocerlo en 1998 y ya lo deseché y usé los componentes FreeIB

Lepe 04-07-2010 23:42:43

El error dice que hay un conflicto de bloqueos de registros en una transacción que no lleva el parámetro "no wait", dicho de otra forma, ahora mismo una transacción se queda esperando a que otra termine, y puesto que no termina, obtienes ese error (ahí está el problema de verdad, saber por qué no termina la primera transacción).

Ahora bien, si pones el parámetro "no wait" lo que vas a obtener es una excepción con algo más de información, posiblemente te ayude a solventar el problema o a mejorar el diseño, pero no creo obtengas una respuesta directa (ojalá me equivoque).

Si una transacción lleva el parámetro "no wait" y surge cualquier problema al modificar un registro, no se quedará esperando como lo hace ahora, sino que devuelve un error (una excepción) al programa inmediatamente.

Siento no poder ayudar más, pero es que tampoco he usado BDE con Firebird.

Casimiro Noteví 04-07-2010 23:57:41

La verdad es que yo tampoco recuerdo cómo actua el BDE en estos casos. Pero si puedes cambiarlo por algo más moderno, cámbialo.

auribe 20-07-2010 18:12:16

Estos componentes FreeIB a lo que haces referencia Casimiro son los mismos que trae delphi 5 en la pestana de Interbase o no?.

auribe 20-07-2010 18:23:36

Cita:

Empezado por Caral (Mensaje 369133)
Hola
BDE es ODBC, osea, no sera una conexion directa.
El problema que tienes esta en que la transaccion no se termino de ejecutar.
Ademas de lo mencionado por Casimiro (en el Ibtransaction) si no haces un CommitRetained no se termina de hacer la transaccion y seguira el error.
Saludos
PD: Maestro: Algo he aprendido jejeje.

Lo que apuntas es exactamente lo que esta ocurriendo. Ahora me gustaria saber si los componentes que tu estas utilizando son los componentes que vienen en la pestana de interbase o existen otros componentes que te permitan conectar a una base de datos de interbase directamente y que me ahorre estos problemas.

Caral 21-07-2010 02:42:55

Hola
Efectivamente; Los componentes están en la paleta Interbase.
Usas el IBDatabase para la conexión y el IBTransaction para la transaccion.
Luego hecho esto se usan los IBTable e IBQuery como cualquier otro componente.
Tambien estan los componentes ZEOS pero son un poco mas peleones.
Cualquier duda grita.
Saludos


La franja horaria es GMT +2. Ahora son las 19:18:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi