Foros del Web » Programando para Internet » ASP Clásico »

Ayuda con sentencia SQL

Estas en el tema de Ayuda con sentencia SQL en el foro de ASP Clásico en Foros del Web. Saludos: En ACCESS tengo un campo que se llama plato_dia con tipo de dato: Si/No La consulta es la siguiente: Command.CommandText= "SELECT plato_nombre, plato_dia, plato_precio ...
  #1 (permalink)  
Antiguo 19/10/2005, 10:13
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
Ayuda con sentencia SQL

Saludos:
En ACCESS tengo un campo que se llama plato_dia con tipo de dato: Si/No

La consulta es la siguiente:

Command.CommandText= "SELECT plato_nombre, plato_dia, plato_precio FROM carta_comidas where plato_idioma='" &plato_idioma& "' and plato_tipo = '"&Valor_plato_tipo&"' and plato_dia = '1' order by plato_tipo"


Debo seleccionar los platos donde el valor Plato_dia=True (1).

La consulta me devuelve el siguiente error: No coinciden los tipos de datos en la expresión de criterios.

Muchas gracias a todos
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #2 (permalink)  
Antiguo 19/10/2005, 10:31
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
...and plato_dia = 1 ...

sin los apóstrofes, porque es un tipo de dato numérico.
Igual no recuerdo si en vez de uno tenés que colocar -1

...and plato_dia = -1 ...

bueno, podrías colocar también: ...and plato_dia <> 0 ...
__________________
...___...
  #3 (permalink)  
Antiguo 19/10/2005, 11:42
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
He probado como me has dicho de las dos formas y no me da procesado la página es como si entrase en un bucle.
La he dejado así:

"SELECT plato_nombre, plato_dia, plato_precio FROM carta_comidas where plato_idioma='" &plato_idioma& "' and plato_tipo = '"&Valor_plato_tipo&"' and plato_dia <> 0 order by plato_tipo"


también he probado:

plato_dia <> -1


y no hay manera.
Gracias
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #4 (permalink)  
Antiguo 19/10/2005, 12:05
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Como si entrase en un bucle?
¿Estás seguro que pusiste el Rs.MoveNext antes del loop (o del wend)? :)

(pregunto porque justamente me acaba de pasar que olvidé de ponerlo =)
__________________
...___...
  #5 (permalink)  
Antiguo 19/10/2005, 12:07
Avatar de meru-kun  
Fecha de Ingreso: noviembre-2002
Ubicación: Madrid
Mensajes: 854
Antigüedad: 21 años, 6 meses
Puntos: 0
Prueba con plato_dia=True .
Los boolean son 0/1 , False/True (creo xD)
__________________
Tu portal de manga y anime.
  #6 (permalink)  
Antiguo 19/10/2005, 12:20
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
Cita:
Iniciado por meru-kun
Prueba con plato_dia=True .
Los boolean son 0/1 , False/True (creo xD)
Ocurre que, creo, access puede interpretar el True/False erróneamente dependiendo de la configuración regional. Por eso es conveniente usar los valores numéricos. Además, si debés migrar la base de datos a SQLServer, luego debés modificarlo. Leete este estracto de What are the main differences between Access and SQL Server? (aspfaq.com)



Cita:
Switching from Yes/No to BIT

In Access, you could use integers or TRUE/FALSE keywords to determine the value of the column. In SQL Server, and especially during migration, you should use integer values only. So here are some sample queries; note that the SQL Server queries will work Access as well.

-- DETERMINING TRUE

-- Access:
[...] WHERE ynColumn = TRUE
[...] WHERE ynColumn = -1 (pues si, era -1 )

-- SQL Server:
[...] WHERE ynColumn <> 0

------------------------------

-- DETERMINING FALSE

-- Access:
[...] WHERE ynColumn = FALSE
[...] WHERE ynColumn = 0

-- SQL Server:
[...] WHERE ynColumn = 0
Saludos
__________________
...___...
  #7 (permalink)  
Antiguo 19/10/2005, 12:22
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
En principio parto de la base de que la pagina está bien hecha, puesto que si elimino de la sentencia sql:
and plato_dia = True

me devuelve todos los platos, el problema viene al añadir a la sentencia de SQL el texto de arriba. He probado:
and plato_dia = 0
and plato_dia = -1

y nada....
Gracias
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #8 (permalink)  
Antiguo 19/10/2005, 12:38
 
Fecha de Ingreso: junio-2005
Mensajes: 114
Antigüedad: 19 años
Puntos: 0
Al final probaste alguna vez la condición como

" and Plato_dia=True "

Yo acostumbro crear las consultas en modo diseño de Access y fijarme en la vista SQL para ver como queda la instrucción.

Slds. Edum.
  #9 (permalink)  
Antiguo 19/10/2005, 12:48
 
