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)
-   -   Error 10054 en Firebird (y otros) (https://www.clubdelphi.com/foros/showthread.php?t=67810)

mcs 07-05-2010 13:30:07

Error 10054 en Firebird (y otros)
 
Hola,

Tengo una aplicación que ataca a una base de datos de un servidor Firebird que está en la misma máquina (localhost).

A parte de esta aplicación, hay dos aplicaciones más, en el mismo ordenador, atacando la misma base de datos.

Mientras que la segunda y la tercera aplicación escriben y leen valores de la base de datos, la primera aplicación sólo los lee.

Y no sé porqué, pero no hay forma que esta aplicación (la "lectora") funcione correctamente:
- Constantemente salen errores 10054 en el Firebird.log, lo cual no tiene mucho sentido ya que en teoría se trata de un error de red, pero las otras aplicaciones no tienen problemas, y todo está en local.
- Tambien ha salido el error "invalid transaction handle (expecting explicit transactin start)". Esto tampoco tiene mucho sentido ya que no hago ninguna query en toda la aplicación... Hay una función que espera un evento de Firebird y mira el último registro de una tabla, y otro que recorre toda una tabla (16 registros) y modifica una ventana.

Para el acceso a datos uso los componentes IBDAC. Estoy usando Delphi 2010, Firebird WI-V2.1.3.18195, y ya no sé que más hacer...

Ah, al principio estos errores ocurrían al principio de abrir la aplicación, cuando después de abrir la conexión a la base de datos se intentaba abrir una tabla para leer una variable. He puesto que esta tabla se lea más tarde, y ahora sólo falla cuando se recibe un evento del Firebird y se intenta abrir otra tabla...

Si me podeis ayudar me hareis un favor, ya que estoy negro con este tema... :(

Saludos,

Marc

Casimiro Notevi 07-05-2010 13:39:58

Hola, seguramente tienes un problema con la tarjeta de red, el cable, la conexión de ese equipo al router, etc.

Cita:

INET/inet_error: read errno = 10054 or 10038 or 10093
Multiple entries in interbase.log or firebird.log with errors 10054, 10038, 10093, etc. These errors are caused by network problems - check your hubs, network adapters, etc. It is not an InterBase or Firebird error in itself, but it may cause problems.
Recovery process:
In this case it will be technical support, not a recovery process. If you have this problem and cannot solve it, you can request our support services.
Time: 4 hours and more.
Probable % of saved data: 100%.

mcs 07-05-2010 15:11:19

Cita:

Empezado por Casimiro Notevi (Mensaje 363141)
Hola, seguramente tienes un problema con la tarjeta de red, el cable, la conexión de ese equipo al router, etc.

Pero es que las 3 aplicaciones estan en la misma máquina, así cómo el servidor Firebird... Por tanto, las comunicaciones no salen del ordenador. Y de todas formas, solo falla uno de los programas, no todos...

Casimiro Notevi 07-05-2010 15:51:59

Pues no sé qué decirte, eso lo dicen ellos, los de firebird.

guillotmarc 07-05-2010 16:09:44

¿ Las tres aplicaciones son tuyas ?.

¿ Todas utilizan los mismos componentes, misma cadena de conexión, misma librería cliente firebird, etc. ... ?.

¿ El fallo está solo al leer esa tabla, o también falla en otras tablas ?.

Salutacions.

mcs 07-05-2010 16:30:15

Cita:

Empezado por guillotmarc (Mensaje 363160)
¿ Las tres aplicaciones son tuyas ?.

¿ Todas utilizan los mismos componentes, misma cadena de conexión, misma librería cliente firebird, etc. ... ?.

¿ El fallo está solo al leer esa tabla, o también falla en otras tablas ?.

Salutacions.

Hola,

- Si, las 3 aplicaciones son mías.
- Todas usan las librerías IBDAC, el mismo GDS32.DLL, la misma cadena de conexión, etc.
- El fallo ahora ocurre sólo al leer una tabla en concreto, pero antes pasaba con otra (la que abría inmediatamente después de abrir la conexión).

Estoy todavía mirandolo, y por lo que parece (pero no estoy seguro) el problema está en que se cierra la conexión con la bb.dd. No sé, es un follon de narices...

Saludos,

Marc

mcs 07-05-2010 16:42:36

Había un tercer error que me sale mucho menos, pero siempre en el mismo punto (abrir una tabla y situarme en el último registro).

El error es "Error reading data from the connection".

Casimiro Notevi 07-05-2010 17:05:48

Tiene pinta de estar dañada la base de datos, por qué no haces un backup/restore, por si acaso.
Yo haría lo siguiente:
  • Desconectar a todo el mundo. Asegurarme de que no hay ninguna conexión abierta a la base de datos.
  • Hacer un copia -> pega de la misma
  • Hacer el backup: gbak -b -t -v -user sysdba -password masterkey labasedatos.fdb labasedatos.fbk
  • Restaurarla: gbak -r -v -p 8192 -user sysdba -password masterkey labasedatos.fbk labasedatos.fdb
Y probar que funcione ok.

guillotmarc 07-05-2010 19:22:54

Puede ser una corrupción en los sectores de esa tabla, como dice Casimiro, o bien podría ser un bug en las IBDAC para Delphi 2010 (Delphi 2010 tiene cambios muy importantes en aspectos básicos como las cadenas de carácteres, y es muy posible que las versiones antiguas de IBDAC no funcionen correctamente), y que se desconecte inadecuadamente una vez realizada la conexión, y por ese dé el error de red.

¿ Las otras dos aplicaciones también estan programadas en Delphi 2010 y con la misma versión de IBDAC ?.

NOTA: Respecto a "invalid transaction handle", alguna transacción tienes que tener, puesto que no se puede realizar ninguna operación en la base de datos sin realizarla dentro de una transacción. Las transacciones no son solo para escribir, también son necesarias para aislar en las lecturas de las tablas.

Salutacions.

mcs 10-05-2010 08:13:46

Casimiro,

El viernes hice lo que me dijiste, el backup de la base de datos y su restauración. La aplicación continua fallando de la misma forma.

Gillotmarc,

La versión de IBDAC que usamos es la última, para Delphi 2010. Todos los programas estan compilados en Delphi 2010 y con la misma versión de las IBDAC.

Me miraré que el componente de transacciones esté configurado igual en las 3 aplicaciones, y si esto no funciona empezaré a quitar código hasta dejar lo mínimo más mínimo, a ver si así encuentro que c*** hace fallar.

Saludos, y muchas gracias por vuestras sugerencias.

Marc


La franja horaria es GMT +2. Ahora son las 05:44:25.

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