Club Delphi  
    Paypal   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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-03-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.616
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Esmeralda.

Intenta usar el nivel de aislamiento (propiedad Isolation) xiReadCommitted, en lugar de xiDirtyRead. Aquí puedes ver el significado de las distintas opciones: http://docwiki.embarcadero.com/Libra...ions.Isolation

Por cierto, mencionas que usas un motor SQL, enhorabuena. Pero ¿es Firebird, Oracle, MS SQL Server...? El primero de ellos es uno de los más recomendables para trabajar con Delphi y muy bueno en general.

Por otro lado, toma muy en cuenta la recomendación de Nelson.

Saludos.
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas.
Responder Con Cita
  #2  
Antiguo 11-03-2015
Esmeralda Ramos Esmeralda Ramos is offline
Registrado
NULL
 
Registrado: mar 2015
Posts: 9
Poder: 0
Esmeralda Ramos Va por buen camino
Nelson gracias por el aporte.
Actualmente utilizo sql server 2005. No he estudiado Firebird pero me pondré a estudiar el tema.
Voy a intentar con propiedad Isolation xiReadCommitted y liberar versión del sistema. Mañana platico cuales fueron los resultados.
Realmente me intriga el tema por que no me habia sucedido y además me genera bloqueos en el sistema.
Responder Con Cita
  #3  
Antiguo 11-03-2015
Esmeralda Ramos Esmeralda Ramos is offline
Registrado
NULL
 
Registrado: mar 2015
Posts: 9
Poder: 0
Esmeralda Ramos Va por buen camino
Este es el tipo de bloqueo que se me presentan en el sistema con versión firedac lo que no sucedia con el bde.
Imágenes Adjuntas
Tipo de Archivo: jpg Bloqueo.jpg (6,1 KB, 24 visitas)
Responder Con Cita
  #4  
Antiguo 11-03-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 18
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
La imagen es muy chica y no se ve nada :P

Inicias transacciones y las cerras debidamente? Podrias mostrar la parte en que abris y cerras las transacciones?

Lo digo porque un compañero tenia un "problema" similar al tuyo y decia que todo era una "m..." y hacia algo como esto

Código Delphi [-]
procedure TForm1.Button1Click..
begin
  IniciarTransaccion;
end;

procedure TForm1.Button2Click..
begin
  try
    with Tabla_Clientes do
    begin
      FieldByName('Nombre').AsString := EditNombre.Text;
      FieldByName('Apellido').AsString := EditApellido.Text;
    end;
      Commit;
    except
       Rollback;
   end;
end;

Una transaccion de insercion o borrado de registro deberia llevar unos cuantos milisegundos, a no ser que dispares millones de triggers, no deberia pasarte lo de A bloquea a B

Pero ahora en el codigo que yo puse antes, el tipo iniciaba la transaccion con un boton, y la cerraba con otro. Que pasa si tocan el button1 y se van a tomar su cafecito?
Responder Con Cita
  #5  
Antiguo 11-03-2015
Esmeralda Ramos Esmeralda Ramos is offline
Registrado
NULL
 
