• Viernes 29 de Marzo de 2024, 07:22

Autor Tema:  PROBLEMA CON SELECT ANIDADO  (Leído 4998 veces)

novatovenezolano

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
PROBLEMA CON SELECT ANIDADO
« en: Miércoles 7 de Agosto de 2013, 23:11 »
0
Bunas tardes amigos, les explico cual es mi problema:

tengo un formulario el cual trabaja con varios datacombo y dependiendo de cada seleccion se van cargando los demas, por ultimo tengo un combobox y en su evento click quiero q realice una consulta y me seleccione una celda y me la asigne a una caja de texto. El problema radica en q esta consulta se realiza dependiendo del text de los datacombos q ya se han cargado y los he asignado a variables, pero no logro anidar bien la consulta, y espero ver si me pueden ayudar a localizar este error.
Código: [Seleccionar]
Open "select FRECUENCIA from Frecuencia where H/L = (select H/L from Frecuencia where H/L= '"variablexancho"') and CANAL = ("select CANAL from Frecuencia where CANAL = variablecanal) and ANCHO DE BANDA =("select ANCHO_DE_BANDA from Frecuencia where ANCHO DE BANDA = '" & variableancho& "') and BANDA = ("select BANDA From Frecuencia where BANDA = ' &variablebanda &')"

De verdad agradeceria una mano q me ayude con esta consulta q se ha vuelto un acertijo para mi!!

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re:PROBLEMA CON SELECT ANIDADO
« Respuesta #1 en: Jueves 8 de Agosto de 2013, 08:30 »
0
Qué tal novatovenezolano,

No es más fácil usar una consulta SQL simple (es decir, no le veo el caso a anidar varios SELECT contra la misma tabla en cada caso):

Código: [Seleccionar]
SELECT campo1 FROM tabla1 WHERE campo1 = condicion1 AND campo2 = condicion2 AND campo3 = condicion3 AND... AND campoN = condicionN
De cualquier forma, te sugiero revises el uso de comillas simples y dobles que estás efectuando...

Saludos.

novatovenezolano

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re:PROBLEMA CON SELECT ANIDADO
« Respuesta #2 en: Viernes 9 de Agosto de 2013, 02:58 »
0
Gracias por la aclaratoria DiabloRojo, pero sigue sin realizar la consulta, voy a ser mas especifico a ver si me puedes ayudar:

1) mi tabla tiene 5 campos ( banda, anchodebanda, frecuencia, canal y sitio) los unicos campos numericos son canal y banda
 esta es la consulta
Código: [Seleccionar]
select FRECUENCIA from Frecuencia where CANAL = ' & variablecanal & ' and ANCHO_DE_BANDA = '" & variableancho & "' and BANDA = ' & variablebanda & ' and H/L = '" & sitio & "' "
pero me dice q faltan argumentos, quisiera saber cual es la frecuencia q cumple con las 4 condiciones anteriores y asignarla a un textbox y lo hago mediante este comando

Código: [Seleccionar]
Text13.Text = RSxancho.Fields("Frecuencia").Value

Espero q me puedas ayudar hermano

gabio2

  • Miembro MUY activo
  • ***
  • Mensajes: 402
  • Nacionalidad: mx
    • Ver Perfil
Re:PROBLEMA CON SELECT ANIDADO
« Respuesta #3 en: Lunes 12 de Agosto de 2013, 16:45 »
0
Estás trabajando con VB ¿no?, creo que tienes problemas de sintaxis.
Código: SQL
  1. " select FRECUENCIA from Frecuencia where CANAL =  "  & variablecanal  &" and ANCHO_DE_BANDA = '" & variableancho & "' and BANDA = '" & variablebanda & "' and H/L = '" & sitio & '" ""
  2.  

Podrías de igual forma poner parte de tú código para ver donde estás comentiendo el error.

Saludos.
@gabio87

novatovenezolano

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re:PROBLEMA CON SELECT ANIDADO
« Respuesta #4 en: Lunes 12 de Agosto de 2013, 18:45 »
0
Estás trabajando con VB ¿no?, creo que tienes problemas de sintaxis.
Código: SQL
  1. " select FRECUENCIA from Frecuencia where CANAL =  "  & variablecanal  &" and ANCHO_DE_BANDA = '" & variableancho & "' and BANDA = '" & variablebanda & "' and H/L = '" & sitio & '" ""
  2.  

Podrías de igual forma poner parte de tú código para ver donde estás comentiendo el error.

Saludos.

