Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas con Firebird y DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=78299)

RoyTan 06-04-2012 15:49:33

Problemas con Firebird y DBGrid
 
Saludos, mi consulta es la siguiente.
Con la inserción de datos no tengo problemas, el problema es cuando regreso al formulario donde tengo el DBGrid, los datos que había han desaparecido.
Lo que quiero decir es que cada vez que hago una inserción en la base de datos, los datos del DBGrid desaparecen, he probado refrescando el DBgrid pero nada, sigue sin mostrarlo.
Este es el código, no se si he hecho algo mal, lo mio no es SQL.

Gracias.

Código Delphi [-]
procedure TF_AAgenda.BAnadirClick(Sender: TObject);
begin
     if trim(ECodigo.Text)  = '' then
      Begin
       ShowMessage('El campo CODIGO no puede quedar vacío.');
       ECodigo.SetFocus;
      End
     else
      Begin
       ModuloDatos.IBQAgenda.Close;
       ModuloDatos.IBQAgenda.SQL.Text := 'insert into AGENDA Values(:p1,:p2,:p3)';

       ModuloDatos.IBQAgenda.ParamByName('p1').AsInteger  := StrToInt(ECodigo.Text);
       ModuloDatos.IBQAgenda.ParamByName('p2').AsDate     := MEFechaA.Date;
       Modulodatos.IBQAgenda.ParamByName('p3').AsString    := EDescripcion.Text;

       ModuloDatos.IBQAgenda.ExecSQL;
       ModuloDatos.IBQAgenda.Open;
       ShowMessage('Registro insertado con Exito');
      End;
end;

Caral 06-04-2012 16:04:35

Hola
Me parece que el dbgrid esta ligado a IBQAgenda, al hacer el insert cambias el texto del sql y pretendes ejecutarlo y luego abrirlo.
Si estas usando el mismo query tienes que re-escribir el sql.
Saludos

Casimiro Notevi 06-04-2012 17:05:30

Sobra esta línea:
Código Delphi [-]
ModuloDatos.IBQAgenda.Open;

Y tendrás que confirmar la transacción, algo así como:

Código Delphi [-]
ModuloDatos.IBQAgenda.transaction.commitretaining;


Y recuerda poner un título más descriptivo a tus preguntas, gracias :)

RoyTan 12-04-2012 09:30:49

Gracias a todos.
No he contestado antes porque me quedé sin linea.

Gracias voy a probar.

RoyTan 12-04-2012 09:39:24

Código Delphi [-]
procedure TF_AAgenda.BAnadirClick(Sender: TObject);
begin
     if trim(ECodigo.Text)  = '' then
      Begin
       ShowMessage('El campo CODIGO no puede quedar vacío.');
       ECodigo.SetFocus;
      End
     else
      Begin
       ModuloDatos.IBQAgenda.Close;
       ModuloDatos.IBQAgenda.SQL.Text := 'insert into AGENDA Values(pb1,pb2,pb3)';

       ModuloDatos.IBQAgenda.ParamByName('pb1').AsInteger  := StrToInt(ECodigo.Text);
       ModuloDatos.IBQAgenda.ParamByName('pb2').AsDate     := MEFechaA.Date;
       Modulodatos.IBQAgenda.ParamByName('pb3').AsString   := EDescripcion.Text;

       ModuloDatos.IBQAgenda.ExecSQL;
       ModuloDatos.IBQAgenda.transaction.commitretaining;
       ShowMessage('Registro insertado con Exito');
      End;
end;

Ya he hecho la modificación y nada sigue sin aparecer los datos en el grid.

Y lo siento Caral no entiendo lo que quieres decir.

Gracias.

Casimiro Notevi 12-04-2012 10:51:05

Código Delphi [-]
ModuloDatos.IBQAgenda.SQL.Text := 'insert into AGENDA Values(:bb1,:bb2,:bb3)';
Los parámetros llevan "dos puntos" delante.

ecfisa 12-04-2012 11:05:50

Hola RoyTan.

Seguramente estés utilizando el mismo TIBQuery para insertar y mostrar, probá de este modo:
Código Delphi [-]
procedure TF_AAgenda.BAnadirClick(Sender: TObject);
var
  SQLStrTmp: string;
begin
  if trim(ECodigo.Text)  = '' then
  Begin
    ShowMessage('El campo CODIGO no puede quedar vacío.');
    ECodigo.SetFocus;
  End
  else
  Begin
    (* Salvar valor consulta inicial *)
    SQLStrTmp:= ModuloDatos.IBQAgenda.SQL.TExt; 

    ModuloDatos.IBQAgenda.Close;
    ModuloDatos.IBQAgenda.SQL.Text := 'insert into AGENDA Values(:pb1,:pb2,:pb3)';
    ModuloDatos.IBQAgenda.ParamByName('pb1').AsInteger  := StrToInt(ECodigo.Text);
    ModuloDatos.IBQAgenda.ParamByName('pb2').AsDate     := MEFechaA.Date;
    Modulodatos.IBQAgenda.ParamByName('pb3').AsString   := EDescripcion.Text;
    ModuloDatos.IBQAgenda.ExecSQL;
    ModuloDatos.IBQAgenda.Transaction.CommitRetaining;

    (* Restaurar valor consulta inicial *)
    ModuloDatos.IBQAgenda.Close;
    ModuloDatos.IBQAgenda.SQL.Text:= SQLStrTmp
    ModuloDatos.IBQAgenda.Open;

    ShowMessage('Registro insertado con Exito');
  End;
end;

Saludos.

RoyTan 12-04-2012 12:38:43

Si efectivamente estoy utilizando el mismo query, y ahora al ejecutar el código me da este error "Empty SQL statement"

RoyTan 12-04-2012 12:41:27

Efectivamente ecfisa tu código funciona perfectamente.

Muchas gracias a todos.


La franja horaria es GMT +2. Ahora son las 00:02:35.

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