Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2021
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
StartTransaction, funciona solo en el equipo donde se hizo los movimientos.

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 //CUANDO ES NUEVA COMANDA nRegID SERÁ IGUAL A CERO
    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:='';//frmAbrirMesas.cbxLetra.Text; //sLetra;
        dsCM.FieldByName('COMANDA_ESTATUS').AsString:='A';
        dsCM.FieldByName('COMANDA_EMP_ID').AsString:=frmMeseroMain.vNumEmpl;
        dsCM.FieldByName('COMANDA_N_PERSONAS').AsString:='0';//frmAbrirMesas.mskNumPersonas.Text;
        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;

        {*********************************************************************
         ***    PROCESO PARA IMPRIMIR EL TICKER A LAS DIFERENTES COCINAS   ***
         ***    EN 3 DIFERENTES IMPRESORAS TERMICAS                        ***
         *********************************************************************}
        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.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 17-10-2021 a las 19:20:34.
Responder Con Cita
  #2  
Antiguo 17-10-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En tu código hay un "mejunje" que no podemos descifrar si no tenemos acceso a ver todos los parámetros de cada dataset, componente, transacción, etc.
Te aconsejo que hagas un simple programa de pruebas con un dataset.
Cuando lo tengas controlado entonces podrás implementarlo en tu programa.
Responder Con Cita
  #3  
Antiguo 18-10-2021
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
En tu código hay un "mejunje" que no podemos descifrar si no tenemos acceso a ver todos los parámetros de cada dataset, componente, transacción, etc.
Te aconsejo que hagas un simple programa de pruebas con un dataset.
Cuando lo tengas controlado entonces podrás implementarlo en tu programa.
Ok. Gracias Casimiro.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #4  
Antiguo 08-11-2021
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
commit solo funciona en un equipo

No Conosco los componentes ibx, pero de pronto este comentario te sirve
el computador "A" ejecuta la consulta select tabla xxxy y la tiene en l pantalla
el computador "B" hace cambios en la tabla xxxy
para que el computador "A" vea los cambios realizados en el computador "B" debe cerrar la consulta (query close, commit,rollback) si no tienes autocommit y abrir de nuevo la consulta
saludes desde Cali
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Instalar solo ejecutable en un equipo zugazua2001 Varios 4 17-06-2011 04:50:05
Desde otra aplicacion saber en donde se hizo clik rastafarey API de Windows 3 23-03-2009 21:55:39
Error 1400 en un sólo equipo. Gabo Varios 2 07-11-2007 11:13:25
Solo funciona en mi equipo. Qué archivos faltan en los pc's cliente??? albeiro_ospina Servers 5 02-02-2007 00:23:52
suma total de todos los movimientos en movimientos agustincs Conexión con bases de datos 17 25-08-2004 19:37:50


La franja horaria es GMT +2. Ahora son las 12:46:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi