![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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:
Para grabar cada registro utilizo la siguiente expresión al pulsar el botón Grabar:
Una vez que he terminado de introducir los datos, al salir del formulario hago lo siguiente.
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:
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:
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. |
#2
|
||||
|
||||
¿Usas transacciones?
|
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
¿Y dónde están los 'post' y 'commit'?
¿Y qué parámetros tienes en los componentes de base de datos y de transacciones? Sin embargo, para mí es lo más sencillo e intuitivo que he visto ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
|||
|
|||
Buenas,
Cita:
Cita:
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:
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. |
#6
|
||||
|
||||
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. |
#7
|
||||
|
||||
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. |
#8
|
||||
|
||||
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.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
![]() |
||||
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 |
![]() |
|