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)
-   -   Actualizar DBGrid en Pc's (https://www.clubdelphi.com/foros/showthread.php?t=10502)

pgraciap 20-05-2004 21:24:18

Actualizar DBGrid en Pc's
 
Hola a todos(as)

Espero no equivocarme en la redaccion de mis dudas... :)

Estoy trabajando con tablas de paradox 7 en delphi 7.
El programa creado es para red, los Netdir y Privatedir estan bien configurados.

El problema es el siguiente.

Cuando ejecuto la captura de datos en la PC1 no veo el cambio en la PC2 bueno si lo veo pero hasta que cierro la tabla y la vuelvo abrir, pero mi pregunta es hay alguna forma de hacer esto sin la necesidad de abrir y cerrar la tabla hay una forma mas rapida?

Code.
Table1.Append;
Table1.FieldByName('Codigo').AsString := Codigo.Text;
Table1.FieldByName('Fecha).AsDateTime:= Date;
Table1.Post;

Este es el codigo de captura de datos.

El DbGrid esta direccionado al DataSet del Table1.

Espero haya descrito bien la duda y espero me puedan ayudar....

Saludos y Gracias..... :D

delphi.com.ar 20-05-2004 21:29:03

Código Delphi [-]
Table1.Refresh;

Saludos!

roman 20-05-2004 21:29:59

Podrías intentar usar Table.FlushBuffers cuando hagas ediciones para asegurar que la tabla física se actualiza y usar Table.Refresh en un Timer para actualizar la tabla cada x tiempo.

// Saludos

luchin001 20-05-2004 23:28:02

table.flushbuffer solo libera los buffers de memoria despues de grabar pero no tine ningun efecto en el comportamiento de la tabla, despues del post tendrias que agregar

Código Delphi:
Table1.Refresh;

como dice delphi.com.ar

Luis

roman 21-05-2004 00:40:00

Cita:

Empezado por luchin001
table.flushbuffer solo libera los buffers de memoria despues de grabar pero no tine ningun efecto en el comportamiento de la tabla, despues del post tendrias que agregar

Quizá no me di a entender pero lo que propongo yo no está peleado con lo que propone delphi.com.ar. Hablé yo de Table.Refresh al igual que de Table.FlushBuffers entendiendo que la estación que haga cambios use FlushBuffers y la estación que desee tener lo más actualizado de la tabla física use Refresh. Si los buffers no se han liberado en una estación, los cambios no se verá reflejados en otra por más Refresh que haga.

// Saludos

pgraciap 21-05-2004 22:47:33

Amigos ya hice lo que me dicen pero no se actualiza la tabla del PC2 ya que adicione el dato en la PC1.

Estoy compilando en Windows XP Pro y el Prgrama lo estoy instalando en Windows 98 Se hay algun problema o hay algo que me falta?

Gracias por la ayuda que estoy recibiendo de ustedes..... :D

delphi.com.ar 21-05-2004 22:51:35

Cita:

Empezado por luchin001
table.flushbuffer solo libera los buffers de memoria despues de grabar pero no tine ningun efecto en el comportamiento de la tabla...

Si para la otra PC, porque hará efectivo el cambio que puede estar en el Buffer en lugar de en el disco.

Cita:

Empezado por pgraciap
Amigos ya hice lo que me dicen pero no se actualiza la tabla del PC2 ya que adicione el dato en la PC1.

No pretenderás que solo modificando los datos desde la PC1 la PC2 reciba una notificación y se autorefresque... ¿No?

roman 21-05-2004 22:56:48

Cita:

Empezado por delphi.com.ar
No pretenderás que solo modificando los datos desde la PC1 la PC2 reciba una notificación y se autorefresque... ¿No?

Yo por eso digo que in Timer.

delphi.com.ar 21-05-2004 23:00:20

Cita:

Empezado por roman
Yo por eso digo que in Timer.

Me olvidé de esa parte :D..

Tratándose de tablas Paradox, que podés aceder a sus archivos, podrías probar de utilizar ShellNotifications, pero dudo que eso funcione en unidades remotas.

pgraciap 22-05-2004 21:33:48

Miren hice lo que me dicen al principio osea:

Citar:
Originalmente publicado por roman
Podrías intentar usar Table.FlushBuffers cuando hagas ediciones para asegurar que la tabla física se actualiza y usar Table.Refresh en un Timer para actualizar la tabla cada x tiempo.

Esto fue lo que hice en el codigo y no funciona con el PC remoto.

Code:
Table1.Append;
Table1.FieldByName('Codigo').AsString := Codigo.Text;
Table1.FieldByName('Fecha).AsDateTime:= Date;
Table1.Post;
Table1FlushBuffers;
Table1Refresh;

En el Timer (InTime)
Table1Refresh;

El timer tiene un tiempo de 20seg.

El PC remoto tiene un DBGrid dirigido a la misma tabla y tiene tambien lo escrito en el Timer, pero no se ve el cambio de las ultimas adiciones al menos que cierre la tabla y la vuelva a abrir. :(

:D Alguien sabe el por que o que esta causando que no se actualizen los datos?

Nota: la tabla si sufre el cambio fisicamente he.....

marcoszorrilla 22-05-2004 22:00:37

Mira estoy utilizando la etiqueta Delphi que creó precisamente Román, lo cual facilita la lectura del código
Código Delphi [-]
Table1.Append;
Table1.FieldByName('Codigo').AsString := Codigo.Text;
Table1.FieldByName('Fecha).AsDateTime:= Date;
Table1.Post;
Table1.FlushBuffers;
Table1.Refresh;//este te sobra

Creo que no has entendido bien lo que te han dicho mis compañeros.

Imagínate que la pc1 da un alta y hace el correspondiente flushBuffers, para descargar la memoria intermedia a disco, en este momento en Pc2 alguien tiene abierta una consulta en el formulario pongamos frConClientes, en este formulario es donde debieras tener un Timer activado que se dispare cada x segundos y te haga el refresco de la tabla para que este usuario vea el cambio hecho por PC1.

Un Saludo.


La franja horaria es GMT +2. Ahora son las 12:10:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi