Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   No me aparece mi tabla completa (https://www.clubdelphi.com/foros/showthread.php?t=28285)

Nbull 15-12-2005 09:18:14

No me aparece mi tabla completa
 
Hola a tod@s, estoy programando en delphi 7 con Access, hago uso de componentes Ado.

Vale, mi problema es que tengo dos tablas en una(la tabla se llama Tema) tengo dos campos [Registro] y [TEMA], en la otra tengo todos los datos [Cliente][Direccion]....[etc] tambien tengo el campo [Registro] tipo Número.

Bien el problema es que he hecho una unión de las dos tablas como en otro hilo me explico Neftalí(Un saludo) con el siguiente código:

Código SQL [-]
size="1">SELECT Archivo.* , Tema.*

FROM Archivo

INNER JOIN Tema

ON Archivo.Registro2=tema.Registro2;


Eso lo tengo asociado a mi Dbgrid, en un principio funcionaba bien con esa tabla, pero,ahora tengo otra tabla que tambien he de unir con la Tabla Tema y asociarla a otro DbGrid y si hago la misma consulta que he escrito arriba solo me muestra los registros que contienen algo en el Campo Tema los demás no me los muestra.

Si hago una consulta del tipo:

Código SQL [-]
SELECT *
FROM Master;
Me aparecen 2000 registros mas o menos pero si hago :

Código SQL [-]
size="1">SELECT Master.* , Tema.*

FROM Master

INNER JOIN Tema

ON Master.Registro2=tema.Registro2;

Que es la misma que en la otra tabla solo me muestra 1000 y pico que son los que el cliente ha puesto algo en el campo Tema los demás no me los muestra.

No se si alguien sabe como puedo solucionarlo, de todas formas gracias por el tiempo que me dedicais siempre.

Un Saludo a todos los Forer@s.

Nelet 15-12-2005 10:41:47

Prueba asi:
Código SQL [-]
SELECT Master.* , Tema.*

FROM Master

LEFT OUTER JOIN Tema

ON Master.Registro2=tema.Registro2;

Nbull 15-12-2005 10:56:35

Nelet Funcionó, muchisimas gracias.

Me podrias explicar que consigo poniendo

Código SQL [-]
LEFT OUTER JOIN Tema

Es para saber cuando lo tengo que utilizar.

Ante todo muchas gracias por que estaba poniendo mi tabla patas arriba probando cosas.

Un saludo.;)

Nelet 15-12-2005 10:59:33

El LEFT OUTER JOIN indica a la base de datos que tiene que traerse todas las filas de la tabla de la derecha y solo las filas de la tabla de la izquierda en las que se de la igualdad, con lo que tendras las filas de la tabla derecha con datos y las de la izquierda que no cumplan la igualdad las tendras a null.

El RIGHT OUTER JOIN es lo mismo pero con la tabla derecha con todos los datos.

Nbull 15-12-2005 11:19:20

Muchisimas Gracias Nelet.

Perdona que abuse de tu confianza, pero mira tengo otro problemilla con las sentencias SQL.Tengo que hacer lo mismo que he hecho con la tabla Temas, pero con otra tabla, y las he de unir las dos en la tabla archivo.

Tengo el siguiente codigo
Código SQL [-]
size="1">SELECT Archivo.* , Tema.*,Formato.*
 
FROM Archivo
 
LEFT OUTER JOIN Tema
 
ON Archivo.Registro2=tema.Registro2
 
LEFT OUTER JOIN Formato
 
ON Archivo.Id=Formato.Id;
 

Me da un error de sintaxis(falta operador) en la expresion de consulta:

Código SQL [-]
ON Archivo.Registro2=tema.Registro2
 
LEFT OUTER JOIN Formato
 
ON Archivo.Id=Formato.Id;

Segun he leido y me han dicho, se pueden anidar JOIN sin problemas pero es que no se que operador me falta.

Gracias por tu ayuda.

Nelet 15-12-2005 12:11:03

Hoy me has pillado curiosón. Y acces hace cosas raras y curiosas.
¿Has probado a confeccionar la consulta en el diseñador de acces?.
Si lo haces puedes unir los campos y después dándole con el botón derecho en las flechitas de las relaciones se puede definir el tipo de JOIN.
Pos bueno...tu consulta así como está al señorito access no le parece bien (al señor SQL-Server si...). La he hecho con el diseñador utilizando tablas mias y me he encontrado con que Access pone unos paréntesis en el primer join. Tu consulta quedaría de la siguiente forma:

Código SQL [-]
SELECT Archivo.* , Tema.*,Formato.*
 
FROM (Archivo
 
LEFT OUTER JOIN Tema
 
ON Archivo.Registro2=tema.Registro2)
 
LEFT OUTER JOIN Formato
 
ON Archivo.Id=Formato.Id;

Y de paso también me he dado cuenta que el OUTER no es necesario...

Nbull 15-12-2005 13:47:19

Muchisimas gracias por fin funciono, me he estado volviendo loco y al final era una tonteria de parentesis, eah!! asi es la informática las cosas mas sencillas pueden llegar a convertirse en muy complejas,jeje.


Gracias tio por tu ayuda.Un saludo.


La franja horaria es GMT +2. Ahora son las 03:13:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi