Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-05-2005
Fita Fita is offline
Miembro
 
Registrado: jul 2003
Ubicación: Pilar - Argentina
Posts: 216
Poder: 21
Fita Va por buen camino
No se refrescan las DBGrid ???

Hola a todos...

Tengo dos DBgrid enlazadas a dos IBDatasets.
La DBGrid1 muestra los datos del IBDataset1 cuya sql es:

Select * from alu000 where estado = 'A'

La DBGrid2 muestra los datos del IBDataset2 cuya sql es:

Select * from alu000 where estado = 'B'

La idea es que al hacer dobleclick en una de las DBGrid cambie el valor del campo "estado" a su valor opuesto, es decir si es 'A' pasa a 'B' y viceversa. Con esto deberían cambiar las dos DBGrid. Suponiendo la existencia de un solo registro, éste debería pasar de una DBgrid a otra... bueno; lo que sucede es que desaparece de una pero no aparece en la otra.

Para ello la Sql que se ejecuta al hacer doble click en la DBGrid1 es:

// como es estado = 'A' lo pasa a estado = 'B'
IBDataset1.selctsql.close;
IBDataeet1.selectsql.clear;
IBDataset1.selectsql.add('update alu000 set estado = :estado');
IBDataset1.parambyname('estado').asString := 'B';
IBDataset1.ExecSql;
IBTransaction1.Commit;

Sel_Alu_A; // procedure que contiene la sql que selecciona estado = 'A'
Sel_Alu_B; // procedure que contiene la sql que selecciona estado = 'B'

---------------------------------------------------------------------

Para la DBGrid2 al hacer doble click

// (muestra estado = 'B' ) lo pasa a estado = 'A'

IBDataset2.selctsql.close;
IBDataeet2.selectsql.clear;
IBDataset2.selectsql.add('update alu000 set estado = :estado');
IBDataset2.parambyname('estado').asString := 'A';
IBDataset2.ExecSql;
IBTransaction2.Commit;

Sel_Alu_A; // procedure que contiene la sql que selecciona estado = 'A'
Sel_Alu_B; // procedure que contiene la sql que selecciona estado = 'B'

// Cuando abro el form se ejecutan las sql
Procedure Form.Create;
begin
Sel_alu_A;
Sel_Alu_B;

end;

Ya he probado con el DBGrid.Refresh y otras cosas... sólo funciona cuando cierro el formulario y lo habro nuevamente; lo que significa que algo estoy pasando por alto y no sé que es...

Alguna idea ???

Gracias por adelantado
Fita
Responder Con Cita
  #2  
Antiguo 02-05-2005
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Por lo que pude ver cierras pero no abres los dataset, porq no pruebas esto

Código Delphi [-]
// como es estado = 'A' lo pasa a estado = 'B'
IBDataset1.selctsql.Active := False;
IBDataeet1.selectsql.clear;
IBDataset1.selectsql.add('update alu000 set estado = :estado');
IBDataset1.parambyname('estado').asString := 'B';
IBDataset1.ExecSql;
IBTransaction1.Commit;
IBDataset1.selctsql.Active := True;

de pronto si posteas el codigo de Sel_Alu_A y Sel_Alu_B te podriamos ayudar un poco mas
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 03-05-2005
Fita Fita is offline
Miembro
 
Registrado: jul 2003
Ubicación: Pilar - Argentina
Posts: 216
Poder: 21
Fita Va por buen camino
Gracias por tu respuesta, he probado pero no funciona.
Estos son los procedimientos:

procedure Sel_Alu_A;
begin
IBDataset1.close;
IBDataset1.selectsql.clear;
IBDataset1.selectsql.add('select * from alu000 where estado = ');
IBDataset1.selectsql.add(' quotedstr('A') );
IBDataset1.open;
end;

procedure Sel_Alu_B;
begin
IBDataset2.close;
IBDataset2.selectsql.clear;
IBDataset2.selectsql.add('select * from alu000 where estado = ');
IBDataset2.selectsql.add(' quotedstr('B') );
IBDataset2.open;
end;

Se trata de un sistema para colegios, a medida que navegas por las familias los dos DBgrid en cuestion muestran los hijos (alumnos) que concurren al establecimiento. Un DBGRid muestra los que concurren (estado = 'A') y el otro muestra los que ya egresaron o se fueron (estado = 'B').
Pasa que siempre hay alguno que vuelve o que se va; por eso al hacer doble click lo reactiva con todos sus datos, solo le cambia el estado de 'B' a 'A' y viceversa.
El update lo hace bien y luego disparo los procedures Sel_Alu_A y Sel_alu_B para que recomponga los dos DBgrids.
Por ejemplo: si doy de baja un alumno, desaparece del dbgrid1 pero no aparece en el dbgrid2; ahora si navego por las familias el dbgrid2 muestra los que estan de baja de cada familia, se entiende? es como que afecta solamente al registro modificado, ese NO LO VE; a menos que cierre el formulario e ingrese nuevamente, ahi si refleja el cambio.
Me parece que la cosa viene por el lado de la Transaccion pero que?

Saludos
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 11:38:43.


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