Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Una lo ve, pero la otra no (https://www.clubdelphi.com/foros/showthread.php?t=44276)

casacham 02-06-2007 00:05:06

Una lo ve, pero la otra no
 
Hola a todos los amigos el foro

Inicie este nuevo hilo para presentar una duda que se ha convertido en un problema. Tengo dos aplicaciones hechas en Delphi que sirven para administrar una base de datos en Acces o mejor Microsoft Jetl Ole 4.0. Utilizo TAdoConection y TAdoTable para comunicarme con las tablas. La primer aplicación es con la cual inserto, edito, elimino, consulto, etc. los datos de la base de datos. Con una segunda aplicacion (hecha tambien en Delphi) tiene como objetivo realizar los reportes para la misma base de datos, en su diseño utilicé RaveReport que viene con delphi 7. Cuando inicio las dos aplicaciones, las dos muestran en sus Grillas los mismos datos, pero aqui viene el problema::confused: Si inserto, edito, o modifico cualquier dato con la primera aplicación (con la unica que se puede hacer esto), la segunda (que se encarga de los reportes) no ve esos cambios sino hasta que la cierro y la vuelvo a iniciar. Esto tambien ocurre cuando ejecuto dos veces la primer aplicacion, si trabajo con una de ellas, la segunda no ve los cambios a pesar que se comunican con la misma base de datos. Debo aclarar que no trabajo en red y todo es en el mismo ordenador.

:D ¿Como puedo hacer para que los cambios en el contenido de la base de datos se acutalize en todas las aplicaciones que se conectan con la misma base de datos?;)

Desde ya gracias, y espero que se entienda lo que estoy planteando. Perdon si es muy largo, no encontre otra forma de resumirlo.:cool:

Caral 02-06-2007 00:14:16

Hola casacham
Simplemente abriendo y cerrando la base de datos en el segundo programa.
Código Delphi [-]
AdoTable1.close;
AdoTable1.open;
Esto lo pones en un boton de actualizar y ya.
Hay otra forma que uso con algun programa, para evitar que se olvide de actualizar, inserto un timer y lo hago por tiempo, normalmente 30 minutos.
Saludos

casacham 02-06-2007 01:08:00

Ya lo habia intentado
 
Hola Caral
Agradezco con la prontitud que respondiste. Te cuento que la solucion que me propones lo habia pensado y lo hice, pero lamentablemente no me dio resultado, por eso inicie este hilo. Voy a volver a analizar las aplicaciones y hacer que funcione lo que me propones. Aparte la idea del timer esta muy buena. Tal vez mañana emita el mensaje de como me fue a traves de este hilo porque ahora no puedo probar esto. Desde ya muchisimas gracias.

gatosoft 02-06-2007 04:48:12

Hola casacham,

De nuevo te comento que no he trabajado con estos componentes ADO, pero puedo decirte que si la actualizacióon o actualizacion de los datos no te sirvio como te dijo Caral, lo que debe suceder es que no se han "aceptado los cambios" en la base de datos, esto es no se ha hecho COMMIT...

Recuerda que los componentes que se enlazan a una conexión pueden no tener un AUTO-COMMIT y deban esperar a que se le indique a la aplicación explicitamente que "acepte los datos" o en último caso se aceptan cuando el componente se cierra o destruye...

No tengo un Delphi a la mano , por lo que no pedo investigar las propiedades de los componentes, pero debe haber una forma de hacer autocommit en los componentes...

Solo como por probar, mientras alguien mas te ayuda, puedes intentar refrescar la tabla pero de la aplicacion uno (donde guardas los datos).

AdoTable1.close;
AdoTable1.open;

Y... como te dije en otro hilo, te recomiendo no utilizar los componetes TTable, sino los TQuery...

Un saludo

:D

Caral 02-06-2007 19:24:51

Hola
Cita:

Escrito por: gatosoft
Y... como te dije en otro hilo, te recomiendo no utilizar los componetes TTable, sino los TQuery...
Aqui hay que tener en cuenta una cosa (Base de datos Access).
Los componentes TTable o TQuery, trabajan en base a un alias, esto quiere decir que si quieres pasar tu aplicacion a otro ordenador, tendras que instalar algunos programas adicionales y posiblemente con inosetup.
Por el contrario los componentes Ado, trabajan directo sobre la base de datos, no necesitaras nada adicional.
Bueno es solo un comentario.
Saludos

casacham 02-06-2007 20:58:17

Caral siempre tiene razon
 
Hola Caral
Bueno, debo contar en el foro que finalmente la solucion que me propones funcionó. No se como ni donde era que estaba el error. Pero puedo decir con seguridad ahora que el procedimiento para que otra aplicacion pueda ver las actualizaciones de una tabla de Jet 4.0 lo que se debe hacer es
AdoTable1.Close; seguido de AdoTable1.Open en un procedimiento de boton o en un Timer, el mio quedo asi: donde DM_BD = TDataModule y T_PCTE_ = TAdoTable


Código Delphi [-]procedure TF_PrinReport.SpeedButton2Click(Sender: TObject);
begin
DM_BD.T_PCTE_.Close;
DM_BD.T_PCTE_.Open;
end;




Probe de hacer lo mismo con el TAdoConection y no surte ningun efecto, es con la tabla

Gracias a todos por responder. La otra verdad es que tengo que aprender urgente a manejarme con InterBase.

Caral 03-06-2007 03:22:28

Hola
Cita:

Escrito por casacham:
tengo que aprender urgente a manejarme con InterBase
Me he quedado colgado, por que ? :confused: , es que piensas emigrar a interbase ? :confused:
Me parece que si quieres dar un salto seria mejor o mysql :) , que es mas similar a access o ya el otro extremo, firebird :) :) , que es muy bueno (segun los comentarios).
Saludos

casacham 03-06-2007 23:37:59

Hola Caral
 
La verdad es que estuve leyendo sobre Firebird y me parece un poco complicado, esto es porque no conozco como se hacen las tablas. Tampoco es que soy un ignorante total, sino que veo que se hacen a traves de SQL y si bien no es una rareza para mi; lo que cuesta es tener que dejar las comodidades de los sistemas como Acces, en los cuales colocas los campos, les das los tipos con apenas unos clicks, creas las interrelaciones con las tablas arrastrando campos y esas cosas que ya ni debes utilizar. Podras ver que es cuestion de tiempo, ganas no me faltan. Me he bajado todo lo relacionado a FireBird e Interbase, es mas tengo una aplicacion que tal vez la conozcas EMS SQL Manager 2005 for InterBase & Firebird sirve para administrar y diseñar tablas para Firebird e Interbase. Tambien estuve leyendo el manual de Alfonso Ricaño Bringas (rinconcito de delphi) en www.interbase.com.mx y otros manuales que he conseguido de diversos sitios. Otro punto es que he visto muchas discuciones por cual es mejor, si FireBird e InterBase, y como este ultimo viene con delphi, pense en aprender este antes que Firebird, ya que creo que son similares en definitiva (ciertos aspectos comunes, nada mas). Gracias por la respuestas de todos


La franja horaria es GMT +2. Ahora son las 19:32:32.

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