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 08-10-2007
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 08-10-2007
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.084
Poder: 18
juanelo Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 08-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
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.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 08-10-2007
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 08-10-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Cita:
Empezado por TrUnkS Ver Mensaje
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?
No tendrás ningun problema. La posición del registro la gestion el DataSource asociado al DataSet (TIBDataSet, TIBQuery o TIBTable). No tiene nada que ver con la transacción.

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.

Cita:
Empezado por TrUnkS Ver Mensaje
2.- Si un cliente abre 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.
A no ser que tengas un proceso de refresco automático, para que se pueda ver la última copia de un registro en cualquiera de los puestos, necesitarás hacer un refresh (del registro, del DataSet completo, ... dependerá de tu aplicación y lo que quieras hacer).

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:
Empezado por TrUnkS Ver Mensaje
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 ?
Sigo sin entender exactemente a lo que te refieres. Si un usuario tiene su aplicación corriendo en su PC, y otro usuario tiene la misma aplicación corriendo en otro ordenador, que uno haga lo que sea con un form o no, no afectará en modo alguno al otro usuario en el otro ordenador.

No sé si lo entendí bien.

Espero haberte servido de ayuda. Si tienes más preguntas, intentaré respondértelas lo mejor posible
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 08-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Ya veo que guglu se me ha adelantado, dado que comento algunas cosas de forma distinta, pongo el post.

Cita:
Empezado por TrUnkS Ver Mensaje
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?
Un Locate no sería la mejor forma, ya que implica hacer un "select * from tabla", así que estas trayendo todos los registros de la tabla desde el servidor al ordenador cliente. Lo normal es "select * from tabla where clavePrimaria = 32", de esta forma solo estas accediendo a un solo registro de la BBDD.

Cita:
Empezado por TrUnkS Ver Mensaje
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.
Si. Ten en cuenta que al cerrar un Dataset, estas cerrándolo en el lado Cliente. Si otro usuario quiere ver el cambio, tendrá que cerrar y abrir su Dataset.
Cita:
Empezado por TrUnkS Ver Mensaje
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 ?
Esto no tiene sentido. Para que lo veas más claro: Tenemos 2 usuarios, cada uno en un ordenador distinto; Si el usuario A cambia el tamaño de una columna en un Grid... ¿ese cambio lo notará el usuario B? Por supuesto que no, cada uno está ejecutando su propio programa.

Puedes hacer algunas pruebas arrancando 2 instancias de tu programa en tu mismo ordenador, y ver que pasa modificando un registro, eliminando, etc.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 08-10-2007
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
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 ?.

Última edición por TrUnkS fecha: 08-10-2007 a las 20:25:51.
Responder Con Cita
  #8  
Antiguo 08-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
con que componentes se hace una aplicacion cliente-servidor Debian Conexión con bases de datos 4 06-04-2005 22:39:35
Principiante en Cliente/Servidor con Firebird Hagen Firebird e Interbase 1 25-08-2004 20:45:22
BD en Cliente-servidor Phacko Conexión con bases de datos 0 18-08-2004 00:03:41
Firebird Cliente-Servidor dango Firebird e Interbase 2 05-06-2004 04:40:53
Dudas - Aplicacion Cliente/Servidor con Firebird 1.5 Hagen Firebird e Interbase 1 27-02-2004 06:15:38


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


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