Cita:
Saludos |
Desde hace 14 años uso IBX con delphi 5, una gestión de cientos de clientes con centenares de terminales conectados a un servidor firebird.
No necesitas probar con otro delphi ni con otros componentes. El resultado va a ser el mismo. |
Cita:
|
Cita:
Como ejecutas tu aplicacion en los clientes con el ejecutable o con acceso directo al ejecutable comartido en el servidor? |
A ver, a ver...
Terminal 1: tienes un dbgrid asociado a un dataset y ese dataset es un ibtable. Terminal 2: en ese mismo dbgrid->dataset (ibtable), añades un nuevo registro... en el otro (terminal 1) debes refrescar el dbgrid (o sea, el ibtable) para que se vea el nuevo registro. Si estás haciendo eso, entonces... es que eso es normal, eso es así. Ahora bien, si sales de esa pantalla en el terminal 1 y vuelves a entrar, entonces verás el nuevo registro que se ha añadido en el terminal 2. ¿Es así? |
Cita:
Yo te propongo que pongas un par de DbEdit, un DbGrid, y unos Tbotton que graben, eliminen y demas para ver que hacen (Todo por codigo). Si tenes algun problema con como hacer esto en un rato vuelvo. Me voy a inspirar por ahi :rolleyes: Saludos |
Cita:
|
Puse dos botones para las altas y saque el dbnavigator, ahora cuando hago un alta en una terminal, en la grilla de la otra no se actualiza. tengo configurada la base y transaction de la misma forma que el tutorial pero en vez de poner localhost puse la ip 192.168.1.103:c:\misistema\mibase.fdb que es donde se encuantra el sistema con la base, tengo instalado en el servidor firebird 2.5 claasicserver igual que en la terminal para que no le falte ningun dll ni nada. Alguna idea ? |
Yo tengo algunas ideas pero creo que no te van a gustar:
1) Vuelve al principio del hilo y lee lo que pusiste y lo que te han venido diciendo los compañeros con calma, tranquilidad. 2) Repítase el paso 1) hasta que los nervios hayan desaparecido 3) Inspire y exhale profundamente 10 veces. Resople, deja que todo el aire salga de tus pulmones. 4) Cierra los ojos, despeja tu cabeza... no pienses en código... ni en base de datos... no pienses en nada. 5) Abre los ojos, vuelve a leer de nuevo el hilo desde el comienzo. 6) Lance una buena puteada al que le dió estas intrucciones. 7) Una vez ya que se haya descargado vuelva a leer y a seguir en serio las recomendaciones de los compañeros. 8) Vuelva al paso 7) hasta que se haya cansado 9) Una vez que se haya enojado de nuevo. Vuelvase a las recomendaciones del los compañeros. Agarre la biblia de las transacciones que le han recomendado. Apréndasela como el padre nuestro. 10) Aprenda de una vez que el sistema no es un adivino. ¿Como carajos se supone que por arte de magia aparezca lo cambiado en una aplicación en otra? SIEMPRE, PERO SIEMPRE se lleva a cabo un REFRESCO de datos. Los datos no aparecerán por arte de magia. "Algo" le debe indicar a la aplicación que los datos han cambiado; o bien debe implementarse que cada x tiempo se refresquen los datos. 10) Aprende sobre los eventos de firebird. Están diseñados para esto. El servidor notifica a TODOS los clientes con un evento. Luego los clientes capturan este evento y es responsabilidad de éstos en hacer luego lo que necesiten. Para el caso REFRESCAR. En la documentación oficial de Firebird hay un paper que es casi una obligación leerse. Como vez, OBVIAMENTE sea cual fuese la forma... magia no hay. ¿Quieres que aparezcan los datos? ¡Debes refrescar! Ya sea que cierres las forma y vuelvas a abrir, vuelvas a cerrar y abrir el data set... o vuelvas a ejecutar la consulta para traer los datos... Lo que haces en A se queda en A. Si B to Z necesitan saber lo que hizo A le deben "preguntar" al server.... Después de todo, es el quien en verdad sabe que cosas se han hecho. Me parece a mi que no tienes ni idea de como es que funciona la arquitectura cliente/servidor. Dependiendo del nivel de aislamiento de las transacciones podrás ver más o menos registros. Cuando haces un CommitRetaing mantienes la transacción abierta PARA ESE CLIENTE, PARA ESE DATASET. Más eso no quiere decir que los demás inmediatamente van a saberlo. ENTIENDELO DE UNA VEZ. 11) ¿Que carajos haces mezclando ApplyUpdate con un trabajo que no tiene nada que ver? ApplyUpdates solo sirve cuando se trata de un trabajo a nivel caché. Es decir, todo se hace en forma localmente de manera temporal y luego se vuelca todo en la base de datos, es casi parecido a como trabajar con TClientDataSet. Si no tienes en la propiedad CacheUpdates en true estas haciendo algo que no tendrá efecto en nada porque naturalmente, no hay que actualizar. 12) Ya no le sigas más... mejor ve a otra cosa. Duerme. En cuanto tengas la cabeza en blanco recién vuelve. 13) No nos interesa el tiempo que te demores, aqui no hay urgencias asi que da lo mismo que te demores 50 días que te lleve 4 horas. La desesperación a la taberna, y te tomas una cerveza para pasar el mal sabor. No apures lo que no se puede apurar. Tu estas bloqueado y seguirás así si no te resignas a aceptar que por hoy ya no más. 14) Aprende a reconocer tus batallas, hasta cuando puedes y cuando no. 15) Putea de nuevo. Dale, ¡que te encanta! 16) Vuelve al inicio del hilo... ¿Ya leíste toda la documentación que te recomendaron o vas a seguir en la negación? Saludos, PD: 16 ideas de como no agradar a nadie. 16 maneras de como despertar a alguien... Depende de como lo desee mirar uno. :D |
Cita:
esto lo unico que hace es actualizar los datos pero de la terminal la cual se modifico. Puede ser por instalar mal firebird en los clientes ? |
http://www.delphiaccess.com/forum/de...base-de-datos/
En ese hilo tratan un poco del tema y al parecer es como decia todo lo que realizan las terminales no se informa a los clientes a no ser que sea por algun evento para informarles del cambio. Uds que tienen aplicaciones conectadas con firebird cliente/servidor como hacen para informar de cambios en la base ?? |
Creo que no has leido todo lo que hemos contestado :confused:
|
Cita:
|
Cita:
|
Cita:
|
1- instale firebird 2.5 CS en la maquina servidor
2-instale firebird 2.5 solo cliente en una terminal 3- coloque en la maquina servidor una carpeta con el ejecutable y la base de datos 4- comparti esa carpeta en internet 5-en la terminal ejecute el sistema directamente de la carpeta compartida del servidor 6-ejecute mi aplicacion tb en el servidor 7-doy de alta un registro con el servidor el cual no se ve reflejado en la terminal. 8-quiero dar de alta el mismo registro en la terminal ya que no figura pero me tira error de primary key, o sea que si se hizo el commit en la base pero la terminal no se entero. El punto 8 como lo puedo solucionar ? |
Amigo, insisto, no has leido todo lo que hemos escrito :confused:
|
Cita:
|
No, te hablo del documento sobre las transacciones y también sobre post_event.
Además del funcionamiento cliente/servidor. |
Cita:
|
Sobre las transacciones como tendria que ser la configuracion?, porque anteriormente puse como la tenia configurada a la base y a la transaccion.
parametros de la transaction read_commited rec_version nowait |
Tiene que compilar. Mal vamos si no compila eso. |
Para no seguir dando vueltas, hay alguien que use firebirds y aplicacion cliente servidor que pueda actualizar los dataset de las terminales sin tener que hacerlo por codigo con un dataset.refresh;
|
Amigo, disculpa que te lo diga, pero está claro, no te enteras :confused:
|
Cita:
y supongo que es porque un tdataset comun no tiene una transaction. |
Cita:
|
Creo que es la tercera vez ;)... mira sobre post_event <--- click ahí ---
Y este enlace también lo puse antes. |
Hola nuevamente:
esto:
estaria mal a mi entender si localidades es un IbTable ya que el commit se hace sobre el componente IbTransaction Te voy a poner una unidad completa de un ejemplito bien sencillo sobre el alta de un cliente
Resumiendo: Dm es un TDataModule Clientes es un IbTable Transaccion es un IbTransaction Para que puedas actualizar en tiempo real por decirlo de alguna manera a todos los clientes vas a tener que crear un trigger que genere un evento, algo asi:
que se disparara cada vez que se ingrese uno en este caso y capturar ese evento con el componente IBEvent para que realice la correspondiente actualizacion de la grilla. En la unidad del TDataModule (Dm) puse esto:
Comentado esta el codigo para el IbEvent Saludos.- y espero que vayamos orientando hacia alguna parte |
17) Vuelva a leer este hilo de atrás para adelante... quizá si lo hacemos "al verré" se entiende la cosa :D :p
Saludos, |
Cita:
|
Bueno parece que vamos encontrando el rumbo. Igual los tengo comentados (Lo de IbEvents) porque no se cual es la razon que se queda pensando el sistema en red. Seguramente hay algo que estoy mal pero ya alguien va a comentar.
Saludos |
Cita:
|
Hagamos una cosa: Pone el codigo del trigger y vemos porque no setee nada raro en el componente solo le asigne la Database, Tambien lo cree en el datamodule no se si tendra algo que ver.
A tener en cuenta:
new_reg es el nombre del evento envia la base de datos y que captaremos, y en el evento OnEventAlert del IbEvents hacemos la pregunta donde preguntamos si viene el evento new_reg hacemos el refresco del datasource que enlaza la grilla (Ojo parece que diferencia mayusculas de minusculas - Me pasó) |
Cita:
|
y el del trigger?
|
este es el triger que cree con ibexpert en la tabla localidades |
Debería funcionar. :confused:.
Volvemos a las transacciones (El evento solo se ejecuta si hay un commit o CommitRetainging); En ese evento de AfterPost del IbTable no pongas
Pone de acuerdo a tu componente IbTransaction, es decir:
|
Cita:
Pero hace el post de todas formas, porque cierro mi aplicacion y al volver abrirla estan los cambios guardados, supongo que sera en el momento de cerrar que commitea |
Funcionoooooooooooooooooooooooooooo :D:D:D:D:D:D!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Gracias gente por su tiempo y martins idolo por el codigo, lo que buscaba era eso el trigger de firebird que dispare el evento para actualizar los clientes anda de puta madre , muchisimas gracias !!!! :D:D:D |
Cita:
Das la impresión de que lo que estabas buscando con todo esto es que viniera alguien con el código |
La franja horaria es GMT +2. Ahora son las 01:36:48. |
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