Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leozeferino

RELACIONAMENTO INNER JOIN

Recommended Posts

Olá. Estou fazendo um sisteminha da seguinte maneira. Existem duas tabelas "Textos" e "Autor". Na tabela Textos tem o ID do Autor e gostaria que ele puxasse o nome do Autor da tabela Autor.

 

Então fiz um relacionamento entre o ID do Autor da tabela Texto com o ID do Autor da tabela Autor e ficou da seguinte maneira:

ASP

[*]SQL="SELECT * FROM Autor INNER JOIN Textos ON Autor.Autor_ID = Textos.Autor_ID WHERE (Textos.Autor_ID)=18" 

 

[*]rstPub.Open sSQL, Conexao,3,3

 

Porém, dá o seguinte erro:

"Microsoft OLE DB Provider for ODBC Drivers (0x80004005)

[Microsoft][Driver ODBC para Microsoft Access] Tipo não coincidente na expressão."

 

Não consigo ver nenhum erro. Já fiz o relacionamento das tabelas no access porém continua assim.

 

Alguém pode me ajudar?

 

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

ASP

[*]SQL="SELECT * FROM Autor INNER JOIN Textos ON Autor.Autor_ID = Textos.Autor_ID WHERE Textos.Autor_ID=18" 

 

[*]

 

[*]rstPub.Open sSQL, Conexao,3,3

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

ASP

[*]SQL="SELECT * FROM Autor INNER JOIN Textos ON Autor.Autor_ID = Textos.Autor_ID WHERE Textos.Autor_ID=18" <br /><br />rstPub.Open sSQL, Conexao,3,3

<{POST_SNAPBACK}>

Continua na mesma. Acho que estou fazendo alguma coisa de errado na tag INNER JOIN ou lá no banco de dados. Como teria que estar configurado o banco de dados (os relacionamentos...)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os campos

Autor.Autor_IDTextos.Autor_ID

São do mesmo tipo...Confirme isso no Banco.

E se forem verifique se o segundo (Textos.Autor_ID), é do tipo numérico, se não for utilize as aspas para fazer a consulta na cláusula where.

Compartilhar este post


Link para o post
Compartilhar em outros sites

do jeito que você fez só funcionaria se Textos.Autor_ID fosse do mesmo tipo de Autor.Autor_ID e ao mesmo tempo booleano...você deve fazer mais ou menos como o plasma disse só que informando um valor de id que exista pois ele colocou um exemplo que pode não ter em seu db

Compartilhar este post


Link para o post
Compartilhar em outros sites

do jeito que você fez só funcionaria se Textos.Autor_ID fosse do mesmo tipo de Autor.Autor_ID e ao mesmo tempo booleano...

 

você deve fazer mais ou menos como o plasma disse só que informando um valor de id que exista pois ele colocou um exemplo que pode não ter em seu db

<{POST_SNAPBACK}>

Hum, não tinha colocado no campo "Texto.Autor_ID" como númerico.

Só que agora está dando outro problema.

O código está da seguinte maneira:

ASP

[*]

 

[*]Set rstPub Server.CreateObject("ADODB.Recordset")

 

[*]

 

[*] rstPub.cursorlocation=2

 

[*] rstPub.cursortype=1

 

[*] rstPub.locktype=3 

 

[*]

 

[*]SQL="SELECT * FROM Autor INNER JOIN Textos ON Autor.Autor_ID = Textos.Autor_ID ORDER BY Texto.Texto_ID ASC"

 

[*]rstPub.Open SQL, Conexao,1,1

 

[*]

 

Os campos estão configurados da seguinte maneira:

Autor.Autor_ID - auto numeração

Texto.Autor_ID - numérico

O relacionamento está feito da tabela Texto para o Autor (não sei se isso é importante).

Estou achando também que o problema deve estar nesses números (1,1) da conexão.. não sei pra que isso serve e nunca soube configura-lo direito.

 

Se você puder me ajudar...

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim, com os cursores como 3,3

e pode tirar as outras declarações que você colocou sobre cursores,afinal você não esta usando elas.

ASP

[*]

 

[*]rstPub.Open SQL, Conexao,3,3

 

[*]

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim, com os cursores como 3,3

e pode tirar as outras declarações que você colocou sobre cursores,afinal você não esta usando elas.

ASP

[*]rstPub.Open SQL, Conexao,3,3

<{POST_SNAPBACK}>

Tentei, mas daí da o seguinte erro:

ADODB.Recordset (0x800A0CC1)

O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado.

 

O que pode ser???

As configurações que fiz no banco de dados e os codigos estão listados num post meu acima.

 

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei, mas daí da o seguinte erro:

ADODB.Recordset (0x800A0CC1)

O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado.

 

O que pode ser???

As configurações que fiz no banco de dados e os codigos estão listados num post meu acima.

 

Obrigado desde já.

<{POST_SNAPBACK}>

Deu certoooo, deu certo!

 

Tinha feito uma besteirinha.

 

Só pra saber, como faço agora para retornar valores de cada tabela?

<%=rstPub("Nome")%> ou algo do tipo <%=rstPub("Autor.Nome")%>??

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei, mas daí da o seguinte erro:

ADODB.Recordset (0x800A0CC1)

O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado.

 

O que pode ser???

As configurações que fiz no banco de dados e os codigos estão listados num post meu acima.

 

Obrigado desde já.

Deu certoooo, deu certo!

 

Tinha feito uma besteirinha.

 

Só pra saber, como faço agora para retornar valores de cada tabela?

<%=rstPub("Nome")%> ou algo do tipo <%=rstPub("Autor.Nome")%>??

 

Obrigado!

bem cara o erro apresentado anteriormente indica que você estava tentando recuperar um campo que você não selecionou

 

você sempre deve recuperar os dados usando nome do RS e o campo

 

rs("campo")

 

a sintaxe completa seria rs.fields("campo").value, mas como fiels e value são defalt você pode oculta-los e fica mais simples

 

caso você queira selecionar campos de tabela diferentes que tenha o mesmo nome é recomendavel o uso de alias assim

 

SELECT TB1.NOME AS NOME1, TB2.NOME AS NOME2 FROM TB1 INNER JOIN TB2 ON TB1.NOME=TB2.NOME

 

ai você recupera assim

 

Nome1 = RS("NOME1") e não RS("TB1.NOME")

 

Nome2 = RS("NOME2") e não RS("TB2.NOME")

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.