Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Actualización automática (https://www.clubdelphi.com/foros/showthread.php?t=67466)

sizne 19-04-2010 03:13:26

Actualización automática
 
Holas Foreros!

Quisiera saber, cómo realizar actualizaciones automaticas...
Tengo tablas realizadas en SQL Server debidamente relacionadas. Esas tablas tengo en el DataModule o en algun Form.

Y en varios Form con los botones usuales de Agregar, Guardar, Editar, Eliminar...

Por decir Table1 tengo sus campos en el Form1, Form2, Form3...

En el Form1 tengo las opciones de Agregar, Guardar, Editar, Eliminar... Por Xrazon realizo una modificacion, por decir estaba en el campo NOMBRE=Maria y lo cambio NOMBRE=Maritza...y lo guardo.
Pero cuando me voy al Form2 ese dato que modifiqué no se muestra actualizado, sigue con la informacion de NOMBRE=Maria.

Coloque antes de ingresar al Form2, en el evento OnActive o Oncreate

Código Delphi [-]
DM.Table1.Open;
DM.Table1.Refresh;
.....
No funciona....Además realizar este paso cada vez....si precisaria en varios forms el Table1? Pienso que debe haber otra opcion...

Alguna idea?

Espero que me hayan entendido :p

ecfisa 21-04-2010 20:59:44

Hola sisne.

Para que me ayudes a ayudarte, te hago unas preguntas:

1. ¿ Usas transacciones ?
2. ¿ Usas CachedUpdates ?
3. ¿ Usas un TDataSource dentro de un TDataMoudule, o lo declaras en cada Form ?
4. ¿ Usas un (TTable,TIBTable,TADOTable) dentro de un TDataModule, o la declaras en cada Form ?

Saludos.

sizne 21-04-2010 21:15:32

Cita:

Empezado por ecfisa (Mensaje 361437)
Hola sisne.

Para que me ayudes a ayudarte, te hago unas preguntas:

1. ¿ Usas transacciones ?
2. ¿ Usas CachedUpdates ?
3. ¿ Usas un TDataSource dentro de un TDataMoudule, o lo declaras en cada Form ?
4. ¿ Usas un (TTable,TIBTable,TADOTable) dentro de un TDataModule, o la declaras en cada Form ?

Saludos.

Hola efcisa, tengo las TAdoTable en un DataModule y tambien ahi sus DataSource para para tabla.
Y en un Form1 tengo los botones usuales de Agregar, Modificar, Guardar, Eliminar,..etc... Tengo DBGrid 1 ó DBedit que estan relacionados con el DataSource respectivo de la TAdoTable1.

En otro Form2 tengo los mismos campos ... solo que es un Form2 para realizar una busqueda y de igual manera uso DBGrid2 ó DBedit q también estan relacionados con el DataSource1 de la TAdoTable1.

Sucede q la informacion modificacada en el Form1 no se actualizan cuando estoy en el Form2.
A pesar que lo guardo cuando realizo los respectivos cambios en el Form1.

La 1. y 2. no entiendo muy bien. Soy nueva haciendo estas cosas..aprendiendo, lo siento:o

Gracias..

rgstuamigo 21-04-2010 22:19:28

La linea de código de refrescar(Refresh) debe ir siempre al final de cada insercion,elimimacion,edicion y no al principio.;)
En otras palabras haces la eliminacion o edicion o insercion y al final recien haces ejecutar un refrescamiento de los registros.;)
Para mas informacion puedes ver éste hilo ;).
Saludos...:)

sizne 21-04-2010 22:45:22

Hola rgstuamigo:

Te comento que estaba haciendo lo que me dijiste, pero me aparecia error...

En TAdoTable en la parte de Properties-Events estan: AfterRefresh, AfterEdit, AfterInsert....etc...BeforeInsert, BeforeRefresch...etc..

La pregunta es, que si por ese medio tb se podrian actualizar???
Quisiera saber un poquito mas sobre events...

Alguna sugerencia...?

Muchas gracias!!!

afunez2007 21-04-2010 22:53:18

Cita:

Empezado por sizne (Mensaje 360962)
Holas Foreros!

Quisiera saber, cómo realizar actualizaciones automaticas...
Tengo tablas realizadas en SQL Server debidamente relacionadas. Esas tablas tengo en el DataModule o en algun Form.

Y en varios Form con los botones usuales de Agregar, Guardar, Editar, Eliminar...

Por decir Table1 tengo sus campos en el Form1, Form2, Form3...

En el Form1 tengo las opciones de Agregar, Guardar, Editar, Eliminar... Por Xrazon realizo una modificacion, por decir estaba en el campo NOMBRE=Maria y lo cambio NOMBRE=Maritza...y lo guardo.
Pero cuando me voy al Form2 ese dato que modifiqué no se muestra actualizado, sigue con la informacion de NOMBRE=Maria.

