FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Trabajar con IBQuerys
Hola,
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... 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). 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.... Muchas gracias, espero criticas, consejos, regalos :-) , experiencias que serán bienvenidas. Your friend StartKill Lima-Perú |
#2
|
|||
|
|||
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; |
#3
|
||||
|
||||
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.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#4
|
||||
|
||||
Hola a todos,
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; Your friend StartKill Lima-Peru |
|
|
|