Hola amigos.
Trabajo con: IBX, WIN10, FB 2.0, DELPHI6
El tema que quiero q me auxilien es sobre TRANSACTION. Tengo el siguiente código que me funciona en 1 equipo, pero si se quiere consultar en otro equipos los datos que se capturaron, no se muestran....el código funciona pero solo en el equipo donde se hizo los movimientos.
Código Delphi
[-]
procedure TfrmRegComanda.sBtnEnviarClick(Sender: TObject);
var
i,NvaComanda:Integer;
f:TForm;
begin
sBtnEnviar.Enabled:=False;
frmMeseroMain.btnCancelClick:=0;
if frmMeseroMain.nRegID=0 then begin
frmMeseroMain.qryGenerator.Close;
frmMeseroMain.qryGenerator.Open;
frmMeseroMain.nRegID:=frmMeseroMain.qryGenerator.FieldByName('ID').AsInteger;
NvaComanda:=1;
dsCM.Open;
dsCM.Append;
dsCM.FieldByName('COMANDA_ID').AsInteger:=frmMeseroMain.qryGenerator.FieldByName('ID').AsInteger;
dsCM.FieldByName('COMANDA_NUM_MESA').AsString:=IntToStr( frmMeseroMain.NumMesa );
dsCM.FieldByName('COMANDA_MESA_LETRA').AsString:=''; dsCM.FieldByName('COMANDA_ESTATUS').AsString:='A';
dsCM.FieldByName('COMANDA_EMP_ID').AsString:=frmMeseroMain.vNumEmpl;
dsCM.FieldByName('COMANDA_N_PERSONAS').AsString:='0'; dsCM.Post;
end;
for i:=1 to SG.RowCount-1 do
begin
if SG.Cells[6,i]='*' then
begin
dsCD.Open;
dsCD.Append;
dsCD.FieldByName('COMANDA_ID').AsInteger:=frmMeseroMain.nRegID;
dsCD.FieldByName('COMANDA_D_CONSEC').AsString:=SG.Cells[0,i];
dsCD.FieldByName('PRODUCTO_ID').AsString:=SG.Cells[1,i];
dsCD.FieldByName('COMANDA_DESCR_PROD').AsString:=SG.Cells[2,i];
dsCD.FieldByName('COMANDA_D_CANT').AsString:=SG.Cells[3,i];
dsCD.FieldByName('COMANDA_D_PRECIO').AsFloat:=0.0;
dsCD.FieldByName('COMANDA_STAT_COCINA').AsString:='*';
dsCD.FieldByName('COMANDA_DESCR_PROD_MODIF').AsString:=SG.Cells[2,i];
dsCD.Post;
end;
end;
if not(DM.trsComanda.InTransaction) then
begin
DM.trsComanda.StartTransaction;
end;
try
if NvaComanda=1 then
dsCM.ApplyUpdates;
dsCD.ApplyUpdates;
DM.trsComanda.Commit;
qryCocina.Close;
qryCocina.ParamByName('COMANDA_ID').AsInteger:=frmMeseroMain.nRegID;
qryCocina.Open;
if not(qryCocina.IsEmpty) then
begin
qryCocina.First;
While not(qryCocina.Eof) do
begin
qryImpresora.Close;
qryImpresora.SQL.Clear;
qryImpresora.SQL.Add('select * '+
'from impresora i '+
'where i.impresora_id=:impresora');
qryImpresora.ParamByName('IMPRESORA').AsInteger:=qryCocina.FieldByName('TIPO_COCINA').AsInteger;
qryImpresora.Open;
qrTCKCaliente.QuickRep1.PrinterSettings.PrinterIndex:=Printer.Printers.IndexOf(qryImpresora.FieldByN ame('IMPRESORA_NOMBRE').AsString);
qrTCKCaliente.qryDatos.Close;
qrTCKCaliente.qryDatos.ParamByName('COMANDA').AsInteger:=frmMeseroMain.nRegID;
qrTCKCaliente.qryDatos.ParamByName('TIPO_COCINA').AsInteger:=qryCocina.FieldByName('TIPO_COCINA').As Integer;
qrTCKCaliente.qryDatos.Open;
qrTCKCaliente.QuickRep1.Print;
qryCocina.Next;
end;
end;
DM.trsComanda.Active:=False;
DM.trsComanda.StartTransaction;
spActualizaCocina.Prepare;
spActualizaCocina.ParamByName('I_COMANDA_ID').AsInteger:=frmMeseroMain.nRegID;
spActualizaCocina.ExecProc;
Application.MessageBox('Comanda enviada a COCINA','Aviso', mb_ok+mb_IconInformation);
DM.trsComanda.Commit;
Close;
except
on E:Exception do
begin
DM.trsComanda.Rollback;
Application.MessageBox('No se pudo grabar la comanda, por favor tome nota del mensaje que a continuación se mostrará y repórtelo con el técnico programador.','Aviso',mb_ok+mb_IconError);
ShowMessage(E.Message);
Close;
end;
end;
end;
Los registros son grabados, pero no se muestran en otros equipos...solo si se desconectan de la B.D y se vuelven a conectar.
He consultado varios hilos, y he hecho los cambios que en ellos comentan, los cuales ya los aplique y efectivamente, ya graba los datos....pero no puedo verlos en otro equipo.
Tengo el componente IBTransaction (con la B.D. asignada correctamente en "DefaultDatabase") en su propiedad "AutoStopAction:=saCommit" y el "DefaultAction = TACommit". Tengo montado una Red LAN en casa de 3 equipos, 1 que funge como servidor y 2 equipos cliente que son lo que estoy usando para las pruebas.
Sinceramente no entiendo porque los movimientos no se pueden ver de manera inmediata si ya se están grabados en la BD.
Espero me puedan ayudar.
Saludos.