Problema con SQL

27/02/2007 - 16:48 por Sergio Wiñar | Informe spam
Estimados colegas,

Necesito si me pueden comentar algo sobre un problema que estoy teniendo.

Dentro de una base Access, tengo un campo condicional llamado Eliminado.

Cuando lanzo un listado uso la siguiente instrucción:

SELECT * FROM Productos WHERE PEstado = '"+item+"' AND Eliminado = 'False'
ORDER BY...

y sucede que no me muestra la lista, cuando solo deberia mostrar los
productos que Eliminado = False.
(si lo saco de la instruccion, si me muestra la lista, obviamente completa)

¿Qué es lo que está pasando?

Muchas gracias
Sergio Wiñar

Preguntas similare

Leer las respuestas

#1 Miguel Gonzalez
27/02/2007 - 17:00 | Informe spam
Hola Sergio.

Si el campo "Eliminado" es de tipo SI/NO la consulta debería ser:

"...AND Eliminado = False ORDER BY..."

Tal cual, sin comillas rodeando el "False", ya que en ese caso la
comparación sería entre cadenas (strings) en vez de comparar valores
booleanos (SI/NO | True/False).

Otra forma sería:

"...AND Not Eliminado ORDER BY..."


Saludos!
Miguel


Sergio Wiñar escribió:
Estimados colegas,

Necesito si me pueden comentar algo sobre un problema que estoy teniendo.

Dentro de una base Access, tengo un campo condicional llamado Eliminado.

Cuando lanzo un listado uso la siguiente instrucción:

SELECT * FROM Productos WHERE PEstado = '"+item+"' AND Eliminado = 'False'
ORDER BY...

y sucede que no me muestra la lista, cuando solo deberia mostrar los
productos que Eliminado = False.
(si lo saco de la instruccion, si me muestra la lista, obviamente completa)

¿Qué es lo que está pasando?

Muchas gracias
Sergio Wiñar




Respuesta Responder a este mensaje
#2 Dani Castillo
27/02/2007 - 17:01 | Informe spam
Creo que has puesto el campo eliminado entre comillas =)

SELECT * FROM Productos WHERE PEstado = '"+item+"' AND Eliminado = False
ORDER BY...

O bien mas compacto (y entendible)

SELECT * FROM Productos WHERE PEstado = '"+item+"' AND Not Eliminado
ORDER BY...

O mejor aun para evitarte problemas, usa parentesis para separar las
instrucciones (dado que el and es una operacion -logica, pero operacion-) te
has de asegurar que se realiza en el orden correcto, tu quieres decir
(pestado='estado1') Y (no eliminado), mientras que tal como esta tb
podria -sin acudir a la especificacion sintactica de la implementacion-
interpretarse como where pestado = ( una cadena and unvalorboolean), siempre
usa parentesis en estas sentencias

SELECT * FROM Productos WHERE (PEstado = '"+item+"') AND (Not
(Eliminado) ) ORDER BY...

mejora la legibilidad del codigo cuando juntas muchas condiciones

_____________________
Dani
_____________________
"Sergio Wiñar" escribió en el mensaje
news:
Estimados colegas,

Necesito si me pueden comentar algo sobre un problema que estoy teniendo.

Dentro de una base Access, tengo un campo condicional llamado Eliminado.

Cuando lanzo un listado uso la siguiente instrucción:

SELECT * FROM Productos WHERE PEstado = '"+item+"' AND Eliminado = 'False'
ORDER BY...

y sucede que no me muestra la lista, cuando solo deberia mostrar los
productos que Eliminado = False.
(si lo saco de la instruccion, si me muestra la lista, obviamente


completa)

¿Qué es lo que está pasando?

Muchas gracias
Sergio Wiñar




Respuesta Responder a este mensaje
#3 Manuel Vera
27/02/2007 - 17:05 | Informe spam
Hola

Imagino que el tipo de datos de tu campo ELIMINADO es boolean o
"Verdadero/Falso".
En ese caso tu instrucción SQL es incorrecta. Debes quitarle las comillas
simples o apóstrofes.
Mejor aun, usa el valor 1 para verdadero y 0 para falso.

SELECT *
FROM Productos
WHERE PEstado = '" + item + "' AND Eliminado = 0
ORDER BY...

Salu2
MV

"Sergio Wiñar" escribió en el mensaje
news:
Estimados colegas,

Necesito si me pueden comentar algo sobre un problema que estoy teniendo.

Dentro de una base Access, tengo un campo condicional llamado Eliminado.

Cuando lanzo un listado uso la siguiente instrucción:

SELECT * FROM Productos WHERE PEstado = '"+item+"' AND Eliminado = 'False'
ORDER BY...

y sucede que no me muestra la lista, cuando solo deberia mostrar los
productos que Eliminado = False.
(si lo saco de la instruccion, si me muestra la lista, obviamente
completa)

¿Qué es lo que está pasando?

Muchas gracias
Sergio Wiñar




Respuesta Responder a este mensaje
#4 Matias Iacono
27/02/2007 - 17:45 | Informe spam
Solo acotando algo. Como te dice Manuel, usa 0 y 1. Si usas la palabra FALSE
o TRUE, si tu aplicacion va a parar a un sistema operativo en un idioma
distinto, tendras un problema.

Esto debido a que en español, en access (y no se porque lo hacen asi), la
palabra clave se transforma de FALSE a FALSO, lo que crea una inconsistencia.

Saludos.

Microsoft MVP
Orador Regional INETA


"Manuel Vera" wrote:

Hola

Imagino que el tipo de datos de tu campo ELIMINADO es boolean o
"Verdadero/Falso".
En ese caso tu instrucción SQL es incorrecta. Debes quitarle las comillas
simples o apóstrofes.
Mejor aun, usa el valor 1 para verdadero y 0 para falso.

SELECT *
FROM Productos
WHERE PEstado = '" + item + "' AND Eliminado = 0
ORDER BY...

Salu2
MV

"Sergio Wiñar" escribió en el mensaje
news:
> Estimados colegas,
>
> Necesito si me pueden comentar algo sobre un problema que estoy teniendo.
>
> Dentro de una base Access, tengo un campo condicional llamado Eliminado.
>
> Cuando lanzo un listado uso la siguiente instrucción:
>
> SELECT * FROM Productos WHERE PEstado = '"+item+"' AND Eliminado = 'False'
> ORDER BY...
>
> y sucede que no me muestra la lista, cuando solo deberia mostrar los
> productos que Eliminado = False.
> (si lo saco de la instruccion, si me muestra la lista, obviamente
> completa)
>
> ¿Qué es lo que está pasando?
>
> Muchas gracias
> Sergio Wiñar
>
>
>
>



Respuesta Responder a este mensaje
#5 Miguel Gonzalez
27/02/2007 - 19:55 | Informe spam
Añadiendo a lo dicho por Matías...

Además del "False = Falso" hay otras traducciones "hilarantes":

Not Is Null = Es Negado Nulo

De todas formas, el OLEDB (y creo que también el Driver *.mdb) invocados
desde ASP no permiten estas "traducciones".

Saludos!
Miguel


Matias Iacono escribió:
Solo acotando algo. Como te dice Manuel, usa 0 y 1. Si usas la palabra FALSE
o TRUE, si tu aplicacion va a parar a un sistema operativo en un idioma
distinto, tendras un problema.

Esto debido a que en español, en access (y no se porque lo hacen asi), la
palabra clave se transforma de FALSE a FALSO, lo que crea una inconsistencia.

Saludos.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida