Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   no aparecen todos los registros en consulta hecha en la aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=96084)

LACV 30-01-2023 22:40:32

no aparecen todos los registros en consulta hecha en la aplicacion
 
buena tarde,
agradesco de antemano la atencion prestada compañeros, encontre un error en mi aplicacion al mostrar una informacion en una tabla ya que al realizar la consulta en la aplicacion no aparecen todos los registros pero si ejecuto la misma consulta con los mismo parametros en el phpmyadmin aparecen los registros sin problemas.

Código Delphi [-]
  if (FechaI = '') or (FechaF = '') then
  begin
    fechas := '';
  end
  else
  begin
    fechas := ' and Fecha_F>=''' + FechaI + ''' and Fecha_F<=''' + FechaF + '''';
  end;

  if tiquete = '' then
  begin
    tiquetes := ''
  end
  else
  begin
    tiquetes := ' and NTiquete=''' + tiquete + '''';
  end;

  if placa = '' then
  begin
    placa_ := ''
  end
  else
  begin
    placa_ := ' and Placa=''' + placa + '''';
  end;

  if productoId = '' then
  begin
    idProd := '';
  end
  else
  begin
    idProd := ' and Id_Producto=''' + productoId + '''';
  end;
  case estado of
    true:
      estado_ := '1';
    false:
      estado_ := '0';
  end;

  group := ' group by B.Id_Bascula';

  sql_ := 'select Id_Producto,B.Id_Bascula,Estado_B,NTiquete,Fecha_I,Hora_I,Peso_I,Fecha_F,Hora_F, '
    + 'Peso_F,Servicio,N_Viaje,Variedad,Lote,Humeda,Impureza,Procedencia,N_Documento, '
    + 'Origen,Destino,Observacion,Tarifa,CONCAT(Fecha_I, ''' + espacio +
    ''',Hora_I) AS FHi,CONCAT(Fecha_I, ''' + espacio +
    ''',Hora_I) AS FHf,Peso_I-Peso_F as DifE,Peso_F-Peso_I as DifS,Anulado, ' +
    'B.Id_VC,Mv.Id_Cliente,IdPLiq, ' +
    'C.IdentificacionC,C.NombreC,NombresCt,IdentificacionCt,Placa,Mv.Id_Mov,VPeso2,Nombres,Apellidos,Mv.  Id_Ciudad,Ciudad,Departamento, '
    + 'B.IdPerFac,EstadoFac,F.NombreC as FNombreC,F.IdentificacionC as FIdentificacionC '
    + 'from abBascula B ' +
    'inner join abPersonasFac F on B.IdPerFac=F.IdPerFac ' +
    'left join abMovimientos Mv on B.Id_Bascula=Mv.Id_Bascula ' +
    'left join abCliente C on Mv.Id_Cliente=C.Id_Cliente ' +
    'left join abCiudades Cid on Mv.Id_Ciudad=Cid.Id_Ciudad ' +
    'inner join abVehiculoConductor VC on B.Id_VC=VC.Id_VC ' +
    'inner join abVehiculo V on  VC.IdVehiculo=V.IdVehiculo ' +
    'inner join abConductor Cd on VC.Id_Conductor=Cd.Id_Conductor ' +
    'inner join abUser U on B.Id_User=U.Id_User ' +
    'inner join abMDetalle Md on Mv.Id_Mov=Md.Id_Mov ' + 'where Servicio=''' +
    IntToStr(Servicio) + ''' and Estado_B=''' + estado_ + ''' and Anulado=0 ' +
    fechas + tiquetes + placa_ + idProd + group + vPeso;

  with dmodulo.QueryBasculaInf do
  begin
    Active := false;
    SQL.Clear;
    SQL.Add(sql_);
    Active := true;
    Filter := '';
    if recordcount > 0 then
    begin
      resetPesoOrdenes(dmodulo.QueryBasculaInf.FieldByName('Id_Bascula').AsString);
    end
    else
    begin
      dmodulo.QueryPesoDestallesB.Active := false;
    end;

    Result := recordcount;
  end;

duilioisola 31-01-2023 08:32:32

Tres cosas :
1.
Veo que estás devolviendo dos veces la "Fecha Inicio" + "Hora Inicio" como FHi y FHf.
Quizás es que no estás viendo lo que en realidad deseas

Código Delphi [-]
sql_ := 'select Id_Producto,B.Id_Bascula,Estado_B,NTiquete,Fecha_I,Hora_I,Peso_I,Fecha_F,Hora_F, '
    + 'Peso_F,Servicio,N_Viaje,Variedad,Lote,Humeda,Impureza,Procedencia,N_Documento, '
    + 'Origen,Destino,Observacion,Tarifa,

    CONCAT(Fecha_I, ''' + espacio + ''',Hora_I) AS FHi,
    CONCAT(Fecha_I, ''' + espacio + ''',Hora_I) AS FHf,

    Peso_I-Peso_F as DifE,Peso_F-Peso_I as DifS,Anulado, ' +
    'B.Id_VC,Mv.Id_Cliente,IdPLiq, ' +
...

2.
Veo que filtras solo Fecha_F
Quizás deberías modificar a
fechas := ' and Fecha_**I**>=''' + FechaI + ''' and Fecha_F<=''' + FechaF + '''';

Código Delphi [-]
  begin
    fechas := ' and Fecha_F>=''' + FechaI + ''' and Fecha_F<=''' + FechaF + '''';
  end;

3.
Cuando filtras por fechas quizás tengas que tener en cuenta la hora.
¿Cuál es el formato que tiene FechaI y FechaF?
No conozco MySQL pero quizás deberías revisar qué contienen y modificarlo según corresponda.
Por ejemplo, si quieres el mes de enero completo
- Fecha_I = "2022-01-01 00:00:00"
- Fecha_F = "2022-01-31 23:59:59"
Código Delphi [-]
  begin
    fechas := ' and Fecha_F>=''' + FechaI + ''' and Fecha_F<=''' + FechaF + '''';
  end;

Neftali [Germán.Estévez] 31-01-2023 11:01:19

Antes de hacer el Active, yo mostraría un mensaje con la SQL que vas a ejecutar, para asegurarte de que es la misma que estás ejecutando en al phpmyadmin.

Por otro lado te recomiendo usar parámetros para la consulta, en lugar de concatenar cadenas. hará la consulta más segura y más simple de leer. Las dobles comillas o triples comillas a veces juegan malas pasadas.

LACV 31-01-2023 15:57:08

buen dia;
lo del primer punto que es enviar un mensaje , ya lo realice por esa razon quite los parametros para poder ver lo que se esta pasando, mil gracias por las ideas

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 550205)
Antes de hacer el Active, yo mostraría un mensaje con la SQL que vas a ejecutar, para asegurarte de que es la misma que estás ejecutando en al phpmyadmin.

Por otro lado te recomiendo usar parámetros para la consulta, en lugar de concatenar cadenas. hará la consulta más segura y más simple de leer. Las dobles comillas o triples comillas a veces juegan malas pasadas.


LACV 31-01-2023 16:00:22

estoy devolviendo dos veces la fecha para mostrar en la columna del dbgrid fecha y hora a la vez por que en la DB tengo separado estos dos valores para evitar lo que comentas en el tercer punto. sobre el punto dos utlizo al Fecha_F por que es el parametro fundamental en la db ya que es cuando se toma el ultimo dato de la del registro y sobre ese tengo que realizar las consultas
Cita:

Empezado por duilioisola (Mensaje 550204)
Tres cosas :
1.
Veo que estás devolviendo dos veces la "Fecha Inicio" + "Hora Inicio" como FHi y FHf.
Quizás es que no estás viendo lo que en realidad deseas

Código Delphi [-]
sql_ := 'select Id_Producto,B.Id_Bascula,Estado_B,NTiquete,Fecha_I,Hora_I,Peso_I,Fecha_F,Hora_F, '
    + 'Peso_F,Servicio,N_Viaje,Variedad,Lote,Humeda,Impureza,Procedencia,N_Documento, '
    + 'Origen,Destino,Observacion,Tarifa,

    CONCAT(Fecha_I, ''' + espacio + ''',Hora_I) AS FHi,
    CONCAT(Fecha_I, ''' + espacio + ''',Hora_I) AS FHf,

    Peso_I-Peso_F as DifE,Peso_F-Peso_I as DifS,Anulado, ' +
    'B.Id_VC,Mv.Id_Cliente,IdPLiq, ' +
...

2.
Veo que filtras solo Fecha_F
Quizás deberías modificar a
fechas := ' and Fecha_**I**>=''' + FechaI + ''' and Fecha_F<=''' + FechaF + '''';

Código Delphi [-]
  begin
    fechas := ' and Fecha_F>=''' + FechaI + ''' and Fecha_F<=''' + FechaF + '''';
  end;

3.
Cuando filtras por fechas quizás tengas que tener en cuenta la hora.
¿Cuál es el formato que tiene FechaI y FechaF?
No conozco MySQL pero quizás deberías revisar qué contienen y modificarlo según corresponda.
Por ejemplo, si quieres el mes de enero completo
- Fecha_I = "2022-01-01 00:00:00"
- Fecha_F = "2022-01-31 23:59:59"
Código Delphi [-]
  begin
    fechas := ' and Fecha_F>=''' + FechaI + ''' and Fecha_F<=''' + FechaF + '''';
  end;


marco3k 01-02-2023 17:05:24

Puede ser el problema las comillas simples, prueba usar la funcion "QuotedStr" en los parametros que pasas. Lo otro que veo que le parametro Filter (Filter := '';) del query esta demas porque estas borrando la consulta con un clear y asignado otra vez.
Yo hago mas o menos asi ese tipo de consultas:
Código Delphi [-]
  try
    rutinas.AbreConexion;
    TListaEmail.DisableControls;
     Conexion.Lista.SQL.Clear;
    Conexion.Lista.SQL.Add('NRO_DOC, EMAIL_PER FROM PERSONAL'+
    ' WHERE EMAIL_PER<>' + quotedstr('') + 'AND ID_PER>0');
    Conexion.Lista.Prepare;
    Conexion.Lista.Open;
    if Conexion.Lista.RecordCount>0 then
    begin
    ...
    end;
  finally
    TListaEmail.EnableControls;
    Conexion.Lista.Close;
    rutinas.CierraConexion;
  end;
Es bueno usar parámetros en los querys pero en este caso como era algo pa llenar una lista rápida, lo hice así.


La franja horaria es GMT +2. Ahora son las 07:08:18.

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