![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Disculpa la confusión...
No quise hechar todo el cuento por que no me parecía necesario, pero ya veo que sí :-) Los datos se encuentran en formato dBASE III en un servidor Novell NetWare, compartidos a través de la unidad de red M:\, el programa en Delphi 7 y la base de datos InterBase 6.5 se encuentran en la estación de trabajo. ¿Por que este enredo...? ¿Por que no usar IB y punto? muy simple, estamos en un periodo de transición, estamos pasando de Clipper 5.01 y dBase III a Delphi 7 e InterBase 6.5. Los datos siguen en los DBF del servidor y seguirán así por un tiempo, la base de datos IB almacena los datos temporalmente pues al entrar al modulo lo primero que se hace es borrar las tablas respectivas y llenarlas con los archivos DBF correspondientes. Para esto utilizo componentes ADO (para los DBF) y IBX (para InterBase). Ahora mi pregunta es ¿cual de los dos componentes genera el mensaje deadlock? no recuerdo haber tocado propiedades de ningun componentes de acceso a bases de datos (ni ADO ni IBX). El modulo funcionaba bien y de buenas a primeras apareció el error... un error que ya no veo (el modulo está terminado y funciona perfectamente, pero tuve que retrocer). Inclusive en fases de pruebas anteriores se ejecutaba el programa hecho en Clipper y el programa en Delphi, ambos en diferentes estaciones accesando a los mismos archivos DBF en la unidad M:\ del servidor NetWare, y funcionaba perfectamente bien. Por eso estaba asumiendo que el error estaba en los IBTable o en el IBDatabase Estoy preguntando todo esto por que sería fatal que en el futuro volviera a aparecer el mismo error y me viese obligado a reescribir codigo.
__________________
"Nadie es perfecto" (Don Nadie) |
|
#2
|
||||
|
||||
|
Hola.
A mi manera de ver, el deadlock puede ocurrir en cualquiera de las dos conexiones, pero dudo que la de DBase te devolviera una excepción... seguramente se quedaría toda la vida esperando a que el deadlock dejase de existir (cosa que sabemos es imposible). Probablemente ADO daría un timeout... pero no lo he probado. En ib/fb, por el contrario, el deadlock se reportará tan rápido como sea detectado por el motor. Para el futuro, creo que lo importante es que comprendas en que consiste el deadlock, pues este no se produce por si mismo... hay algo en la forma de operar el programa o en el propio código que lo produce y el motor de la base de datos no puede mas que simplemente reportarlo. Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#3
|
|||
|
|||
|
Bueno... no me queda mas que estar pendiente, al menos tengo dos programas que hacen (casi) lo mismo. Tendría que revisar linea por linea, o propiedad por propiedad... pero al menos con tu explicación se que no son los componentes ADO (pues leen archivos DBF que no son muy comunicativos con los errores :-) deben estar con los IBX.
El asunto es buscar tiempo y juntarlo con algo de curiosidad ... muchas gracias por la explicación.
__________________
"Nadie es perfecto" (Don Nadie) |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|