Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2006
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Problemas con Bloqueos en IBX

Uso CachedUpdate en los ibDataset's
En Parámetros del ibTransaction tengo lo siguiente:
Código Delphi [-]
  read_committed
  rec_version
  nowait

Tengo una Tabla de Consecutivos de Folios donde llevo el control, pongo un ejemplo:
DOCUM SERIE FOLIOFISCAL
FACT FM 344488 /*FACTURAS*/
FACT PM 5509 /*COTIZACIONES*/
FACT RM 24456 /*REMISIONES*/

Tengo 1 problema que me tiene muy preocupado ya hace varios meses atras con mi Aplicación de Facturación, el problema que tengo es que si mandan a Guardar Facturas más de 2 Clientes, alguno de estos clientes solo Imprime la Factura pero no la guarda. Pongo el Siguiente ejemplo de la forma que lo implemento al momento de Guardar una Factura:
Código Delphi [-]
  // Tomar último FOLIOFISCAL de Factura en Tabla de Consecutivos
  while true do
    try
      FolioFinal:=0;
      {Procedimiento Almacenado para Tomar Último Folio y al 
       Regresarlo Aumenta dicho Folio en la Tabla Consecutivos, 
       AQUI SE PRODUCE EL BLOQUEO AL REGISTRO, POR LO TANTO 
       SI HUBIESE OTRO CLIENTE QUE GUARDE FACTURA 
       AQUI SE QUEDA DANDO VUELTAS HASTA QUE SE DESBLOQUEE}
       FolioFinal:=DameFolioFiscal
       ('GRABA_FOLFISCAL','DOCUM','SERIE','FACT',Serie,'FOLIOFISCAL');
       Maestro.FieldByName('FOLIOFISCAL').value:=FolioFinal;
       //Asegurar Folio
       if FolioFinal > 0 then
         break;
     except
       {Damos 5 Segundos para que se desbloquee, 
         en caso de que siga  bloqueado, damos otra pasada, 
         es decir sigue el ciclo hasta que se Desbloquee}
       Sleep(5000);
     end;
     
     //Imprimimos Factura
     Imprimir;
 
     //Grabamos Cambios y Aceptamos Transacción
     try
       if Detalle.UpdatesPending then
         Detalle.ApplyUpdates;
       if Maestro.UpdatesPending then
         Maestro.ApplyUpdates;
       //Aceptar Transacción
       Transaccion.CommitRetaining;
     except
       on E:Exception do
         //Mostramos Error
         MensajesW(PChar(e.message),'Error al Guardar',MB_ICONERROR);
     end;
El Problema de que sólo Imprime la Factura y NO la GUARDA es que al llegar a Aplicar los Cambios con ApplyUpdate es donde se produce el siguiente error:

lock conflict on no wait transaction
deadlock
update conflicts with concurrent update


Este ERROR indica que 2 ó más Clientes quieren accesar al mismo registro es por eso que se produce este error pero lo que no me Explico es que Porque Diablos lo marca porque supuestamente ARRIBA ya dejo Bloqueado el Registro, ya hice pruebas Compilando la Aplicación paso por paso(F8) en 2 PC's con DELPHI(Compilando cada una al mismo tiempo) y una tercera PC sin Delphi tomando el papel de un cliente normal, y realize pruebas TODO el día Accesando al mismo tiempo cuando toman el FolioFiscal, pero Todo funcionó a la Perfección, Siempre llegaba 1 CLIENTE a Bloquear dicho registro y las demás se esperaba a que se desocupará, se desbloqueaba el registro y otro cliente lo bloqueaba y asi sucesivamente.

Espero que a alguien le haya pasado lo mismo, y ojala me pudieran ayudar con este problema que me tiene SuperEnbroncado con el programa.

Que tengan buen día.
Responder Con Cita
  #2  
Antiguo 14-01-2006
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
????

Le aplique una pequeña prueba al IBDatabase después de haberse conectado y haber iniciado Transacción el IBTransaction:
Código Delphi [-]
showmessage( BoolToStr(IbBD.HandleIsShared));

Me regreso 0 indicando que es FALSE, será este el motivo????
El Problema es que HandleIsShared es de sólo LECTURA

Última edición por AGAG4 fecha: 14-01-2006 a las 20:59:42.
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
Que componentes utilizar en vez de IBX ? lbuelvas Conexión con bases de datos 5 12-11-2009 09:51:07
BDE, ODBC, ADO, IBX, Comp. nativos. Cual? adlfv Conexión con bases de datos 6 06-09-2005 17:39:47
Problemas con la cache usando IBX glopez Firebird e Interbase 5 01-09-2004 17:07:52
Problemas de caché con CachedUpdates y OnUpadateRecord (con IBX) Halfo Firebird e Interbase 0 04-08-2004 13:59:38
Como evitar problemas de bloqueos o actualizacion de registros en red? IcebergDelphi Firebird e Interbase 2 14-06-2003 05:33:03


La franja horaria es GMT +2. Ahora son las 20:50:00.


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