Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2004
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Cool 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ú
Responder Con Cita
  #2  
Antiguo 23-04-2004
xcostey xcostey is offline
Miembro
 
Registrado: nov 2003
Posts: 12
Poder: 0
xcostey Va por buen camino
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;
Responder Con Cita
  #3  
Antiguo 23-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 29-04-2004
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
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;
Muchas gracias, y hasta la proxima...

Your friend

StartKill
Lima-Peru
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


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


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
Copyright 1996-2007 Club Delphi