PDA

Ver la Versión Completa : Problemas con Firebird y DBGrid


RoyTan
06-04-2012, 15:49:33
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.

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:
ModuloDatos.IBQAgenda.Open;

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

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
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
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:

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.