Ver Mensaje Individual
  #1  
Antiguo 10-06-2016
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Reputación: 17
kapcomx Va por buen camino
Cool fijar cambios en mysql

Buen dia compañeros, tengo un problema que surgio a consecuencia de una falla electrica, dejen les comento
tengo un sistema hecho en lazarus, se conecta a mysql por medio de componente zeos. todo esto en ubuntu 14.04.

todo funciona bien y de maravilla, el cliente feliz, Pero el dia de ayer cayo una tormenta y se les fue la luz, esto causo un lio, les comento, tengo una tabla llamada asignacion en la cual tengo un campo de tipo int not null default 0.

cada que un gestor realiza su labor se le asigna un numero de folio (el cual se guarda en el campo antes mencionado). esto lo hacia con un dataset de manera directa. todo bien.


pues el asunto esta en que en ese momento de falla de energia, la computadora del gestor se apago, no asi la que tienen como servidor donde esta la base de datos (al menos eso dice el cliente), el problema es que cuando reinicio el servicio de luz el gestor entro y se llevo la sorpresa de que se encontraba en el folio 1 cuando ya iba en el 90. es decir ese campo en especifico perdio su valor, regreso todos a cero.

si el servidor no se apago, me parecio muy raro, luego opte por hacer un procedimiento almacenado que se encargara de hacer el update para que fuera mas seguro. de esta manera del programa mando llamar el procedimiento y le doy como parametro el id de la tabla asignacion y el valor del folio. Mi cliente como muchos hizo la prueba de empezar a gestionar y repentinamente desconectar su maquina.

sucedio lo mismo, los valores del campo "num" simplemente se volvieron a cero todos. Siendo sinceros no me doy idea de porque pasa esto, talvez en el procedimiento almacenado tenga que incluir alguna instruccion extra algun commit o algo parecido

aca mi procedimiento:

Código PHP:
delimiter //
create procedure fijar (in nasigna intin nfolio int
begin 
update asignacion set num 
nfolio where id_asignacion nasigna;
end // 
y para llamarlo desde el codigo de mi programa solo hago

Código Delphi [-]


dm.cambia(dm.ds1, 'call fijar (' + dm.dsasignacionid_asignacion.AsString + ', ' + edfolio.text);

dm.cambia

Código Delphi [-]
procedure tdm.cambia(data: tzquery; filtro: string)
begin 

   data.close;
   data.sql.clear;
   data.sql.text:= filtro;
   data.ExecSQL;

end;

donde dm es mi data modulo, ds1 un dataset, en el zconnection tengo habilitada la opcion AutoCommit en true.

Siendo sinceros no se como pueda hacer para garantizar que ese cambio se fije una vez que se mande llamar el procedimiento.
Alguien con mas experiencia en MySql que me pueda orientar

Saludos
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....
Responder Con Cita