Registrado: mar 2015
Posts: 9
Poder: 0
Esmeralda Ramos Va por buen camino
Si perdon adjunto la imagen en un .zip, cambie insolation a xiReadCommitted pero esta mañana me presento el mismo problema.
Lo que note es que Cuando un usuario a esta modificando una Orden de Pago se realizan una serie de select para que puedan elegir los datos por ejemplo el tipo de impuesto.
Y si en ese mismo instante otro usuario b esta intentando eliminar un registro de una orden de pago es bloqueado por el usuario "a" hasta que este termina.
las transacciones las realizo de la siguiente manera y estan en un mismo evento en el boton aceptar:
Código Delphi [-]
procedure TfrmOrdenPagoEdicion.BitBtn3Click(Sender: TObject);
begin
try
    dmModulo.CNDHBD.StartTransaction;

    qryActualiza:=Tadquery.Create(self);
    qryActualiza.Connection:= dmModulo.CNDHBD;


    qryActualiza.close;
    qryActualiza.sql.text:=' Delete from OrdenPagoPresupuesto where AñoOrdenPago = :Ao and OrdenPago = :OP and documento = :documento '+
                           '  and UnidadResponsable = :UR '+
                           '  and AñoEstructuraProgramatica = :AOE and EstructuraProgramatica = :EP and Area = :Area and '+
                           ' ClavePresupuestal = :CP and Mes = :Mes ';
     qryActualiza.parambyname('AO').asinteger:= strtoint(vgAoOP);
     qryActualiza.parambyname('OP').asinteger:= strtoint(vgOP);
     qryActualiza.parambyname('Documento').asinteger:= qryOrdenPagoPresupuesto.fieldbyname('Documento').asinteger;
     qryActualiza.parambyname('UR').asinteger:= qryOrdenPagoPresupuesto.fieldbyname('UnidadResponsable').asinteger;
     qryActualiza.parambyname('AOE').asinteger:= qryOrdenPagoPresupuesto.fieldbyname('AñoEstructuraProgramatica').asinteger;
     qryActualiza.parambyname('EP').asinteger:= qryOrdenPagoPresupuesto.fieldbyname('EstructuraProgramatica').asinteger;
     qryActualiza.parambyname('Area').asinteger:= qryOrdenPagoPresupuesto.fieldbyname('Area').asinteger;
     qryActualiza.parambyname('CP').asinteger:= qryOrdenPagoPresupuesto.fieldbyname('ClavePresupuestal').asinteger;
     qryActualiza.parambyname('Mes').asinteger:= qryOrdenPagoPresupuesto.fieldbyname('Mes').asinteger;

     qryActualiza.ExecSQL;

    dmModulo.CNDHBD.Commit;

except
       dmModulo.CNDHBD.Rollback;
       raise;
 end;
end.
Esta falla se presento desde que cambie el engine por firedac.
Muchas gracias por la ayuda

Última edición por nlsgarcia fecha: 11-03-2015 a las 17:27:31. Razón: Sintaxis Delphi
Responder Con Cita
  #6  
Antiguo 11-03-2015
Esmeralda Ramos Esmeralda Ramos is offline
Registrado
NULL
 
Registrado: mar 2015
Posts: 9
Poder: 0
Esmeralda Ramos Va por buen camino
Perdonen aqui esta el .zip
Una disculpa
Archivos Adjuntos
Tipo de Archivo: zip Bloqueo.zip (14,6 KB, 8 visitas)
Responder Con Cita
  #7  
Antiguo 07-04-2015
Esmeralda Ramos Esmeralda Ramos is offline
Registrado
NULL
 
Registrado: mar 2015
Posts: 9
Poder: 0
Esmeralda Ramos Va por buen camino
Buena tarde.

He estado realizando pruebas y finalmente encontre lo que sucede sin embargo no he podido darle solución.
Sucede que si un usuario deja de usar la aplicación, la deja abierta y enseguida deja de usar
totalmente el equipo de computo durante un tiempo que oscila entre los 5 minutos y 30 minutos
comienzan los bloqueos
hasta que este usuario que dejo de usar el equipo de computo regresa al mismo y cierra la aplicación los demás de desbloquean.
Implemente un Timmer para cerrar la aplicación si dejan de usarlo mas 5 minutos pero no ha funcionado en ciertas maquinas no funciona y los bloqueos siguen
Puse 30000 por que no funcionaba con los 300000 que en teoria le corresponden al timmer.
Código Delphi [-]
procedure TfrmPrincipal.ApplicationEvents1Idle(Sender: TObject;
  var Done: Boolean);
begin
StartTime := GetTickCount();
Done := TRUE;
end;

procedure TfrmPrincipal.Timer2Timer(Sender: TObject);
var FinalTime  : Cardinal;
begin
  if (dmModulo._UsuarioUR > 0) then
  begin
  FinalTime:= GetTickCount();
   if FinalTime - StartTime > 30000 then
      Application.Terminate;
  end;
end;
Agradecere su apoyo.
Nuevamente GRacias

Última edición por nlsgarcia fecha: 07-04-2015 a las 01:07:43. Razón: Sintaxis Delphi
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Uso de Firedac jafera Conexión con bases de datos 2 12-11-2014 12:46:25
Problema con FireDac darkamerico Conexión con bases de datos 2 04-11-2014 14:05:16
Migracion BDE a FireDac rodker Varios 3 23-07-2014 20:55:17
FireDac y Access glsaavedra Conexión con bases de datos 2 27-05-2014 23:09:15
Firedac Aldo Conexión con bases de datos 2 16-12-2013 22:26:07


La franja horaria es GMT +2. Ahora son las 11:00:59.


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