Explico mejor mi problema a ver si alguien me puede ayudar:
1) tengo un formulario con varios datacombos, los cuales se cargan dependiendo del valor del anterior y los hago con recordset
2) el primer datacombo selecciono la banda para que me filtre los anchos de banda con esta instrucción
Código: [Seleccionar]
Private Sub DataCombo6_Change()
With RSbanda
.Requery
.Find "BANDA = '" & CInt(DataCombo6.Text) & "' "
variablebanda = !Id
End With
With RSancho
.Requery
If .State = 1 Then .Close
.Open " select DISTINCT (ANCHO_DE_BANDA) from Frecuencia where BANDA = " & variablebanda & ""
End With
DataCombo16.Enabled = True
Set DataCombo16.RowSource = RSancho
DataCombo16.ListField = "ANCHO_DE_BANDA"
DataCombo16.DataField = "ANCHO_DE_BANDA"
End Sub

me carga perfecto los anchos de banda, y hago lo mismo con este para que me cargue los canales
Código: [Seleccionar]
Private Sub DataCombo16_Change()
With RSancho
.Requery
variableancho = DataCombo16.Text
If .State = 1 Then .Close
.Open "select distinct (CANAL) from Frecuencia where ANCHO_DE_BANDA = '" & variableancho & "' "
End With
DataCombo8.Enabled = True
Set DataCombo8.RowSource = RSancho
DataCombo8.ListField = "CANAL"
DataCombo8.DataField = "CANAL"
End Sub

y perfecto me carga los canales y selecciono uno, mi tabla tiene 5 campos: banda, frecuencia. ancho de banda, canal y sitio, el valor del sitio lo tomo de un combo que tiene en su propiedad list los valores H y L, lo que quiero hacer es que al seleccionar por ultimo el sitio me envíe a una caja de texto el valor de esa frecuencia, ya que una frecuencia puede estar en h o l y lo hago en el evento click del combo con este código:

Código: [Seleccionar]
Private Sub Combo1_Change()
With RSxancho
.Requery
variablecanal = CInt(DataCombo8.Text)
sitio = Combo1.Text
variableancho = DataCombo16.Text
If .State = 1 Then .Close
.Open "select FRECUENCIA from Frecuencia where CANAL = " & variablecanal & " and H/L = '" & sitio & "' and ANCHO_DE_BANDA = '" & variableancho & "' and BANDA = " & variablebanda & " "
Text13.Text = RSxancho.Fields("Frecuencia").Value
End With
End Sub

pero no me realiza la consulta, no se han especificado valores para alguno de los parámetros requeridos y no se realmente donde radicara el problema.
 
Agradecería que alguien pueda ayudarme

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:PROBLEMA CON SELECT ANIDADO
« Respuesta #5 en: Martes 13 de Agosto de 2013, 02:50 »
0
Hola novatovenezolano

Te voy a pedir un favor primero, regresa a tus mensajes anteriores y EDITA TU CODIGO separandolo en lineas no mayores a 90 caracteres por linea. Ejemplo:

Código: [Seleccionar]
Open "select FRECUENCIA from Frecuencia where H/L = (select H/L from Frecuencia
where H/L= '"variablexancho"') and CANAL = ("select CANAL from Frecuencia
where CANAL = variablecanal) and ANCHO DE BANDA =
("select ANCHO_DE_BANDA from Frecuencia
where ANCHO DE BANDA = '" & variableancho& "') and BANDA =
("select BANDA From Frecuencia where BANDA = ' &variablebanda &')"

Esto es debido a que tu codigo tiene lineas tan largas, que descuadra por completo el foro y dificulta poder verlo de manera correcta.

Ahora referente a tu problema, me parece que el error esta aqui:

Código: [Seleccionar]
and H/L =

Que cosa es H/L? ¿que es lo que querias hacer? me parece que los nombres de campo no pueden llevar diagonal / si querias escribir HL ponlo sin la diagonal.

Ahora, si H es un campo de la base de datos, y L es otro campo, no puedes preguntar por los dos campos de esa manera, es incorrecto, en todo caso la consulta para pregunta por los dos campos en SQL seria:

Código: [Seleccionar]
and (H = valor_que_quieres or L = valor_que_quieres)

Espero que eso resuelva tu problema.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

novatovenezolano

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re:PROBLEMA CON SELECT ANIDADO
« Respuesta #6 en: Martes 13 de Agosto de 2013, 18:39 »
0
Muchas gracias a todos. ya logre solventar el problema con solo declarar las variables integer como double!! y tambien hice la correccion del nombre del campo de
la tabla con diagonal