Ver Mensaje Individual
  #7 (permalink)  
Antiguo 08/08/2008, 04:33
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
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