Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   fijar cambios en mysql (https://www.clubdelphi.com/foros/showthread.php?t=90445)

kapcomx 10-06-2016 00:33:29

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

bitbow 10-06-2016 00:44:34

No recuerdo si en MySQL se pueden usar secuencias o generadores, puedes probar usando estos.

Saludos.

roman 10-06-2016 17:01:34

Hola, no me queda claro cómo estás asignando el folio. ¿El campo que mencionas es un autoinc o quién genera el folio, quién hace la actualización?

LineComment Saludos

kapcomx 10-06-2016 23:17:56

que tal amigos, ya se resolvio el problema, el dia de hoy borre la base de datos la volvi a generar de un respaldo, hicimos pruebas y todo funciono muy bien.

Siendo sinceros creo que se pudo haber dañado la bd. y al volverla a generar se soluciono el problema, incluso a uno de los gestores le desconectamos la maquina para simular un corte de luz y cuando volvio a entrar todo bien.

Saludos y gracias por su atención


La franja horaria es GMT +2. Ahora son las 17:04:21.

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