Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-03-2011
Avatar de lafourcade
lafourcade lafourcade is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 0
lafourcade Va por buen camino
Unhappy Dbgrid en blanco

Hola espero por favor me puedan ayudar, he estado buscando una solucion a mi problema pero ninguna de las opciones que encontre aqui me ha funcionado, aqui les va mi problema:

Tengo un formulario con un dbgrid, el cual muestra el resultado de una consulta sql, todo lo hace correctamente, el problema es que al guardar, salir o limpiar el formulario, se quedan los datos en el dbgrid.

Ya probe desactivando el datasource y si lo limpia pero al hacer nuevamente la consulta no la muestra.
Espero haber sido clara. Gracias

P.D. conecto el dbgrid a un data source que a su vez esta conectado a un ibquery y esta a un ibdatabase y un ibtransaction.
Responder Con Cita
  #2  
Antiguo 03-03-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Question

Cita:
Empezado por lafourcade Ver Mensaje
...
Tengo un formulario con un dbgrid, el cual muestra el resultado de una consulta sql, todo lo hace correctamente, el problema es que al guardar, salir o limpiar el formulario, se quedan los datos en el dbgrid.

Ya probe desactivando el datasource y si lo limpia pero al hacer nuevamente la consulta no la muestra.
...
Podrías decirnos cómo guardas y limpias el formulario???
¿Con qué propósito haces la limpieza y para que te sirve?
Explicanos por favor con más detalles...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 03-03-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola lafourcade.

Para ejemplificar supongamos que ejecutas esta simple consulta:
Código Delphi [-]
  IBQuery1.Close;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT * FROM TU_TABLA'); 
  IBQuery1.Open;
Solo después de abierto el IBQuery verás los resultados en el DBGrid. (si no lo has abierto ya, en tiempo de diseño)

Para que el DBGrid deje de mostrar los datos, basta hacer:
Código Delphi [-]
  IBQuery1.Close;

Ahora, si para ocultar el resultado te decidís por usar:
Código Delphi [-]
   DBGrid1.DataSource:= nil; // (la consulta sigue abierta)
Para que la consulta vuelva a visualizarse en el DBGrid deberás usar algo como:
Código Delphi [-]
  DBGrid1.DataSource:= DataSource1;

Mientras el TDBGrid esté relacionado a un TDataSource a su vez relacionado a un TIBQuery activo, el DBGrid mostrará los resultados de la misma.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 07-03-2011
Avatar de lafourcade
lafourcade lafourcade is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 0
lafourcade Va por buen camino
Red face

Una disculpa no habia podido checar sus respuestas, para guardar los datos del formulario uso el sig. codigo:
Código Delphi [-]
procedure TForm12.Button1Click(Sender: TObject);
begin
if MessageDlg('DESEA GUARDAR EL TURNO',mtConfirmation, [mbYes, mbNo],0)=mrYes then
begin
    with DataModule1.ibquery1 do
     begin
      close;
      sql.clear;
      sql.Add('insert into C_TURNO(FECHA,TURNO,TOTAL,TOTAL_R,TOTAL_EF,TOTAL_CRE,TOTAL_GA,TOTAL_TAR )');
      sql.add('values(:fec,:tur,:tot,:totr,:tote,:totc,:totg,:tott)');
      paramByName('FEC').ASDATE:=DATETIMEPICKER1.date;
      paramByName('TUR').asstring:=COMBOBOX1.text;
      paramByName('TOT').ASFLOAT:=STRTOFLOAT(edit1.text);
      paramByName('TOTR').asFLOAT:=STRTOFLOAT(edit16.text);
      paramByName('TOTE').asFLOAT:=STRTOFLOAT(edit69.text);
      paramByName('TOTC').asfloat:=strtofloat(edit83.text);
      paramByName('TOTG').asfloat:=strtofloat(edit17.text);
      paramByName('TOTT').asfloat:=strtofloat(edit18.text);
      execsql;
      sql.Clear;
      sql.add('commit');
      execsql;
    end;
    showmessage('EL TURNO SE HA GUARDADO');
    //datamodule1.DataSource10.Enabled:=false;
    Datamodule1.IBQuery1.Close;
    DataModule1.IBQuery1.Open;
end;
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
edit5.Clear;
edit6.Clear;
edit7.Clear;
edit8.Clear;
edit9.Clear;
edit10.Clear;
edit11.Clear;
edit12.Clear;
edit13.Clear;
edit14.Clear;
edit15.Clear;
edit16.Clear;
edit17.Clear;
edit18.Clear;
edit19.Clear;
edit26.Clear;
edit27.Clear;
edit28.Clear;
edit29.Clear;
edit30.Clear;
edit83.clear;
 
end;

Lo q muestra en el dbgrid son concepto y total para obtener totc lo despliego en el edit 83 yes lo q guardo, los datos del dbgrid no los guardo ya que los tengo en otra tabla.

