Hola amigos,
Desde hace un par de semanas he estado teniendo un problema extraño
con la escritura en una BD MySQL en la misma red.
Constantemente tengo que incrementar los puntos Turnos y CestaTickets de un empleado
en la tabla el campo era de tipo double 8,2 - pero hace poco mas de una semana lo cambie a decimal 8,2
aun no logro determinar si el problema radica en el codigo de la aplicacion, construida en Delphi
usando Zeos o en la base de datos...
Les muestro un poco mas
Este es el procedimiento completo para incrementar los puntos
Código Delphi
[-]
procedure TIdentificacionInicial.BCambiarNuevaRutaClick(Sender: TObject);
var
Año,Mes,Dia:Word;
Año2,Mes2,Dia2:Word;
MesModficado:String;
NombreTabla,TipoRuta:String;
VectorNuevoCambioRuta:Array [1..6] Of String;
VectorTurnosCT:Array [1..4] Of String;
I:Integer;
begin
if (BoxValidacionRuta.ItemIndex>=0) And
(BoxValidacionTurno.ItemIndex>=0) And
(BoxValidacionConductor.ItemIndex>=0) And
(BoxValidacionUnidad.ItemIndex>=0) And
(DTValidacionFecha.Date<=Date+1) then
begin
DecodeDate(DTValidacionFecha.Date, Año, Mes, Dia);
DecodeDate(Date, Año2, Mes2, Dia2);
MesModficado:=AgregarCeroAlMes(IntToStr(Mes2));
NombreTabla:='RC'+MesModficado+IntToStr(año2)+VectorInformacionAdmin[4];
ZQuery1.Close;
ZQuery1.SQL.Text:='Select Exists (Select 1 From Relaciones.'+NombreTabla+')';
ZQuery1.Open;
for I := 1 to 6 do
VectorNuevoCambioRuta[i]:='';
for I := 1 to 4 do
VectorTurnosCT[i]:='';
if ZQuery1.Fields[0].AsString<>'' then begin
ZQuery1.Close;
ZQuery1.SQL.Text:='Select NumeroRuta From Relaciones.'+NombreTabla+' Where NombreRuta = "'+BoxValidacionRuta.Text+'" And TurnoRuta = "'+BoxValidacionTurno.Text+'"';
ZQuery1.Open;
if (ZQuery1.Fields[0].AsString<>'') then begin
ZQuery1.Close;
ZQuery1.SQL.Text:='Select `'+IntToStr(Dia)+'` From Relaciones.'+NombreTabla+' Where NombreRuta = "'+BoxValidacionRuta.Text+'" And TurnoRuta = "'+BoxValidacionTurno.Text+'"';
ZQuery1.Open;
if Not (ZQuery1.Fields[0].AsString<>'0') then begin
VectorNuevoCambioRuta[1]:=IDConductorBox;
VectorNuevoCambioRuta[2]:=IntToStr(BoxValidacionUnidad.ItemIndex+1);
VectorNuevoCambioRuta[3]:=IntToStr(BoxValidacionRuta.ItemIndex+1);
VectorNuevoCambioRuta[4]:=BoxValidacionTurno.Text;
ZQuery1.Close;
ZQuery1.SQL.Text:='Select PagoPorTurno, PagoPorCT From Transportes.SubRutas Where HoraTurno = "'+VectorNuevoCambioRuta[4]+'" And IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'"';
ZQuery1.Open;
VectorNuevoCambioRuta[5]:=ZQuery1.Fields[0].AsString;
VectorNuevoCambioRuta[6]:=ZQuery1.Fields[1].AsString;
ZQuery1.Close;
ZQuery1.SQL.Text:='Update Relaciones.'+NombreTabla+' Set `'+IntToStr(Dia)+'` = "'+VectorNuevoCambioRuta[1]+'" Where IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'" And TurnoRuta = "'+VectorNuevoCambioRuta[4]+'"';
ZQuery1.ExecSQL;
NombreTabla:='RU'+MesModficado+IntToStr(año2)+VectorInformacionAdmin[4];
ZQuery1.Close;
ZQuery1.SQL.Text:='Update Relaciones.'+NombreTabla+' Set `'+IntToStr(Dia)+'` = "'+BoxValidacionUnidad.Text+'" Where IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'" And TurnoRuta = "'+VectorNuevoCambioRuta[4]+'"';
ZQuery1.ExecSQL;
ZQuery1.Close;
ZQuery1.SQL.Text:='Select TurnosConductor, CestaTickets From Relaciones.TurnosConductores Where NumeroConductor = "'+VectorNuevoCambioRuta[1]+'"';
ZQuery1.Open;
VectorTurnosCT[1]:=ZQuery1.Fields[0].AsString;
VectorTurnosCT[2]:=ZQuery1.Fields[1].AsString;
VectorTurnosCT[1]:=FloatToStr(StrToFloat(VectorTurnosCT[1])+StrToFloat(VectorNuevoCambioRuta[5]));
VectorTurnosCT[2]:=FloatToStr(StrToFloat(VectorTurnosCT[2])+StrToFloat(VectorNuevoCambioRuta[6]));
ZQuery1.Close;
ZQuery1.SQL.Text:='Select (Select TurnosUnidad From Relaciones.TurnosUnidades Where NumeroUnidad = "'+VectorNuevoCambioRuta[2]+'"),(Select TurnosActuales From Relaciones.TurnosRutas Where IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'" And HoraTurno = "'+VectorNuevoCambioRuta[4]+'")';
ZQuery1.Open;
VectorTurnosCT[3]:=ZQuery1.Fields[0].AsString;
VectorTurnosCT[4]:=ZQuery1.Fields[1].AsString;
VectorTurnosCT[3]:=FloatToStr(StrToFloat(VectorTurnosCT[3])+1);
VectorTurnosCT[4]:=FloatToStr(StrToFloat(VectorTurnosCT[4])+1);
ZQuery1.Close;
ZQuery1.SQL.Text:='Update Relaciones.TurnosConductores Set TurnosConductor = "'+VectorTurnosCT[1]+'", CestaTickets = "'+VectorTurnosCT[2]+'" Where NumeroConductor = "'+VectorNuevoCambioRuta[1]+'"';
ZQuery1.ExecSQL;
ZQuery1.Close;
ZQuery1.SQL.Text:='Update Relaciones.TurnosUnidades Set TurnosUnidad = "'+VectorTurnosCT[3]+'" Where NumeroUnidad = "'+VectorNuevoCambioRuta[2]+'"';
ZQuery1.ExecSQL;
ZQuery1.Close;
ZQuery1.SQL.Text:='Update Relaciones.TurnosRutas Set TurnosActuales = "'+VectorTurnosCT[4]+'" Where IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'" And HoraTurno = "'+VectorNuevoCambioRuta[4]+'"';
ZQuery1.ExecSQL;
NotaDelFlag:='editado porque es muy largo';
ZQuery1.Close;
ZQuery1.SQL.Text:='Insert Into Registros.RegistroCambios Values("","Validación de Ruta",CurDate(),CurTime(),"'+VectorInformacionAdmin[1]+'","Validación","'+NotaDelFlag+'")';
ZQuery1.ExecSQL;
ZQuery1.Close;
ZQuery1.SQL.Text:='Select TipoRuta From Transportes.SubRutas Where NombreRuta = "'+BoxValidacionRuta.Text+'" And HoraTurno = "'+BoxValidacionTurno.Text+'"';
ZQuery1.Open;
TipoRuta:=ZQuery1.Fields[0].AsString;
ZQuery1.Close;
ZQuery1.SQL.Text:='editado porque es inutil y muy extenso';
ZQuery1.ExecSQL;
ShowMessage('Bien! Ruta cargada y validada correctamente...');
BoxValidacionTurno.ItemIndex:=-1;
BoxValidacionConductor.ItemIndex:=-1;
ImagenModificarRuta.Picture:=nil;
GrupoOpcionesRuta.ItemIndex:=0;
end
else
begin
ShowMessage('Esta ruta ya tiene registros validados, no puede ser cambiada!');
end;
end
else
begin
ShowMessage('Lo siento, no existe el turno o la ruta en ese período');
end;
end
else
begin
ShowMessage('Lo siento, no tengo registros de ese período.');
end;
end;
end;
Este codigo lo he cambiado ya varias veces intentando encontrar que es lo que pasa,
pero aun no he tenido exito en mi busqueda, recurro a ustedes a ver si ven algo que seguramente
yo no puedo ver.
Miren lo siguiente:
Consultamos cuantos puntos paga la ruta por guardia(Turnos, y Cestatickets)
en esa tabla cambie en este momento
PagoPorTurno y PagoPorCT de double 8,2 a decimal 8,2.
Código Delphi
[-]
ZQuery1.Close;
ZQuery1.SQL.Text:='Select PagoPorTurno, PagoPorCT From Transportes.SubRutas Where HoraTurno = "'+VectorNuevoCambioRuta[4]+'" And IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'"';
ZQuery1.Open;
VectorNuevoCambioRuta[5]:=ZQuery1.Fields[0].AsString;
VectorNuevoCambioRuta[6]:=ZQuery1.Fields[1].AsString;
Luego consultamos cuantos turnos y cestatickets tiene el conductor.
Código Delphi
[-]
ZQuery1.Close;
ZQuery1.SQL.Text:='Select TurnosConductor, CestaTickets From Relaciones.TurnosConductores Where NumeroConductor = "'+VectorNuevoCambioRuta[1]+'"';
ZQuery1.Open;
VectorTurnosCT[1]:=ZQuery1.Fields[0].AsString;
VectorTurnosCT[2]:=ZQuery1.Fields[1].AsString;
VectorTurnosCT[1]:=FloatToStr(StrToFloat(VectorTurnosCT[1])+StrToFloat(VectorNuevoCambioRuta[5]));
VectorTurnosCT[2]:=FloatToStr(StrToFloat(VectorTurnosCT[2])+StrToFloat(VectorNuevoCambioRuta[6]));
Finalmente actualizamos los puntos del conductor,
aqui es donde esta el problema, supongamos que el conductor tiene 2.0 o 1.5
a veces y aleatoriamente al parecer NO suma correctamente los puntos,
y no se si es la BD o el codigo realmente.
Código Delphi
[-]
ZQuery1.Close;
ZQuery1.SQL.Text:='Update Relaciones.TurnosConductores Set TurnosConductor = "'+VectorTurnosCT[1]+'", CestaTickets = "'+VectorTurnosCT[2]+'" Where NumeroConductor = "'+VectorNuevoCambioRuta[1]+'"';
ZQuery1.ExecSQL;
Tengo que destacar lo siguiente, son dos aplicaciones, en una los empleados se registran solos;
este fue el codigo de la otra aplicacion, donde el operador los registra a ellos,
el codigo de la primera aplicacion es practicamente igual a este.
Lo dejare por aqui si alguien quiere darle un ojito
en un comentario ya que aqui no cabe, el post supera los 20.000 caracteres.
--
En pocas palabras el problema esta en que los puntos no son sumados/escritos correctamente
en un momento determinado o aleatorio, realmente no puedo captar esto,
quisiera hacer un pequeño log cuando los turnos vallan a ser actualizados, pero se me hace complicado
por el sitio donde estan funcionando estas aplicaciones.
Saludos amigos, gracias por su tiempo en leer esto, espero puedan ayudarme.