Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Trabajar con IBQuerys (https://www.clubdelphi.com/foros/showthread.php?t=9420)

StartKill 22-04-2004 20:57:29

Trabajar con IBQuerys
 
Hola, :cool:

Estoy con Delphi 7.0 Interbase 6.0.1. trabajo con componentes IBX

Tengo un formulario con un IBQuery, en este he selecionado solo un conjunto de filas que aproximadamante son 200, estos registros los presento en un DBGrid donde el usuario hace sus respectivas modificaciones a varios campos... :p

Además tengo un boton que se llama "Llenar terminados", este boton llena todos regitros del Ibquery (200 filas) con el valor 1 en el campo "terminado".

Lo lleno con un Bucle "while do" desde el principio (bof) hasta el final (eof). :D

No tengo ningun problema con el llenado es rápido... pero mi duda se centra si hay alguna forma "experta" de hacer este mismo trabajo. ;)

Es como si quisiera hacer una "sentencia Upate" a los datos del IBquery, hay que recordar que si hago un Update a la tabla de base de datos mi IBquery quedaria desactualizado y se refresco mi IBquery perderia los datos sin confirmar y la confirmacion de datos la debe dar el usuario final, y ya sabemos a lo mejor al final de la sesion el usuario eligio no grabar.... :confused:

Muchas gracias, espero criticas, consejos, regalos :-) , experiencias que serán bienvenidas.

Your friend :cool:

StartKill
Lima-Perú

xcostey 23-04-2004 00:42:35

Lo que tienes que hacer es un update en la tabla con otra query pero que use la misma transaccion.

La estructura de programa es el siguiente

query.post;

query2 := tibquery.create(nil);
query2.transaction := query.transaction;
query2.sql.text := 'update table set camp = 1 where ...';
query2.execute;
query2.free;

query.close;
query.open;

jachguate 23-04-2004 08:39:40

cuando el usuario presiona el botón, podes activar un flag en la forma.. y antes de hacer commit, verificar si el flag está encendido, lanzar la sentencia update...

quizas en enrollar mucho el asunto y si ya tenes el bucle... dejarlo asi, siempre que no sean muchos registros.. pues para el servidor también es "preferible" recibir una sola sentencia que mil...

Hasta luego.
;)

StartKill 29-04-2004 06:05:36

Hola a todos, :cool:

Amigo xcostey, diste en el punto clave, es lo que buscaba, al margen de la sugerencia de nuestro moderator jachguate. :) :)

La sugerencia de xcostey es mas real a mi aplicación, por que??..humm, como les comentaba tengo un grid con varias columnas editables y este dbgrid pinta la columna "terminado", y ya saben el usuario quiere ver su columna con el dato (0/1) segun el presionado "boton", y sin perder los datos que habia modificado en el grid y sin haber hecho aun un commit.

Aqui les pego el codigo ejemplo que probe, tanto el IBQuery como el IBSQL utilizan una misma transaccion,


Código:


procedure TForm1.Button4Click(Sender: TObject);
begin
  IBSQL1.Close;
  IBSQL1.sql.clear();
  IBSQL1.sql.Add('update zzzz set term ='+chr(39)+'0'+chr(39));
  IBSQL1.ExecQuery;
 
  IBquery1.close;
  IBquery1.open;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IBSQL1.Close;
  IBSQL1.sql.clear();
  IBSQL1.sql.Add('update zzzz set term ='+chr(39)+'1'+chr(39));
  IBSQL1.ExecQuery;
 
  IBquery1.close;
  IBquery1.open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ibtransaction1.Rollback;
  ibquery1.Close;
  ibquery1.Open;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  IBTRANSACTION1.CommitRetaining;
end;

Muchas gracias, y hasta la proxima...

Your friend :cool:

StartKill
Lima-Peru


La franja horaria es GMT +2. Ahora son las 13:31:56.

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