Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2014
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Exclamation Delphi MySQL - Problema sumando/escribiendo en BD

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;
  //1:ID Conductor, 2:ID Unidad, 3:ID Ruta, 4: Turno, 5:Pago por turno, 6:Pago por CT
  VectorNuevoCambioRuta:Array [1..6] Of String;
  //1:Turnos Conductor, 2:CT Conductor, 3: Turnos Unidad, 4 Turnos Ruta
  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
      //esto solo permite cambio de rutas de los dias del mes y año actual
      //osea la quincena actual!
      //no se pueden hacer cambios en periodos anteriores
      //Consultamos si la tabla correspondiente a esa fecha existe
      DecodeDate(DTValidacionFecha.Date, Año, Mes, Dia);
      DecodeDate(Date, Año2, Mes2, Dia2);
      MesModficado:=AgregarCeroAlMes(IntToStr(Mes2));
      //Construimos nombre RC
      NombreTabla:='RC'+MesModficado+IntToStr(año2)+VectorInformacionAdmin[4];

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Select Exists (Select 1 From Relaciones.'+NombreTabla+')';
      ZQuery1.Open;

      //vamos a reiniciar todos los vectores porque me parece que es lo que esta dando
      //errores con la carga de turnos, hasta ahora al parecer simplemente se escribia en ellos
      
      for I := 1 to 6 do
        VectorNuevoCambioRuta[i]:='';
      for I := 1 to 4 do
        VectorTurnosCT[i]:='';

      if ZQuery1.Fields[0].AsString<>'' then//existe la tabla
        begin
          //consultamos si la ruta y el turno existe
          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  //existe el turno y la ruta
            begin
              //consultamos si esta vacia
              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//esta vacia
                begin
                  VectorNuevoCambioRuta[1]:=IDConductorBox;
                  VectorNuevoCambioRuta[2]:=IntToStr(BoxValidacionUnidad.ItemIndex+1);
                  VectorNuevoCambioRuta[3]:=IntToStr(BoxValidacionRuta.ItemIndex+1);
                  VectorNuevoCambioRuta[4]:=BoxValidacionTurno.Text;

                  //Consultamos el pago por turno y el pago por ct

                  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;

                  //Insertamos en RC
                  ZQuery1.Close;
                  ZQuery1.SQL.Text:='Update Relaciones.'+NombreTabla+' Set `'+IntToStr(Dia)+'` = "'+VectorNuevoCambioRuta[1]+'" Where IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'" And TurnoRuta = "'+VectorNuevoCambioRuta[4]+'"';
                  ZQuery1.ExecSQL;

                  //Construimos el nombre de la tabla RU

                  NombreTabla:='RU'+MesModficado+IntToStr(año2)+VectorInformacionAdmin[4];

                  //insertamos en RU.
                  ZQuery1.Close;
                  ZQuery1.SQL.Text:='Update Relaciones.'+NombreTabla+' Set `'+IntToStr(Dia)+'` = "'+BoxValidacionUnidad.Text+'" Where IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'" And TurnoRuta = "'+VectorNuevoCambioRuta[4]+'"';
                  ZQuery1.ExecSQL;

                  //Consultamos cuantos turnos y ct tiene el conductor
                  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;

                  //Sumamos los turnos actuales mas el nuevo
                  VectorTurnosCT[1]:=FloatToStr(StrToFloat(VectorTurnosCT[1])+StrToFloat(VectorNuevoCambioRuta[5]));
                  VectorTurnosCT[2]:=FloatToStr(StrToFloat(VectorTurnosCT[2])+StrToFloat(VectorNuevoCambioRuta[6]));

                  //Consultamos cuantos turnos lleva la unidad y la ruta
                  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);

                  //actualizamos los datos del conductor
                  ZQuery1.Close;
                  ZQuery1.SQL.Text:='Update Relaciones.TurnosConductores Set TurnosConductor = "'+VectorTurnosCT[1]+'", CestaTickets = "'+VectorTurnosCT[2]+'" Where NumeroConductor = "'+VectorNuevoCambioRuta[1]+'"';
                  ZQuery1.ExecSQL;

                  //actualizamos los datos de la unidad
                  ZQuery1.Close;
                  ZQuery1.SQL.Text:='Update Relaciones.TurnosUnidades Set TurnosUnidad = "'+VectorTurnosCT[3]+'" Where NumeroUnidad = "'+VectorNuevoCambioRuta[2]+'"';
                  ZQuery1.ExecSQL;

                  //actualizamos los datos de la ruta
                  ZQuery1.Close;
                  ZQuery1.SQL.Text:='Update Relaciones.TurnosRutas Set TurnosActuales = "'+VectorTurnosCT[4]+'" Where IdentificadorRuta = "'+VectorNuevoCambioRuta[3]+'" And HoraTurno = "'+VectorNuevoCambioRuta[4]+'"';
                  ZQuery1.ExecSQL;

                  //registramos el cambio

                  NotaDelFlag:='editado porque es muy largo';

                  //registramos el cambio
                  ZQuery1.Close;
                  ZQuery1.SQL.Text:='Insert Into Registros.RegistroCambios Values("","Validación de Ruta",CurDate(),CurTime(),"'+VectorInformacionAdmin[1]+'","Validación","'+NotaDelFlag+'")';
                  ZQuery1.ExecSQL;

                  //buscamos el tipo de la ruta

                  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;

                  //registramos el cambio en registrosconductoresrutas

                  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 [-]
