hilpers


  hilpers > microsoft.* > microsoft.vb

 #1  
01-03-2010, 14:29
Gonzalo García
Buenas, tengo que hacer una consulta a dos tablas, estoy usando esto:

strSQLEContactos = "SELECT Escuelas.* , Contactos.* FROM Escuelas,Contactos
WHERE (Escuelas.NombreEscuela = '" & lstEscuelas.Text & "') AND
(Escuelas.CodigoEscuela = Contactos.CodigoEscuela)

El problema es cuando existen registros en una tabla que cumple la condicion
pero en la otra tabla no existe ningun registro, obviamente me salta el error
de Ningun Registro Activo. Asi que trate de usar esto;

strSQLEContactos = "SELECT Escuelas.* , Contactos.* FROM Escuelas,Contactos
WHERE ((Escuelas.NombreEscuela = '" & lstEscuelas.Text & "') AND
(Escuelas.CodigoEscuela = Contactos.CodigoEscuela)) OR Escuelas.NombreEscuela
= '" & lstEscuelas.Text & "'"

Pero tampoco hay caso, me mezcla los registros.
Desde ya muchas gracias.

Gonzalo
 #2  
01-03-2010, 14:46
Leonardo Azpurua
"Gonzalo García" <GonzaloGarca> escribió en el
mensaje news:0f1a
[..]
>
> strSQLEContactos = "SELECT Escuelas.* , Contactos.* FROM
> Escuelas,Contactos
> WHERE ((Escuelas.NombreEscuela = '" & lstEscuelas.Text & "') AND
> (Escuelas.CodigoEscuela = Contactos.CodigoEscuela)) OR
> Escuelas.NombreEscuela
> = '" & lstEscuelas.Text & "'"
>
> Pero tampoco hay caso, me mezcla los registros.
> Desde ya muchas gracias.


Hola,

Debes usar un LEFT JOIN:

"SELECT Escuelas.*, Contactos.* " & _
FROM Escuelas LEFT JOIN Contactos " & _
ON Escuelas.CodigoEscuela = Contactos.CodigoEscuela " & _
"WHERE Escuela.NombreEscuela = '" & lstEscuelas.Text & "'"

Salud!
 #3  
01-03-2010, 17:47
Saga
Solo una recomendacion Gonzalo.
Nota como Leonardo uso el sintaxis LEFT JOIN y ON. En lugar de especificar

FROM Escuelas,Contactos

El SQL especifica una sola tabla en la clausula FROM y luego usa LEFT JOIN
para especificar la segunda tabla. Este es el metodo preferido porque las
versiones
mas nuevas de SQL Server (asumiendo que estas usando este producto) estan
dejando de soportar el sintaxis tal como lo usaste. Ahora es buen momento de
aprender a usar este nuevo metodo. Seguramente te evitara problemas en el
futuro. Saga


"Leonardo Azpurua" <l e o n a r d o (arroba) e x m v p s (punto) o r g>
wrote in message news:a800
[..]
 #4  
01-03-2010, 19:03
Gonzalo García
Gracias Saga por el consejo. De todas maneras, si es correcta la ultima
instrucción, no logro solucionar el problema cuando la tabla de la derecha
no tiene ningún registro relacionado a la primera tabla. A mi parecer, esta
mal el código en VB cuando quiero volcar los datos en los textbox. Ya que
solo NO me genera el error 3021 cuando le hay exactamente 3 registros de
contactos relacionados a la tabla Escuelas. En el caso de que haya uno, dos o
ningun registro en la tabla contactos relacionado a la tabla Escuela me salta
el error 3021.
Uso EOF pero lo pasa de largo como si existiese un registro, y abro mi base
y no hay ninguno.

Gracias nuevamente,,,

Gonzalo

"Saga" wrote:
[..]
 #5  
01-03-2010, 19:07
Gonzalo García
Me olvide de decirte que estoy usando Access 2007.

Bye bye

"Gonzalo García" wrote:
[..]
 #6  
01-03-2010, 22:18
Leonardo Azpurua
"Gonzalo García" <GonzaloGarca> escribió en el
mensaje news:911f
> Gracias Saga por el consejo. De todas maneras, si es correcta la ultima
> instrucción, no logro solucionar el problema cuando la tabla de la derecha
> no tiene ningún registro relacionado a la primera tabla. A mi parecer,
> esta
> mal el código en VB cuando quiero volcar los datos en los textbox. Ya que
> solo NO me genera el error 3021 cuando le hay exactamente 3 registros de
> contactos relacionados a la tabla Escuelas. En el caso de que haya uno,
> dos o
> ningun registro en la tabla contactos relacionado a la tabla Escuela me
> salta
> el error 3021.
> Uso EOF pero lo pasa de largo como si existiese un registro, y abro mi
> base
> y no hay ninguno.



Hola,

Pega el código que usas, porque cada vez se entiende menos.


Salud
 #7  
02-03-2010, 11:18
Victor Koch
Creo que estamos ante un caso del "Típico de la evolución reciente de las
herramientas:"

La franja horaria es GMT. Ahora son las 03:41. | Privacy Policy