El hecho de limpiarlo es xq al entrar nuevamente al form se hace una nueva consulta y se tienen q desplegar datos nuevos.

Espero haber sido clara y me puedan ayudar.
Gracias

Última edición por Casimiro Notevi fecha: 07-03-2011 a las 20:40:05. Razón: Poner etiquetas [dephi]
Responder Con Cita
  #5  
Antiguo 08-03-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola lafourcade.

Si usas el mismo IBQuery para mostrar y guardar, los datos dejan de mostrarse en el DBGrid luego de realizar commit, ya que almacena
los cambios y finaliza la transacción actual.

De otro modo, si estas utilizando otro IBQuery para mostrar los datos, tendrías que abrirlo al entrar al form (OnShow por ej.) y cerrarlo
despues de realizado el commit o al salir del form (OnClose por ej.).


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-03-2011 a las 01:14:45.
Responder Con Cita
  #6  
Antiguo 08-03-2011
Avatar de lafourcade
lafourcade lafourcade is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 0
lafourcade Va por buen camino
Wink

Cita:
Empezado por ecfisa Ver Mensaje
...
De otro modo, si estas utilizando otro IBQuery para mostrar los datos, tendrías que abrirlo al entrar al form (OnShow por ej.) y cerrarlo
despues de realizado el commit o al salir del form (OnClose por ej.).

...
para desplegar los datos en el dbgrid si uso un ibquery diferente el codigo es el sig:

Código Delphi [-]
with DataModule1.IBQuery2 do
         begin
           close;
           sql.Clear;
           sql.add('SELECT NOMBRE, TOTAL from CREDITOS');
           sql.add('where FECHA=:d and TURNO=:i');
           params[0].asDATE:=DateTimePicker1.date;
           params[1].asinteger:=strtoint(Combobox1.Text);
           unprepare;
           prepare;
           open;
end;

Y si funciona la solucion q m diste pero mi pregunta es ¿Como hacer para q no sea necesario cerrar el Form? lo que quiero decir es q se puedan realizar las consultas sin q sea necesario cerrar el form para que las pueda mostrar.

Espero explicarme bien y no ser molesta con tantas dudas.
Responder Con Cita
  #7  
Antiguo 08-03-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola lafourcade.

Si no te entiendo mál, querés que el ingreso realizado se vea reflejado en el DBGrid sin tener que salir y entrar del form.

Entonces tendrías que agregar lo siguiente al código donde insertas:
Código Delphi [-]
procedure TForm12.Button1Click(Sender: TObject);
begin
      ....
      paramByName('TOTT').asfloat:=strtofloat(edit18.text);
      execsql;
      sql.Clear;
      sql.add('commit');
      execsql;
    end;
    DataModule1.IBQuery2.Close; 
    DataModule1.IBQuery2.Open;
    ...
end;
Por que la consulta lanzada en IBQuery2 es anterior a la inserción del nuevo dato, por lo tanto no esta actualizada.
(Si es necesario encapsula en un procedimiento el código donde asignas los valores a IQuery2 y llamalo en reemplazo de las dos
líneas agregadas.)

Si no entendí tu consulta por favor hacemelo saber, no molestas en absoluto

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-03-2011 a las 21:32:19.
Responder Con Cita
  #8  
Antiguo 09-03-2011
Avatar de lafourcade
lafourcade lafourcade is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 0
lafourcade Va por buen camino
Talking

hola ecfisa

mira lo q yo despliego en el dbgrid es de otra tabla llamada "creditos", y es con fines meramente informativos, ya que lo que guardo al presionar el boton, es el total de los creditos del dia, el cual se despliega en un edit.

Lo que yo quiero es que al guardar, el dbgrid quede en blanco para que al realizar una nueva consulta se desplieguen los "creditos" que se otrogaron ese nuevo dia, pero siguen apareciendo los de la consulta anterior, hasta que llega a la linea donde realiza la consulta entonces si cambia.

Auch creo q no m explique muy bien, sino fue asi hazmelo saber porfavor. Muchas gracias.

Última edición por lafourcade fecha: 09-03-2011 a las 22:14:33. Razón: mala puntuacion
Responder Con Cita
  #9  
Antiguo 09-03-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
Hola Lafourcade, complementando (o aclarando) lo que dicen nuestros compañeros de foro, creo que en tu codigo original (donde insertas el turno) te hace falta el código para "blanquear" o cerrar la tabla...


