Ver Mensaje Individual
  #13  
Antiguo 07-02-2019
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 221
Reputación: 16
orodriguezca Va por buen camino
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; // Esto no abre el dataset
     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.
Responder Con Cita