Código Delphi
[-]
with Modulo.DMBox.FDQCategoria do
begin
Close;
Lo anterior cierra el dataset
Modulo.DMBox.FDQCategoria.
Código Delphi
[-]
Open;
BD_Codigo:=FieldByName('codigo').AsString;
if IsEmpty then
begin
Close;
Lo anterior también cierra el dataset
Modulo.DMBox.FDQCategoria.
Código Delphi
[-]
SQL.Add('insert into inv_gpo_prod ("codigo","descripcion","clasificacion","lote","observacion","status")');
SQL.Add('values (:c,:d,:clasif,:l,b,:s)');
Param_Guardar;
ExecSQL; DMBox.FDConexion.Commit;
El método ExecSQL no abre un dataset, solo ejecuta la instrucción SQL definida.
Suponiendo que el dataset al cual le estás haciendo Refresh es
Modulo.DMBox.FDQCategoria no hay forma de que esté activo, pues no solo lo cierras explicitamente varias veces sino que ademas cambias la instruccion sql a
Insert o
Update lo que bajo ninguna circunstancia abre un dataset.
Por otra parte,
suponiendo que el dataset al cual le haces Refresh NO es
Modulo.DMBox.FDQCategoria, quizás el problema te lo esté generando la instrucción Commit, particularmente si la base de datos es Interbase o Firebird. En estas dos bases de datos una instrucción Commit, o Rollback, no solo finaliza la transacción sino que además se cierran todos los dataset asociados a la transacción, por lo que muchos programadores hacen uso de la instrucción CommitRetaining para solventar esta dificultad.