Fecha de Ingreso: junio-2003
Ubicación: Santiago de Compostela
Mensajes: 603
Antigüedad: 21 años
Puntos: 0
He conseguido que me funcione con =true
pero solo me funciona si utilizo el idioma italiano, en cualquiera de los otros dos idiomas: español o inglés no me va.

Paso el código para ver si así puden indicarme cual puede ser el problema:
-----------------------
Código:
<%if select_idioma = "" then
 
 'Conexión a dsn con ACCESS 
 Set Conn= Server.CreateObject("ADODB.Connection")
 Set Command= Server.CreateObject("ADODB.Command")
 Conn.open "DSN=galandum.com"
 Command.ActiveConnection=Conn
 Command.CommandType=adCmdText 
 Command.CommandText= "SELECT distinct plato_idioma FROM carta_comidas order by plato_idioma"
 Set rs_plato_idioma=Command.Execute ()
 <!-- 'Fin conexion a dsn con ACCESS -->%>
 
 <form name="form1" method="post" action="carta_comidas.asp">
   <select name="select_idioma" id="select_idioma">
   <option selected="""">Seleccione idioma</option>
   <%rs_plato_idioma.movefirst
   do until rs_plato_idioma.eof%>
   <option value="<%=rs_plato_idioma("plato_idioma")%>"><%=rs_plato_idioma("plato_idioma")%></option>
  <%rs_plato_idioma.movenext
   loop%>
   </select>
   <input type="submit" value="Selecciona idioma">
 </form>
 
 
 <%dim plato_idioma
 'Recogemos el valor de selec_idioma
 plato_idioma=request.form("select_idioma")
 plato_idioma=server.HTMLEncode(plato_idioma)
 
 'response.write plato_idioma 
 Command.CommandText= "SELECT distinct plato_tipo FROM carta_comidas where plato_idioma='" &plato_idioma& "'"
 Set rs_plato_tipo=Command.Execute ()
 
 if rs_plato_tipo.eof or rs_plato_tipo.bof then
  'response.write "no hay registros en la base de datos"
 else%>
  <table width="100%" border="1">
   <%rs_plato_tipo.movefirst
   Do While Not rs_plato_tipo.EOF%>
    <tr>
    <td>
    <%response.write "<strong>" & rs_plato_tipo("plato_tipo") & "</strong>"%>
    </td>
    </tr>
    <%Valor_plato_tipo = rs_plato_tipo("plato_tipo")
    'plato_dia=True
    'response.write plato_dia
    
    'response.write "valor_plato_tipo= " &  valor_plato_tipo
    Command.CommandText= "SELECT plato_nombre, plato_dia, plato_precio FROM carta_comidas where plato_idioma='" &plato_idioma& "' and plato_tipo = '"&Valor_plato_tipo&"' and plato_dia = True order by plato_tipo"
 
 

    Set rs_plato_nombre=Command.Execute ()
    if rs_plato_nombre.eof or rs_plato_nombre.bof then
     response.write "no hay ningún plato en la base de datos"
    else%>
     <%Do While Not rs_plato_nombre.EOF%>
      <tr>
      <td><%=rs_plato_nombre("plato_nombre")%></td>
      <td><%=rs_plato_nombre("plato_precio") & "€"%></td>
      <td><%=rs_plato_nombre("plato_dia")%></td>
      </tr>
      <%rs_plato_nombre.MoveNext 
     loop%>                                              
     <%rs_plato_tipo.MoveNext 
    end if
   loop%> 
  </table>
 <%end if%>
 <%rs_plato_idioma.close
 rs_plato_tipo.close
 conn.close 
else 
 response.write "hola"
end if%>
Gracias por todo
__________________

Espero haber aprendido algo de tí.
A mi padre.
  #10 (permalink)  
Antiguo 19/10/2005, 14:16
 
Fecha de Ingreso: junio-2005
Mensajes: 114
Antigüedad: 19 años
Puntos: 0
creo recordar que también probé una vez en español y funcionó con

"= Sí "

Eso fue el día que decidí nunca más utilizar estas putas variables de tipo booleano en las que no se han puesto de acuerdo entre los distintos motores.
Más allá de que es incorrecto no usar los tipos de datos que corresponden, a la hora de hacer consultas que resulten portables entre distintos motores conviene usar un numérico o una cadena de un único caracter para las booleanas, y establecer tu propia norma (que es lo que yo hago).
Slds. Edum.
  #11 (permalink)  
Antiguo 19/10/2005, 14:24
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Cita:
Iniciado por edumferreyra
Más allá de que es incorrecto no usar los tipos de datos que corresponden, a la hora de hacer consultas que resulten portables entre distintos motores conviene usar un numérico o una cadena de un único caracter para las booleanas, y establecer tu propia norma (que es lo que yo hago).
Exacto!!
Este es un punto que se presto a debate hace algun tiempo (aka Neuron ), lo mejor cuando tienes que lidiar con este tipo de variables, es utilizar su tipo primitivo, que finalmente no es mas que un entero para los booleanos que toma valores de 0 y 1

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:28.