//Consultamos el pago por turno y el pago por ct

                  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 [-]
//Consultamos cuantos turnos y ct tiene el conductor
                  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;

                  //Sumamos los turnos actuales mas el nuevo
                  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 [-]
//actualizamos los datos del conductor
                  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.
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.

Última edición por martini002 fecha: 09-09-2014 a las 17:57:46.
Responder Con Cita
  #2  
Antiguo 09-09-2014
Avatar de martini002
martini002 martini002 is offline
Miembro
 
Registrado: may 2012
Ubicación: Puerto Ordaz - Venezuela
Posts: 175
Poder: 12
martini002 Va por buen camino
Código Delphi [-]
procedure TFormPrincipal.BAceptarClick(Sender: TObject);
var
  //VectorDatosTemporales : Array [1..10] Of String;
  Fecha:TDate;
  Hora:TTime;
  Año,Mes,Dia:Word;
  NombreTablaRC, NombreTablaRU:String;
  SumarTurno:String;
  NombreConductor,aux:String;
  NotaFlag:String;
  I:Integer;
  //variables de prueba mientras no funcione la suma correcta de decimales
  //sumaremos turnos y cesta tickets
  TurnosActuales,TurnosCTActuales,TurnosNuevos,TurnosCTNuevos:Real;
begin
  BarraProgreso.StepIt;
  //Bloqueamos interfaz
  DesactivarBotones(False);

  BarraProgreso.StepIt;

  DecodeDate(Date, Año, Mes, Dia);

  NombreTablaRC:='RC'+AgregarCeroAlMes(IntToStr(Mes))+IntToStr(Año)+VectorInformacionSalidaChoferPorID[6];
  NombreTablaRU:='RU'+AgregarCeroAlMes(IntToStr(Mes))+IntToStr(Año)+VectorInformacionSalidaChoferPorID[6];

  //Tuplas: 1 Nombre Unidad, 2 Nombre Ruta, 3 Turno
  //Tuplas: 1 Numero Unidad, 2 Numero Ruta, 3 Hora Turno expresado en Horas, 4 Numero Subruta, 5 Pago por el turno, 6 ID Cliente
  //Comprobamos que no se halla registrado en la RU
  ZQuery1.Close;
  ZQuery1.SQL.Text:= 'Select `'+IntToStr(Dia)+'` From Relaciones.'+NombreTablaRU+' Where IdentificadorRuta = '+VectorInformacionSalidaChoferPorID[2]+' And TurnoRuta = '+VectorInformacionSalidaChoferPorID[3];
  ZQuery1.Open;

  BarraProgreso.StepIt;

  if (ZQuery1.Fields[0].AsString='0') Or (ZQuery1.Fields[0].AsString='') then
    begin

      //Actualizamos Relacion Unidades
      ZQuery1.Close;
      ZQuery1.SQL.Text:='Update Relaciones.'+NombreTablaRU+' Set `'+IntToStr(Dia)+'` = "'+VectorInformacionSalidaChofer[1]+'" Where IdentificadorRuta = '+VectorInformacionSalidaChoferPorID[2]+' And TurnoRuta = '+VectorInformacionSalidaChoferPorID[3];

      ZQuery1.ExecSQL;

      BarraProgreso.StepIt;

      //Actualizamos Relacion Conductores

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Update Relaciones.'+NombreTablaRC+' Set `'+IntToStr(Dia)+'` = "'+VectorInformacionSalidaChoferPorID[7]+'" Where IdentificadorRuta = '+VectorInformacionSalidaChoferPorID[2]+' And TurnoRuta = '+VectorInformacionSalidaChoferPorID[3];
      ZQuery1.ExecSQL;

      BarraProgreso.StepIt;

      //actualizamos turnos conductores

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Select TurnosConductor From Relaciones.TurnosConductores Where NumeroConductor = "'+VectorInformacionSalidaChoferPorID[7]+'"';
      ZQuery1.Open;

      //TurnosActuales,TurnosCTActuales,TurnosNuevos,TurnosCTNuevos,PrecioTurno,PrecioCT:Real;
      TurnosActuales:=ZQuery1.Fields[0].AsFloat;
      TurnosNuevos:=StrToFloat(VectorInformacionSalidaChoferPorID[5])+TurnosActuales;

      //SumarTurno:=FloatToStr(StrToFloat(ZQuery1.Fields[0].AsString)+StrToFloat(VectorInformacionSalidaChoferPorID[5]));
      SumarTurno:=FloatToStr(TurnosNuevos);

      BarraProgreso.StepIt;

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Update Relaciones.TurnosConductores Set TurnosConductor = "'+SumarTurno+'" Where NumeroConductor = "'+VectorInformacionSalidaChoferPorID[7]+'"';
      ZQuery1.ExecSQL;

      //actualizamos turnos unidades

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Select TurnosUnidad From Relaciones.TurnosUnidades Where NumeroUnidad = "'+VectorInformacionSalidaChoferPorID[1]+'"';
      ZQuery1.Open;

      SumarTurno:=FloatToStr(StrToFloat(ZQuery1.Fields[0].AsString)+1);

      BarraProgreso.StepIt;

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Update Relaciones.TurnosUnidades Set TurnosUnidad = "'+SumarTurno+'" Where NumeroUnidad = "'+VectorInformacionSalidaChoferPorID[1]+'"';
      ZQuery1.ExecSQL;

      //actualizamos turnos rutas

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Select TurnosActuales From Relaciones.TurnosRutas Where IdentificadorRuta = "'+VectorInformacionSalidaChoferPorID[2]+'" And HoraTurno = "'+VectorInformacionSalidaChoferPorID[3]+'"';
      ZQuery1.Open;

      SumarTurno:=FloatToStr(StrToFloat(ZQuery1.Fields[0].AsString)+1);

      BarraProgreso.StepIt;

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Update Relaciones.TurnosRutas Set TurnosActuales = "'+SumarTurno+'" Where IdentificadorRuta = "'+VectorInformacionSalidaChoferPorID[2]+'" And HoraTurno = "'+VectorInformacionSalidaChoferPorID[3]+'"';
      ZQuery1.ExecSQL;

      //actualizamos cesta tickets

      SumarTurno:='';

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Select CestaTickets From Relaciones.TurnosConductores Where NumeroConductor = "'+VectorInformacionSalidaChoferPorID[7]+'"';
      ZQuery1.Open;

      //TurnosActuales,TurnosCTActuales,TurnosNuevos,TurnosCTNuevos,PrecioTurno,PrecioCT:Real;

      TurnosCTActuales:=ZQuery1.Fields[0].AsFloat;
      TurnosCTNuevos:=StrToFloat(VectorInformacionSalidaChoferPorID[8])+TurnosCTActuales;

      //SumarTurno:=FloatToStr(StrToFloat(ZQuery1.Fields[0].AsString)+StrToFloat(VectorInformacionSalidaChoferPorID[8]));
      SumarTurno:=FloatToStr(TurnosCTNuevos);

      BarraProgreso.StepIt;

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Update Relaciones.TurnosConductores Set CestaTickets = "'+SumarTurno+'" Where NumeroConductor = "'+VectorInformacionSalidaChoferPorID[7]+'"';
      ZQuery1.ExecSQL;

      //Bloqueamos la unidad por hora
      Hora:=Time;

      BarraProgreso.StepIt;

      ZConnection1.Disconnect;
      //Cambiamos la BD a transportes
      ZConnection1.Database:='Transportes';
      ZConnection1.Connect;

      BarraProgreso.StepIt;

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Update Transportes.EstadoUnidades Set Activa = "DES", QuienDesactivo = "SYS", HoraDesactivacion = "'+TimeToStr(Hora)+'" Where NumeroUnidad = "'+VectorInformacionSalidaChoferPorID[1]+'"';
      ZQuery1.ExecSQL;

      //Seleccionamos el nombre y apellido del conductor

      ZQuery1.Close;
      ZQuery1.SQL.Text:='Select Nombre1,Apellido1 From Conductores Where NumeroConductor = "'+VectorInformacionSalidaChoferPorID[7]+'"';
      ZQuery1.Open;

      NombreConductor:=ZQuery1.Fields[0].AsString+' '+ZQuery1.Fields[1].AsString;

      BarraProgreso.StepIt;

      //Agregamos el nuevo registro
      //Tuplas: 1 Numero Unidad, 2 Numero Ruta, 3 Hora Turno expresado en Horas, 4 Numero Subruta, 5 Pago por el turno, 6 ID Cliente, 7 id conductor, 8 pago por ct, 9 tipo ruta



      ZQuery1.Close;
      ZQuery1.SQL.Clear;
      ZQuery1.SQL.Add('Insert Into EstadisticasConductores.RegistrosConductoresRutas(NumeroConductor,EstadoReporte,QuienRegistro,FechaR  egistro,HoraRegistro,FechaValidacion,HoraValidacion,Ruta,IdentificadorRuta,Turno,TipoRuta,Unidad,Nom  breConductor) Values(');
      ZQuery1.SQL.Add('"'+VectorInformacionSalidaChoferPorID[7]+'",');
      ZQuery1.SQL.Add('"PENDIENTE",');
      ZQuery1.SQL.Add('"SYS",');
      ZQuery1.SQL.Add('"'+FormatDateTime('yyyy/mm/dd', Date)+'",');
      ZQuery1.SQL.Add('"'+TimeToStr(Time)+'",');
      ZQuery1.SQL.Add('"'+FormatDateTime('yyyy/mm/dd', Date)+'",');
      ZQuery1.SQL.Add('"'+TimeToStr(Time)+'",');
      ZQuery1.SQL.Add('"'+VectorInformacionSalidaChofer[2]+'",');
      ZQuery1.SQL.Add('"'+VectorInformacionSalidaChoferPorID[2]+'",');
      ZQuery1.SQL.Add('"'+VectorInformacionSalidaChoferPorID[3]+'",');
      ZQuery1.SQL.Add('"'+VectorInformacionSalidaChoferPorID[9]+'",');
      ZQuery1.SQL.Add('"'+VectorInformacionSalidaChofer[1]+'",');
      ZQuery1.SQL.Add('"'+NombreConductor+'")');
      ZQuery1.ExecSQL;

      //Creamos un nuevo evento de que acaba de ser registrada la ruta
      //esto lo enviaremos por correo a la planta

      //Tuplas: 1 Numero Unidad, 2 Numero Ruta, 3 Hora Turno expresado en Horas, 4 Numero Subruta, 5 Pago por el turno, 6 ID Cliente, 7 id conductor, 8 pago por ct, 9 tipo ruta
      //VectorInformacionSalidaChoferPorID: Array [1..9] Of String;

      NotaFlag:=VectorInformacionSalidaChoferPorID[9]+' | '+VectorInformacionSalidaChofer[2]+' | '+VectorInformacionSalidaChoferPorID[3]+' | '+NombreConductor+' | '+FormatDateTime('yyyy/mm/dd', Date)+' | '+TimeToStr(Time);

      ZQuery1.Close;
      ZQuery1.SQL.Clear;
      ZQuery1.SQL.Add('Insert Into Transportes.FlagsPendientes(FechaCreacion,HoraCreacion,Estado,TipoFlag,Nota) Values(');
      ZQuery1.SQL.Add('"'+FormatDateTime('yyyy/mm/dd', Date)+'",');
      ZQuery1.SQL.Add('"'+TimeToStr(Time)+'",');
      ZQuery1.SQL.Add('"S",');
      ZQuery1.SQL.Add('"3",');
      ZQuery1.SQL.Add('"'+NotaFlag+'")');
      ZQuery1.ExecSQL;

      for I := 1 to 9 do
        VectorInformacionSalidaChoferPorID[i]:='';

      for I := 1 to 3 do
        VectorInformacionSalidaChofer[i]:='';


      BarraProgreso.StepIt;

      Label1.Caption:='Ok! Bon Voyage!';
      BarraProgreso.StepIt;

      while BarraProgreso.Position<100 do
        BarraProgreso.StepIt;

      ZConnection1.Disconnect;
      //Cambiamos la BD a transportes
      ZConnection1.Database:='Transportes';
      ZConnection1.Connect;

      OkMeVoy.Enabled:=True;
    end//fin condicion de ruta registrada
  else
    begin
      DesactivarBotones(True);
      ShowMessage('ERROR! Esta ruta ya fue registrada!');
      BAceptar.Enabled:=False;
    end;
  //CargarDatosConexion;
