08/08/2008, 04:33
|
Colaborador | | Fecha de Ingreso: marzo-2008 Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses Puntos: 574 | |
Respuesta: Consultas sql en access Mientras escribia este rollo veo que ya has encontrado una parte de la solución....
Esto es lo que te proponia... EDIFICIOS Edificio provincia Excepcion
Madrid MADRID 0
Avila AVILA 0
Segovia SEGOVIA 1
Santa Cruz TENERIFE 0
Salamanca SALAMANCA 0
Merida BADAJOZ 0
Toledo TOLEDO 1
Ciudad Real CIUDAD REAL 0
Caceres CACERES 0
Gran Canaria LAS PALMAS 0
Barcelona BARCELONA 0
Logrono LA RIOJA 0
Santander CANTABRIA 0
DONOSTIA GUIPUZCOA 0
Bilbao VIZCAYA 0
Vitoria ALAVA 0
Burgos BURGOS 0
Pamplona NAVARRA 0
Guadalajara GUADALAJARA 0
Almeria ALMERIA 0
Malaga MALAGA 0
Jaen JAEN 1
Sevilla SEVILLA 0
Jerez CADIZ 0
Cordoba CORDOBA 0
Granada GRANADA 0
Huelva HUELVA 0
Valencia VALENCIA 0
Castellon CASTELLON 0
Alicante ALICANTE 0
Albacete ALBACETE 0
Murcia MURCIA 0
Cuenca CUENCA 1
Palma MALLORCA 0
Girona GIRONA 0
Lleida LLEIDA 0
Huesca HUESCA 1
Soria SORIA 1
Zaragoza ZARAGOZA 0
Tarragona TARRAGONA 0
Teruel TERUEL 1
Palencia PALENCIA 1
Zamora ZAMORA 0
A Coruna A CORUÑA 0
Lugo LUGO 1
Valladolid VALLADOLID 0
Gijon GIJON 0
Vigo VIGO 0
Leon LEON 0
Orense ORENSE 0
Logroño LOGROÑO 1
Te faltaba Logroño...(creo)
A ver creo que tienes lagunas de base:
Primero yo no trabajaria con el nombre de la provincia como identificador, usaria una tabla provincias
id_Prov Nombre
8 Barcelona
...
luego tanto edficios como poblaciones seria Edificios
edificio id_prov excepcion
Barcelona 8 0
... Poblaciones
Municipio id_Prv
Sabadell 8
....
Vamos a ver tu codigo
Dim db As DAO.Database 'Creas el objeto base de datos
Dim strSQL As String 'Creas una variable cadena de caracteres
Dim strSQL2 As String 'Creas una variable cadena de caracteres
Dim strCarpeta As String ' Idem
Dim strBaseDatos As String ' Idem
Dim strTabla1 As String ' Idem
Dim strTabla2 As String ' Idem 'Llenas con un valor las variables cadena
strCarpeta = CurrentProject.Path
strBaseDatos = strCarpeta & "\Cálculo_Alquiler.mdb"
strTabla1 = "poblaciones"
strTabla2 = "edificios" 'Le asignas al objeto base de datos su recurso
'C:\...loquesea...\Cálculo_Alquiler.mdb
Set db = OpenDatabase(strBaseDatos) 'Das valor a otra cadena de caracteres
strSQL = "SELECT provincia FROM strTabla1 WHERE poblacion = '" & Me.Cuadro_combinado4 & "'; " 'El MsgBox te muestra el contenido de strSQL una cadena de caracteres
'Supongamos que Me.Cuadro_combinado4 es igtual a Sabadell
'El resultado del MsgBox será:
'SELECT provincia FROM strTabla1 WHERE poblacion = 'Sabadell';
'cuando deberia ser
'SELECT provincia FROM poblaciones WHERE poblacion = 'Sabadell';
MsgBox strSQL
strSQL = "SELECT provincia FROM " & strTabla1 & " WHERE poblacion = '" & Me.Cuadro_combinado4 & "'; "
MsgBox strSQL 'Ahora?
strSQL = "SELECT edificio FROM strTabla2 WHERE provincia = & strSQL &" 'Si intentas aquí el MsgBox obtienes 'SELECT edificio FROM strTabla2 WHERE provincia = SELECT provincia FROM strTabla1 WHERE poblacion = 'Sabadell'
'Lo cual no tiene sentido
Cuando asignas un valor a una cadena de texto solo estas haciendo eso dar un valor al texto, si ese texto es o no una sentencia SQL al compilador le da igual puesto que tiene definida una variable de texto y le asignas un texto...
Por eso el MsgBox responde con la sentencia SQL en vez de Barcelona en el caso de Sabadell.
Tienes que decirle al programa que eso se puede ejecutar y que lo ejecute si no simplemente es un texto.... Mientras escribia este rollo veo que ya has encontrado una parte de la solución....
Ahora tu error es usar el objeto recordset como si fuera una variable normal
Intenta esto
Set TLB = db.OpenRecordset("Select provincia FROM poblaciones WHERE poblacion = '" & Me.Cuadro_combinado4 & "'")
Set TLB2 = db.OpenRecordset("SELECT edificio FROM dirección_POPS WHERE provincia=' & TLB!provincia & ' ")
o esto
strSQL="Select TablaEdificios.edificio, " & _
"TablaPoblaciones.provincia, " & _
"TablaEdificios.excepcion " & _
"FROM (TablaPoblaciones LEFT JOIN TablaEdificios " & _
"ON TablaPoblaciones.provincia=TablaEdificios.provinci a) " & _
"WHERE TablaPoblaciones.poblacion = '" & Me.Cuadro_combinado4 & "';"
Set TLB = db.OpenRecordset(strSQL)
MsgBox "Edificio " & TLB!edificio & " Provincia " & TLB!provincia & " Excepcion " & TLB!excepcion
Quim |