![]() |
uso de componentes IBX en Cliente/Servidor Firebird
Hola a todos mi pregunta es la siguiente: En una aplicación Cliente/Servidor me basta con utilizar un solo componente TIBDatabase, TIBTransaction y un solo componente TIBDataSet para cada tabla ?, o lo mejor es utilizar una transaccion diferente para cada usuario ? ... osea en total 2 componentes TIBDatabase, 2 TIBtransaccion y 2 TIBDataSet asignados a una misma tabla de la base de datos ?. ¿ Me podria decir alguien su manera de trabajar ? ... Gracias
|
Que tal,
Si pudieras ser mas explicito, no queda muy claro lo que deseas hacer. Saludos. PD: Para conectarte a FB con IBX solo basta una IBDatabase, un TTransaction y un TIBQuery, recuerda que por cada operacion que hagas en FB se necesita un Transaccion, por lo que cada vez que acceses a tus datos necesitas un objeto transaccion, el Database puede ser compartido siempre y cuando todas tus consultas sean a una misma base de datos. |
Las situaciones pueden ser miles difentes y las soluciones también mil diferentes.
No se puede concluir para nada que necesites una o más transacciones para uno o mas DataSet's. Lo que sí deberías tener muy claros los conceptos de transacción antes de meterte a fondo. Te ahorrará muchísimos dolores de cabeza posteriores. En general, si vas a acceder a una sólo base de datos, bastará con un sólo IBDatabase. En general también, a cada DataSet se le asocia una transacción. Pero yo por ejemplo en casos de tablas dependientes unas de otras, tengo hasta 20 o 30 DataSet's asociados a una sola transacción. Lo más importante, tener claro el uso de las transacciones. ;) Encontrarás mucha información al respecto en el foro. |
Hola. Tengo claro el uso de las transacciones y como conectarme, pero hay algunos detalles:
1.- Si un cliente hace un Locate para buscar un registro y otro también lo hace, entonces hay 2 cursores en una misma tabla posicionados en distintos registros? 2.- Si un cliente habre una tabla y se encuentra en una transacción, otro cliente habre la misma tabla y se encuentra en algun registro, luego al hacer commit uno de ellos se cierra el dataset, pero el otro usuario sigue viendo el registro activo para el ? .. tengo Read Commited para la transacción. 3.- Cuando un usuario cierra un formulario quisiera poner Form.Enabled := False. Ahora si otro usuario está en el mismo form y el otro lo cierra con esa propiedad ... que pasa con el form del otro cliente ? DE antemano gracias |
Cita:
Está claro, que para cada 'vista' diferente del set de datos que necesites, es decir, para cada DBGrid o cualquier otro elemento DataAware, debería tener un DataSource y un DataSet propio. Si no vas a mostrar datos en pantalla, puedes reutilizar sin problema los DataSet's que estés utilizando, siempre y claro no necesites algun posicionamiento concreto. Es decir, como preguntas, si vas a hacer dos locate diferentes deberías de tener dos DataSet's diferentes. Pero siempre y cuando los utilizes a la vez en tu propia aplicación. No tiene nada que ver con otro usuario que esté utilizando la aplicación en otro puesto al mismo tiempo. No sé si me he explicado bien o he liado más la cosa. :o Cita:
Si la transacción está en Read Commited, funcionará perfectamente despues de que uno efectue un commit y el otro un refresco. De nuevo, los dataset's no tienen nada que ver con el commit de la transacción. Más si son en aplicaciones diferentes en diferentes puestos. Cita:
No sé si lo entendí bien. Espero haberte servido de ayuda. Si tienes más preguntas, intentaré respondértelas lo mejor posible ;) |
Ya veo que guglu se me ha adelantado, dado que comento algunas cosas de forma distinta, pongo el post.
Cita:
Cita:
Cita:
Puedes hacer algunas pruebas arrancando 2 instancias de tu programa en tu mismo ordenador, y ver que pasa modificando un registro, eliminando, etc. Saludos |
Gracias gluglu por tus respuestas te lo agradezco mucho. Estoy haciendo un sistema de facturación Cliente/Servidor y ya lo tengo casi terminado, con lo que me dijiste estoy asumiendo lo siguiente: Un solo componente TIBDatabase, TIBTransaction, TIBDataSet y un solo TDataSourse para cada TIBDataSet. Lo que cada usuario haga en el sistema de forma independiente no afeta al otro a excepción de los datos que se van agregando o eliminando en la base de datos. El problema es que tengo transacciones muy largas por ejemplo para efectos de navegación por los registros con botones creados por mi. Siempre estan abiertas las tablas pero siempre hago CommitRetaining para que se guarden los datos. No se si habra algún problema cuando uno tiene las tablas siempre abiertas en este tipo de aplicaciones. ¿ Lepe a que te refieres con 2 instancias ?.
|
Desde el explorador de windows, abre tu programa una vez, cuando ya esté cargado.... vuelves al explorador y lo abres de nuevo.
Tendrás 2 programas (simulando 2 usuarios distintos), cada uno con sus transacciones y sus Datasets... Saludos |
La franja horaria es GMT +2. Ahora son las 13:16:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi