Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2022
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
trabajar misma BD con dos Ordenadores

Muy buenas

Estoy usando Delphi 2.010 y Firebird 2.5, tengo una IbDatabase, conectada a un IbTransaccion, de la Base de Datos he creado con el IbExpert una Tabla llamada IbTablaPagares.

El IbDatabase lo tengo abierto en diseño, la IbTablaPagares la abro al abrir el formulario FormPagarés donde meto los datos del siguiente modo:

Código Delphi [-]

                            dat.Datamodule.IbTablaPagares.open;

Para grabar cada registro utilizo la siguiente expresión al pulsar el botón Grabar:

Código Delphi [-]
                          dat.Datamodule.IbTablaPagares.Append;

Una vez que he terminado de introducir los datos, al salir del formulario hago lo siguiente.

Código Delphi [-]
                           dat.Datamodule.IbTablaPagares.close;


Mientras trabajo en el Pc1 todo va bien, en el Pc2 tengo grabado el mismo programa y se conecta a la base de datos que se encuentra en el Pc1, y me conecto del siguiente modo:

Código Delphi [-]
                           [BD]
                           path="xxx.xxx.x.xxx:C:\Pagares\"

Cuando trabajo sólo con el pc1 va bien, cuando trabajo sólo con el Pc2 también se conecta en red y a la base de datos del Pc1 y funciona bien.

El Conflicto viene cuando con el Pc1 y el Pc2 trabajando a la vez, aunque el Pc1 esté visualizando Reports y el Pc 2 esté introduciendo datos en el Formulario FormPagarés, dando el siguiente error:

Código Delphi [-]
                            dreadlock
                            update conflicts with concurrent update
                            concurrent transacttion number is 41449

Como veis es bastante sencillo, pero en red no consigo que funcione he buscado varias formas pero no hay forma. lo ideal sería que el programa pueda funcionar en los dos ordenadores trabajando en la misma tabla e ir grabando los registros en la misma tabla de forma sincronizada, como hay muchos programas que lo hacen, pero no sé si esto es posible

Gracias.
Responder Con Cita
  #2  
Antiguo 14-03-2022
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
¿Usas transacciones?
Responder Con Cita
  #3  
Antiguo 14-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Estás generando bloqueos debido al uso de transacciones. IB/FB no es el sistema más claro en este sentido.
Yo te diría que primero leyesras un poco sobre cómo trabajan los componentes que estás utilizando (que no comentas cuales son) con las transacciones.

Aquí en el FTP del club, tienes bastantes documentos sobre el trabajado con FB:
https://terawiki.clubdelphi.com/Firebird/Documentos/

Y si buscas en los foros encontrarás hilos sobre el tema
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 14-03-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y dónde están los 'post' y 'commit'?
¿Y qué parámetros tienes en los componentes de base de datos y de transacciones?

Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
IB/FB no es el sistema más claro en este sentido.
Sin embargo, para mí es lo más sencillo e intuitivo que he visto
Responder Con Cita
  #5  
Antiguo 14-03-2022
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 58
Poder: 9
GINMARMENOR Va por buen camino
Buenas,

Cita:
kuan-yiu

¿Usas transacciones?
Como había dicho uso un IbTransaction conectada a IbDatabase, mediante la propiedad defaultDatabase, no uso mas transacciones y ésta en concreto la única propiedad que he modificado es la de DefaultDatabase lo demás lo que viene por defecto.

Cita:
Casimiro Notevi

¿Y dónde están los 'post' y 'commit'?
¿ Y Qué parámetros tienes en los componentes de base de datos y de transacciones?
Como he dicho antes sólo pongo en formulario Ibdatabase e Ibtransacciones y la IbTablaPagarés tal cual

En la IbDatabase en la propiedad DefaultTransation pongo IbTransation1

En el IbTransation en la propiedad DefaultDatabase pongo IbDatabase1

Y la IbTablaPagarés en la propiedad Database pongo IbDatabase1

Todo lo demás es lo que viene por defecto no pongo ningún otro parámetro, ya que en modo local me funciona bien sin
problemas durante años, el problema es al trabajar con dos Pc, que al tener el mismo programa abierto en los
dos Pc se bloquean, pero no uso ningún parámetro más.

Los Post y los Commit, no sé exactamente qué son, ahora investigaré.
Cita:

Neftali [Germán.Estévez]

Estás generando bloqueos debido al uso de transacciones. IB/FB no es el sistema más claro en este sentido.
Yo te diría que primero leyesras un poco sobre cómo trabajan los componentes que estás utilizando (que no comentas
cuales son) con las transacciones.
Sí es cierto un bloqueo tengo que generar eso seguro, los componentes que utilizo son los que he comentado y al crearlos en formulario mantengo las propiedades por defecto no he modificado nada de ellos sólo la parte que los conecto entre ellos.

Y hay tres posibilidades

Si trabajo en el Pc1 sólo, funciona bien

Si trabajo en el Pc2 sólo, sin que el Pc1 tenga abierto el mismo programa funciona bien.

Si Trabajo en el Pc1 ó Pc2 teniendo los dos Pc's, con el programa abierto es cuando surge el bloqueo, sólo en ese momento.

No quiero dejarme un dato que necesitéis, pero esto es lo que hago, de forma sencilla, tengo que configurar algo en IbTransation, en IbDatabase, o IbTable, no utilizo más elementos a no ser que falte alguno.
Responder Con Cita
  #6  
Antiguo 15-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Me da que estás generando una megatransacción que nunca cierras (Commit) y por eso te va dando bloqueos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 15-03-2022
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
En otras palabras:

Una transacción esta optimizada para ser CORTA.

Mientras puedes tener la BD abierta por horas ( y eso de estar abriendo/cerrando la BD no necesariamente es lo mejor, A MENOS QUE uses un pool de conexiones) , debes "abrir" BEGIN y "cerrar" COMMIT por cada conjunto atómico de operaciones (ie: Por cada BATCH que debe guardarse en un solo conjunto). Eso significa que tu código debe tener varios encapsulamientos de BEGIN/COMMIT.


P.D: Es un anti-patron tener un el componente de transacciones "global". Eso debes estar creándolo todo el tiempo.

P.D2: Si estas arrancando, intenta siempre usar la ultima version del motor de datos
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 15-03-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Aquí tienes un ejemplo muy básico y simple para que te hagas una idea.
Ahí puedes ver los parámetros del componente IBDatabase y del IBTransaction.

Y aquí tienes una captura de pantalla simulando 2 ordenadores.

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Unir filas con la misma llave de una misma consulta sql server DarkBlue SQL 4 11-09-2012 22:42:24
manipular la misma base de datos en la misma pc DELFIN2000 Conexión con bases de datos 10 23-07-2010 18:34:28
listar ordenadores en la red Alexandro Varios 1 26-03-2009 00:32:01
Como trabajar con tres BD diferentes en una misma aplicacion valera Conexión con bases de datos 1 26-10-2005 03:37:09
Conexión de dos ordenadores Novás Redes 4 16-08-2005 14:40:51


La franja horaria es GMT +2. Ahora son las 16:07:16.


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