Ver Mensaje Individual
  #3  
Antiguo 07-05-2021
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
hola a todos:

Cita:
Empezado por Casimiro Notevi Ver Mensaje
+1

A parte de no indicar el problema exacto que tienes en tu consulta SQL mezclas los AND y OR sin paréntesis, por lo que el filtrado quizás no sea exactamente como esperas, prueba de la siguiente forma tanto para la consulta con "=" y la de "<>"
Código SQL [-]
 WHERE     opermv.fechadoc BETWEEN :fecha1 AND :fecha2
       AND left(opermv.documento, 1) <> :nroserie
       AND (   opermv.grupo <> :grupo1
            OR opermv.grupo <> :grupo2
            OR opermv.grupo <> :grupo3
            OR opermv.grupo <> :grupo4
            OR opermv.grupo <> :grupo5
            OR opermv.grupo <> :grupo6
            OR opermv.grupo <> :grupo7
            OR opermv.grupo <> :grupo8
            OR opermv.grupo <> :grupo9
            OR opermv.grupo <> :grupo10
            OR opermv.grupo <> :grupo11
            OR opermv.grupo <> :grupo12
            OR opermv.grupo <> :grupo13
            OR opermv.grupo <> :grupo14
            OR opermv.grupo <> :grupo15
            OR opermv.grupo <> :grupo16
            OR opermv.grupo <> :grupo17
            OR opermv.grupo <> :grupo18
            OR opermv.grupo <> :grupo19
            OR opermv.grupo <> :grupo20
            OR opermv.grupo <> :grupo21
            OR opermv.grupo <> :grupo22
            OR opermv.grupo <> :grupo23)

y para simplificar bastante el uso de tantos parámetros te recomiendo que utilices el comando FIND_IN_SET de mySQL de tal forma que ese where podrías simplificarlo mucho.

Ejemplo para cuando quieres que coincida con la lista de grupos:
Código SQL [-]
 WHERE     opermv.fechadoc BETWEEN :fecha1 AND :fecha2
       AND left(opermv.documento, 1) <> :nroserie
       AND  FIND_IN_SET(opermv.grupo, :listGrupos)

y de esta forma para cuando no quieres que coincida con la lista de grupos
Código SQL [-]
 WHERE     opermv.fechadoc BETWEEN :fecha1 AND :fecha2
       AND left(opermv.documento, 1) <> :nroserie
       AND NOT  FIND_IN_SET(opermv.grupo, :listGrupos)

y desde delphi la lista de grupos la pasas simplemente a un único parámetro como lista separada por comas:

Código Delphi [-]
   ParamByName('listGrupos').AsString:='1002,1003,...,1001';
Responder Con Cita