Ver Mensaje Individual
  #4  
Antiguo 27-02-2017
GOG GOG is offline
Miembro
 
Registrado: abr 2008
Posts: 17
Reputación: 0
GOG Va por buen camino
Cita:
Empezado por GOG Ver Mensaje
Gracias Agustín por tu respuesta y tus observaciones, las voy a tener en cuenta !!!
El tema del error es así, cuando graba el primero (de los dos usuarios con los que probé) sale todo bien, termina el proceso y cierra el formulario como se esperaba, pero cuando graba el otro, hace el ADOConection1.CommitTrans, dice que terminó el proceso, pero luego aparece el error: "Ha intentado confirmar o deshacer una transacción sin iniciar una antes"...
Agrego el código (espero que más fácil de leer...)


Código Delphi [-]
procedure TFIng.BGrabarClick(Sender: TObject);
var largoCod: Integer;
begin
  FAguarde.Show;
  FAguarde.Refresh;
  DM1.Movim.Active:= true;
  DM1.Ingresos.Active:= true;
  DM1.Stock.Active:= true;

  LargoCod:= Length(Table1TM1CHR1.AsString) - 9;
  Table1.First;
  if DM1.ADOConnection1.InTransaction = false then
  begin
    If MessageDlg('Confirma el Ingreso? ',mtConfirmation,[mbYes,mbNo],0) = mrYes then
    begin
      try
        DM1.Ingresos.IndexFieldNames:= 'INGNRO';
        DM1.Ingresos.Last;
        EdNro.Text:= InttoStr(DM1.IngresosINGNRO.AsInteger + 1);
      except
        EdNro.Text:= '1';
      end;
      try
        DM1.ADOConnection1.BeginTrans;
        while not Table1.Eof do
        begin
          FAguarde.L1.Caption:= 'Grabando datos en Ingresos...';
          FAguarde.L1.Refresh;
          DM1.Ingresos.Append;
          DM1.IngresosINGNRO.AsInteger:=  StrToInt(EdNro.Text);
          DM1.IngresosINGNIV.AsInteger:=  Nivel;
          DM1.IngresosINGOPE.AsInteger:=  Opera;
          DM1.IngresosINGFEC.AsDateTime:= StrToDate(EdFec.Text);
          DM1.IngresosINGHOR.AsDateTime:= Time;
          DM1.IngresosINGLOT.AsString:=   LeftStr(Table1TM1CHR1.AsString, 5);
          DM1.IngresosINGCOD.AsString:=   MidStr(Table1TM1CHR1.AsString, 6, LargoCod);
          DM1.IngresosINGCMCT.AsString:=  Table1TM1CHR1.AsString;
          DM1.IngresosINGCOS1.AsFloat:=   Table1TM1PRE1.AsFloat;
          if Depo = 1 then
             DM1.IngresosINGCAN1.AsFloat:= Table1TM1NUM1.AsFloat;
          if Depo = 2 then
             DM1.IngresosINGCAN2.AsFloat:= Table1TM1NUM1.AsFloat;
          DM1.Ingresos.Post;

          if DM1.Stock.Locate('ARTCMCT',Table1TM1CHR1.AsString,[]) = true then
          begin
             FAguarde.L1.Caption:= 'Actualizando Stock...                 ';
             FAguarde.L1.Refresh;
             DM1.Stock.Edit;
             DM1.StockARTFEC1.AsDateTime:=  StrToDate(EdFec.Text);
             if Depo = 1 then
               DM1.StockARTEX1.AsFloat:= DM1.StockARTEX1.AsFloat + Table1TM1NUM1.AsFloat;
             if Depo = 2 then
               DM1.StockARTEX2.AsFloat:= DM1.StockARTEX2.AsFloat + Table1TM1NUM1.AsFloat;
             DM1.StockARTFEC1.AsDateTime:=  StrToDate(EdFec.text);
             DM1.Stock.Post;
          END;


          FAguarde.L1.Caption:= 'Actualizando en Movimientos...              ';
          FAguarde.L1.Refresh;
          DM1.Movim.Append;
          DM1.MovimMOVFEC.AsDateTime:= Date;
          DM1.MovimMOVHOR.AsDateTime:= Time();
          DM1.MovimMOVLOT.AsString:=   LeftStr(Table1TM1CHR1.AsString, 5);
          DM1.MovimMOVCOD.AsString:=   MidStr(Table1TM1CHR1.AsString, 6, LargoCod);
          DM1.MovimMOVCMCT.AsString:=  Table1TM1CHR1.AsString;
          if Depo = 1 then
            DM1.MovimMOVCAN1.AsFloat:= Table1TM1NUM1.AsFloat;
          if Depo = 2 then
            DM1.MovimMOVCAN2.AsFloat:= Table1TM1NUM1.AsFloat;
          DM1.MovimMOVNRO.AsInteger:=  StrToInt(EdNro.Text);
          DM1.MovimMOVTIP.AsString:=   'I';
          DM1.MovimMOVOBS.AsString:=   'Por Ingreso Nro. ' + EdNro.Text;
          DM1.Movim.Post;

          Table1.Next;
        end;

        DM1.ADOConnection1.CommitTrans;
        FAguarde.Close;
        ShowMessage('Proceso Terminado.');
        RB1.Checked:= false;
        RB2.Checked:= false;
        BCerrarClick(nil);
      except
        DM1.ADOConnection1.RollbackTrans;
        FAguarde.Close;
        ShowMessage('No se pudo completar el proceso.');
      end;
    end;  // del si confirma...
  end else begin //del InTransaction
    ShowMessage('Archivo ocupado... Aguarde un insante e intente nuevamente.');
  end;

  FAguarde.Close;

end;

Última edición por Neftali [Germán.Estévez] fecha: 27-02-2017 a las 08:47:21. Razón: Añadir TAG's
Responder Con Cita