end;
__________________
El Conocimiento se puede compartir, pero la Experiencia es totalmente Intransferible.
Responder Con Cita
  #3  
Antiguo 15-09-2014
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Si pusieras un ejemplo de valores esperados y encontrados igual no me arriesgaba a poner nada, pero el hecho de que digar que los fallos son aleatorios y no suceden siempre me hace arriesgarme. Soy recurrente en este asunto pero a mi me ha pasado algunas veces y con distintas bases de datos. Un número con dos decimales en decimal puede tener infinitos decimales en binario. A la hora de guardar datos decimales en una bd internamente se guardan en binario, y al extralerlos o trabajar con ellos bien pudiera ser que el redondeo a 2 decimales te juegue una mala pasada. Ya digo que voi a ciegas y apunto a este problema si le fallo es por un decimal.

Puedes probar a guardar en uno de esos campos el valor 2.1 y despues extarelo a ver que obtienes. 2.1 si lo pasas a binario (según el formato) podria acabar convirtiendose en 2.09999 la hacer el cambio inverso. sin embargo con 2.2 el cambio sería exacto. Como en algunas ocasiones este ha sido mi problema yo lo comento para que lo tengas en cuenta y por si fuera el problema. Bien es posible que el cambio de double 8,2 a decimal 8,2 tuviera como consecuencia en algunos casos un error en el redondeo.
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
Problema con consulta MySql en Delphi franroju Varios 3 07-06-2012 15:50:45
Opinion con problema Delphi-MySQL briones74 Conexión con bases de datos 2 28-07-2011 03:21:57
Problema con Mysql en delphi for php JULIPO PHP 1 27-05-2010 19:09:42
problema de velocidad con mysql y delphi 6 Byfed Conexión con bases de datos 2 03-02-2009 23:25:01
Problema con Delphi y MySql 5 Besto MySQL 1 29-05-2007 17:33:33


La franja horaria es GMT +2. Ahora son las 20:31:58.


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