PDA

Ver la Versión Completa : refrescado de datos


BlueSteel
13-07-2006, 18:55:15
Hola.

quisas el titulo no sea tan descriptivo, pero lo que me gustaría saber es cual es la mejor manera de estructurar un sistema, trataré de explicarlo.. espero me entiedan :p

tengo el siguiente problema... en un sistema ingreso a un modulo (Form) de creación de Centros de Costos... salgo del modulo e ingreso al modulo(cargos), entonces quiero buscar el centro costo que recien cree y esto no esta.. pero si salgo del sistema y vuelvo a entrar, este aparece......

Esto tambien me aparece con algun reporte... almaceno los datos y mando a imprimir el informe.. pero aveces no imprime todos los items.. solo el primero... pero si salgo del sistema y vuelvo a entrar imprime todos..:confused: :confused: :confused:


quizas sea que cuando se carga el sistema se crean todos los formularios en ese momento,, existe alguna otra forma de que los form se creen cuando se ingresa a ellos y no cuando se carga el sistema... o esto no tiene nada que ver ????

gracias por cualquier ayuda

nemesio
14-07-2006, 06:53:23
Con qué base de datos trabajas? Si estás realizando Post cada vez que introduces datos, debería estar actualizado. Bueno siempre validando después de cada post que aplique los cambios realizados. Me explico mejor.
Si trabajas con Interbase/FireBird, en el evento AfterPost agregas el código: Transaccion.Commit; si es con Paradox agregas Table1.Flushbuffers.

Suerte.

marcoszorrilla
14-07-2006, 07:16:58
Lo que dice Nemesio es cierto, pero solamente para el puesto que efectúa los cambios, si otro usuario tuviese abierta una consulta y se produjera un cambio, no vería la nueva situación puesto que en su momento obtuvo la tupla de datos, para esto existe la posibilidad de colocar un Timer que cada x tiempo recomponga la consulta para traernos los posibles cambios producidos.

Creo que en el caso de Interbase puede utilizarse el IBevents, pero no tengo ahora a mano documentación al respecto.

Un Saludo.

BlueSteel
19-07-2006, 19:05:22
Con este proceso almaceno un dato en la tabla "Centro", .. esto lo hago en el Form "Ccostos"


IBQ_Edit.SQL.Clear;
IBQ_Edit.SQL.Add('Insert Into "Centro" ("Cen_Codigo","Cen_Detalle")');
IBQ_Edit.SQL.Add('Values (:P1, :P2)');
IBQ_Edit.Params[0].AsString := vCod.Text;
IBQ_Edit.Params[1].AsString := vDet.Text;
IBQ_Edit.ExecSQL;
IBT_Edit.Commit;


para cerrar el Form le pongo solamente "close"

luego voy al Form "Cargos" y cuando este se abre me ejecuta el siguiente código, en donde todos los datos que estan en la tabla "Centro" me los pasa al Combo_Box "CB_Centro" para agregarlos


procedure TAsig_Costos.FormActivate(Sender: TObject);
begin
IBQ_Cargos.Close;
IBQ_Cargos.SQL.Clear;
IBQ_Cargos.SQL.Add('Select * From "Centro"');
IBQ_Cargos.SQL.Add('Order By "Cen_Codigo"');
IBQ_Cargos.Open;
CB_Centro.Items.Clear;

While IBQ_Cargos.Eof=False Do
Begin
CB_Centro.Items.Append(IBQ_Cargos['Cen_Detalle']);
IBQ_Cargos.Next;
End;


lo que pasa es que cuando agrego un registro en la tabla "centro" y sin salir del sistema ingreso al Form "Cargos", este no aparece registrado.. pero si salgo del sistema e ingreso de nuevo.. lo actualiza y si aparece

espero haberme explicado bien....

marcoszorrilla
19-07-2006, 22:19:49
Cuando entras en el segundo form, cierra y vuelve a abrir la tabla centro.

Un Saludo.

BlueSteel
20-07-2006, 19:06:03
y como tendria que cerrarlo... sera algo asi


IBQ_Cargos.Active := False;
//luego lo vuelvo a abrir
IBQ_Cargos.Active := True;

marcoszorrilla
20-07-2006, 19:26:04
Pues sí, creo que con eso sería suficiente.

Un Saludo.