Cita:
Empezado por GOG
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; end else begin ShowMessage('Archivo ocupado... Aguarde un insante e intente nuevamente.');
end;
FAguarde.Close;
end;