Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-11-2005
CarlosVF CarlosVF is offline
Registrado
 
Registrado: nov 2005
Posts: 3
Poder: 0
CarlosVF Va por buen camino
Ayuda a un neófito, por favor.

Saludos a todos; estoy haciendo unas pruebas de sincronización con Delphi e InterBase y para tal fin programé una pantalla que accede a una tabla DBF mediante ADO (previa creación de su ODBC) para que actualice su contenido en una tabla de una base de datos de InterBase 6.5, cuando hago cambios en la tabla de InterBase el programa a su vez actualiza la tabla DBF; hasta este punto todo de maravilla, el problema es cuando trato de que el programe lo ejecuten mas de un usuario a la vez; al tratar de entrar, específicamente cuando realiza la actualización de las DBF a InterBase en el línea del POST se queda pegado (se que es ahí porque lo corrí con debugger) hasta que cierro la otra aplicación, en ese momento la que estaba pegada sale para dar un error de "Deadlock on concurrent update" o algo así; será que por defecto se abre Exclusivo y me falta algo para que el acceso se abra Compartido? la verdad tengo sólo 2 días usando Delphi y desconozco mas de lo que me gustaría y una ayuda de parte del que pueda me vendría muy bien; estuve buscando aqui y me encontré con varios que hablan de algo llamado "IBExpert" y a pesar de que me da miedo preguntar pues me veo en la obligación de hacerlo, así que si me pueden ayudar con esas dos preguntas lo agradeceré mucho.

Gracias.
Responder Con Cita
  #2  
Antiguo 12-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Viendo que es tu primer mensaje en el foro, Te damos la Bienvenida
Cita:
Empezado por CarlosVF
y a pesar de que me da miedo preguntar pues ..
... Y haces bien, cuando preguntan, solemos poner un barril de barro al fuego, con bastante agua y especias, llegado el herbor, arrojamos al forista dentro

"Deadlock on concurrent update"

Deadlock traducido es "Abrazo Mortal" en este caso en actualizaciones concurrentes.

Es como decir: Al llegar a un cruce de caminos, no tienes preferencia, tienes que esperar a que el otro pase. Me gustaría ver quien pasa primero.

Un proceso A tiene captado el recurso RA y el proceso B tiene captado el recurso RB, el proceso A necesita usar el recurso RB para terminar; el proceso B necesita el recurso RA para terminar.

Tendrás que pensar concurrentemente: cuando realizo este Post en interbase, ¿que ocurre si viene otro usuario haciendo el post sobre el DBF?

En cuanto al IBExpert, es un programa para crear/modificar el diseño de la base de datos Interbase/Firebird con interfaz gráfica. En su version personal es gratuito

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 12-11-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Lepe, me ha gustado tu explicación, clara y simpática
Responder Con Cita
  #4  
Antiguo 13-11-2005
CarlosVF CarlosVF is offline
Registrado
 
Registrado: nov 2005
Posts: 3
Poder: 0
CarlosVF Va por buen camino
Saludos a todos; y gracias Lepe por tu atención; el concepto de concurrencia lo tengo muy claro, soy programador de Visual FoxPro y tengo algunos años de experiencia en el desarrollo de aplicaciones administrativas mas que todo; mi problema es que cuando hago el "POST" que supongo que es algo así como el equivalente al "TableUpdate" que se usa en Visual FoxPro para mandar los cambios que has hecho a tu base de datos bien sea a la Tabla o Vista que tengas abierta; mi gran problema es que no tengo idea de por qué podría quedarse pegado el programa cuando 2 personas hacen "POST" a una tabla; no se supone (teóricamente) que en concurrencia, la última actualización es la que queda en el registro?; supongo que en Delphi sigue siendo así, de modo que el único camino que queda es que algo me falta por hacer, por definir o por declarar; por un momento pensé que estaba abriendo la Base de Datos en forma exclusiva, porque en Visual FoxPro eso se puede hacer con la Base de Datos que viene nativa con él.

Gracias de todas maneras.
Responder Con Cita
  #5  
Antiguo 13-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
- Para acceder a DBF usas ADO, ¿para interbase? ¿que versión?
- Que tipo de transacción usas, commited, readcommited...
  1. AutoStopAction
  2. DefaultAction
- Que tipo de objetos, ibtable, ibdatasets, etc..
- En que sistema operativo estas ejecutándolo

Quizás un poco de código cuando realizas el post y los posibles triggers que tengas, ayude más.

nos leemos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 14-11-2005
CarlosVF CarlosVF is offline
Registrado
 
Registrado: nov 2005
Posts: 3
Poder: 0
CarlosVF Va por buen camino
Hola Lepe, gracias por tu ayuda; te cuento que hice una prueba por IBConsole desde 2 estaciones y cuando hice cambios a los registros de la tabla de la base de datos en una estación y luego trataba de hacer cambios desde la otra me salía un error de "Deadlock", hasta que hice "Commit & Refresh", supongo que a eso te referías cuando me preguntaste cuál tipo de Transacciones estoy usando; pues bien, te cuento que los valores de los parámetros que me preguntaste son estos:
Dentro del DataMódulo en el componente TIBDatabase en la propiedad DefaultTransaction están las siguientes propiedades con los siguientes valores:
AutoStopAction=saNone
DefaultAction=TACommit

Seguro que es algo que debo poner ahí y lo desconozco o quizás debo hacerlo por comandos en el programa.
De antemano muchas gracias por tu ayuda.

Carlos Vásquez
Responder Con Cita
  #7  
Antiguo 14-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues ahora mira la ayuda de delphi sobre esas propiedades, si te lo digo yo, seguro que se me olvida algo.

En principio, deberías hacer un CommitRetaining, para que los cambios del primer usuario, sean accesibles directamente sobre el segundo usuario, y sobre el primer usuario sin hacer un Refresh.

PD: Esto no es tan facil, no es modificar una propiedad y listo, es un conjunto de propiedades, que según la filosofia de programación que uses y teniendo en cuenta lo que quieres hacer, deben establecerse de una forma u otra.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 14-11-2005
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
No seria mas combeniente usar componentes de conexión directa como IBX o MDOLib en lugar de usar ado??? el cambio no es mucho y si mejora el rendimiento!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:44:43.


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
Copyright 1996-2007 Club Delphi