Código Delphi [-]
procedure TForm12.Button1Click(Sender: TObject);
begin
if MessageDlg('DESEA GUARDAR EL TURNO',mtConfirmation, [mbYes, mbNo],0)=mrYes then
begin
    with DataModule1.ibquery1 do
     begin
      close;
      sql.clear;
      sql.Add('insert into C_TURNO(FECHA,TURNO,TOTAL,TOTAL_R,TOTAL_EF,TOTAL_CRE,TOTAL_GA,TOTAL_TAR )');
      sql.add('values(:fec,:tur,:tot,:totr,:tote,:totc,:totg,:tott)');
      paramByName('FEC').ASDATE:=DATETIMEPICKER1.date;
      paramByName('TUR').asstring:=COMBOBOX1.text;
      paramByName('TOT').ASFLOAT:=STRTOFLOAT(edit1.text);
      paramByName('TOTR').asFLOAT:=STRTOFLOAT(edit16.text);
      paramByName('TOTE').asFLOAT:=STRTOFLOAT(edit69.text);
      paramByName('TOTC').asfloat:=strtofloat(edit83.text);
      paramByName('TOTG').asfloat:=strtofloat(edit17.text);
      paramByName('TOTT').asfloat:=strtofloat(edit18.text);
      execsql;
      sql.Clear;
      sql.add('commit');
      execsql;
    end;
    showmessage('EL TURNO SE HA GUARDADO');
    //datamodule1.DataSource10.Enabled:=false;
    Datamodule1.IBQuery1.Close;
    DataModule1.IBQuery1.Open;
end;
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
edit5.Clear;
edit6.Clear;
edit7.Clear;
edit8.Clear;
edit9.Clear;
edit10.Clear;
edit11.Clear;
edit12.Clear;
edit13.Clear;
edit14.Clear;
edit15.Clear;
edit16.Clear;
edit17.Clear;
edit18.Clear;
edit19.Clear;
edit26.Clear;
edit27.Clear;
edit28.Clear;
edit29.Clear;
edit30.Clear;
edit83.clear;


DataModule1.IBQuery2.Close; 

 
end;
Responder Con Cita
  #10  
Antiguo 09-03-2011
Avatar de lafourcade
lafourcade lafourcade is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 0
lafourcade Va por buen camino
Thumbs up

Siiiiiiiiiiiiiiiiiiiiiii

Justo estaba probando poner esa linea y si funciona Muchas gracias a todos los que me ayudaron.

Por aqui nos seguiremos leyendo.
Responder Con Cita
  #11  
Antiguo 09-03-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
hola de nuevo lafourcade,


Como aporte te comento que puedes "mejorar" tu codigo de limpieza de TEdits haciendo algo como:

for i := 0 to form1.ComponentCount - 1 do
if form1.Components[i] is TEdit then
(form1.Components[i] as TEdit).Text := '';

Lo anterior se explica asi:

Linea 1) Recorres con un for la lista de componentes de tu formulario (Form1 o como se llame)
Linea 2) Evaluas si el componente es un TEdit
Linea 3) Si cumple con la condición entonces cambias la propiedad text del componente: text:=''
o como en tu caso ejecutas un metodo Clear (Self.Components[i] as TEdit).Clear


Si no quieres borrar TODOS los controles TEdit, si no solamente una parte de ellos podrias valerte d ela propiedad Tag que tienen todos los controles, asi:

Para cada TEdit que tengas que limpiar, busca en el Object Inspector la propiedad Tag, que por defecto estará en cero y cambiala por cualquier valor, por ejemplo 3.. y modificas el codigo anterior con:

for i := 0 to form1.ComponentCount - 1 do
if form1.Components[i] is TEdit then
if (form1.Components[i] as TEdit).Tag = 3 then
(form1.Components[i] as TEdit).Text := '';


Por otro lado "me preocupa" que tengas un componente llamado Edit83... eso quiere decir que muy probablemente tu pantalla este llena de Edits y seria bueno que replantearas usar otro componente como un DbGrid, o un stringGrid para una captura masiva de datos... bueno no concemos tu codigo pero si nos comentas como es tu pantalla, (y si nos queda tiempo) te asesoramos...

un saludo,
Responder Con Cita
  #12  
Antiguo 09-03-2011
Avatar de lafourcade
lafourcade lafourcade is offline
Miembro
NULL
 
Registrado: ene 2011
Posts: 13
Poder: 0
lafourcade Va por buen camino
Talking

:S en realidad no son 83 de hecho ese num no se d donde salio pero tampoco son pokos, son 62 :O

por otro lado muchas gracias por tu consejo lo aplicare y lamentablemente no tengo permitido aun cargar imagenes siono subia la de mi form para que le echaras un vistazo y m dijeras q otra cosa puedo hacer.

Gracias y Saludos desde Veracruz, Mexico
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema: DBGrid con tabla Paradox deja espacios en blanco. (Delphi 7) DJerez Conexión con bases de datos 5 01-08-2008 08:06:14
DBGrid siempre con un registro en blanco Alfonsoft Conexión con bases de datos 0 05-08-2007 20:51:13
DBGrid en blanco después de consulta SQL. DarkByte Conexión con bases de datos 20 26-10-2005 22:45:21
Un negro y Un blanco Ambar Humor 4 24-03-2004 19:13:57
Porque me deja en blanco el DBGrid? judoboy Conexión con bases de datos 1 03-07-2003 10:00:56


La franja horaria es GMT +2. Ahora son las 17:04:44.


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