Coloque antes de ingresar al Form2, en el evento OnActive o Oncreate

Código Delphi [-]DM.Table1.Open; DM.Table1.Refresh; .....

No funciona....Además realizar este paso cada vez....si precisaria en varios forms el Table1? Pienso que debe haber otra opcion...

Alguna idea?

Espero que me hayan entendido :p

A mi en lo particular el refresh no me simpatiza, a veces pasa por temas de indices y claves primarias y suele dar errores.

Aunque si coincido con algunos que han comentado que debe ir despues del proceso de Insert/Update/Delete, y no al principio.

Yo lo que suelo utilizar es:
Código Delphi [-]
DM.Table1.Active:=False;
DM.Table1.Active:=True;

Este es infalible aun si tienes mal configurados los indices o si no tienes.

Saludos

rgstuamigo 21-04-2010 22:56:07

Cita:

Empezado por sizne (Mensaje 361452)
Hola rgstuamigo:

Te comento que estaba haciendo lo que me dijiste, pero me aparecia error...

En TAdoTable en la parte de Properties-Events estan: AfterRefresh, AfterEdit, AfterInsert....etc...BeforeInsert, BeforeRefresch...etc..

La pregunta es, que si por ese medio tb se podrian actualizar???
Quisiera saber un poquito mas sobre events...

Alguna sugerencia...?

Muchas gracias!!!

Si tuviste error deberias comentarnos ¿cual?:confused:.
Sobre los eventos ..por supuestos que puedes utilizarlos, claro ésta que en éste caso sería mejor usar todos los After.....;), y en cada uno poder hacer el refrescamiento, aunque :rolleyes: en ese caso según veo sería mucho más mejor usar un solo evento ,estoy hablando del evento AfterPost de tu Dataset y poner el siguiente código:
Código Delphi [-]
procedure TForm1.ZQuery1AfterPost(DataSet: TDataSet);
begin
DataSet.Refresh;
end;
Claro que segun veo :rolleyes: en algunos casos talves no se dispararía ya que a veces se inserta,edita o elimina registro atraves de Sentencias SQL y no sé si en ese caso se ejecutaría dicho evento.:rolleyes: hummm... habría que hacer la prueba...;).
Saludos....:)

ecfisa 22-04-2010 08:07:45

Hola sizne.

Perdón por el retraso pero me surgió un problema, aunque veo que ya estás en buenas manos.;)

Mirá, nunca trabajé con ADO, por lo que reproduje la situación que explicaste a los palos :D, pero bueno lo que hice fué:

Form1: TDBGrid + TDBNavigator.
Form2 (DataModule): TADOTable + TDataSource
Form3: TDBGrid (para visualizar los cambios) + TDBLoockupComboBox (para consultar)

Luego probé:
ADOTable.ConnectionString -> DBDEMOS.udl
TableName -> country

Y también:
ADOTable.ConectionString ->Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Common Files\Borland Shared\Data\dbdemos.mdb;Persist Security Info=False
TableName -> country

Puse que al ejecutar Form1 habriera la ventana Form3 para poder visualizar los cambios. Con las dos ventanas abiertas a la par, modifico en Form1, directo en el DBGrid y al cambiar de campo o aceptar en el DBNavigator, al instante veo reflejada la modificacion en el DBGrid del Form3, sin necesidad de hacer Refresh.

No utilicé código alguno, lo cuál me indica que la actualización la realiza en forma automática y correctamente.

Si no supongo mal el ingreso lo haces mediante un TButton u otro componente, en el evento OnClick. Si fuera así, ¿No nos pondrías el código de ese procedimiento ?

Saludos.

sizne 22-04-2010 18:27:01

Hoooola a TODOS/AS:

Ya no estoy colocando el codigo puesto que con lo que dijo afunez2007

Código Delphi [-]
Table1.active := False;
Table1.active := True;





Con ello si se me actualiza en todas los Forms tuve que colocar en el evento OnActivate.;)
Cierto rgstuamigo, para cuando se realizaba las consultas no se actualizaba en algunas actualizaciones que hice, asi que en algunas si......... coloqué Refresh...:p

ecfisa, gracias como siempre estás ahi :) Te cuento que hice lo que mencionas, solo que a veces utilizaba consultitas.......Intente en el form3 volver a colocar la tabla1(q estaba en el DataModule) de la que no me actualizaba en otros Form3. Pero ahora con el Active:=False y True se me actualiza :p graaaaacias.


La franja horaria es GMT +2. Ahora son las 11:40:23.

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