MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Como resolver problema ao utilizar "INNER JOIN" no access?

    Compartilhe
    avatar
    Novato_access
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 23/03/2018

    Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Novato_access em 24/3/2018, 12:41

    Pessoal, estou com um problema no "INNER JOIN".
    Estou tentando fazer com que as informações que busco do servidor como db_produto e db_ID e incluir na tabela TB_new sem repetir o db_produto, até aí está tudo certo porém, gostaria que antes de adicionar as informações na tabela que comparace o db_ID do servidor com db_ID da tabela TB_produtos que criei e inserir na tabela TB_new o Nome no campo Nome após a comparação usando o INNER JOIN porém fiz o exemplo abaixo e ocorreu o seguinte erro:

    '............................................................................................................
    Erro em tempo de execução '3075':

    Erro de sintaxe (operador faltando) na expressão de consulta 'b.db_ID = CH124444WHERE db_produto= 0001122334'.
    '............................................................................................................



    Do While Not rsADO.EOF

    Set db = CurrentDb()
    LocalSQL = "SELECT *, b.Nome as Nome FROM [TB_new] a INNER JOIN TB_produtos b on b.db_ID = " & rsADO!db_ID & "WHERE db_produto= " & rsADO!db_produto & ""
    Set sr = db.OpenRecordset(LocalSQL)

    If sr.EOF Then
    sr.AddNew
    Else
    sr.Edit
    End If


    sr!db_produto = "" & rsADO!db_produto
    sr!Nome = sr!Nome

    sr.Update

    rsADO.MoveNext
    db.Close
    Set sr = Nothing
    Set db = Nothing
    Loop



    cn.Close
    Set rsADO = Nothing
    Set cn = Nothing
    Exit Sub

    End Sub
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  FabioPaes em 24/3/2018, 15:16

    Olá, seu SELECT está errado amigo!!!

    Comece corrigindo ele:
    SELECT *, b.Nome as Nome FROM [TB_new] a INNER JOIN TB_produtos b on b.db_ID = " & rsADO!db_ID & "WHERE db_produto= " & rsADO!db_produto & "

    Correto:
    SELECT a.*, b.Nome as Nome FROM [TB_new] As a INNER JOIN TB_produtos As b on b.db_ID = " & rsADO!db_ID & " WHERE db_produto= " & rsADO!db_produto & "

    .
    O Item destacado ( " & rsADO!db_ID & " ) Deve ser Subsistido pelo campo que faz a ligação entre as duas tabelas, A e B. Pois está utilizando Inner Join, Junção Interna.


    Ex: As b on b.db_ID = A.Campo Where.... Campo DB da tabela A é igual ao Campo xxx da tabela B




    Dica, Faça essa consulta em Modo Gráfico/Designer e veja como ela fica... Depois Leve-a ao VB.


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Novato_access
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 23/03/2018

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Novato_access em 24/3/2018, 15:54

    Tentei da forma que me passou mais também deu erro. Talvez fosse consulta entre duas tabelas daria certo porém os dados onde busco é do servidor da empresa.

    SELECT a.*, b.Nome as Nome FROM [TB_new] As a INNER JOIN TB_produtos As b on b.db_ID = a.db_ID" & "WHERE db_produto= " & rsADO!db_produto & "
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  FabioPaes em 25/3/2018, 02:06

    Faltou um Espaço antes do Where.

    SELECT a.*, b.Nome as Nome FROM [TB_new] As a INNER JOIN TB_produtos As b on b.db_ID = a.db_ID WHERE a.db_produto= " & rsADO!db_produto & ""


    db_produto é de qual tabela? A ou B?


    Veja se vai...


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Novato_access
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 23/03/2018

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Novato_access em 26/3/2018, 12:05

    Meu amigo FabioPaes, muito obrigado pelas diversas respostas. Você está me ajudando baste porém deu erro novamente Sad

    Tentei essas mesma informações como também de outras formas mais apresenta o erro:

    Erro em tempo de execeção '3061':
    Parâmetros insuficientes. Eram esperados 1.


    SELECT a.*, b.Nome as Nome FROM [TB_new] As a INNER JOIN TB_produtos As b on b.db_ID = a.db_ID WHERE a.db_produto= " & rsADO!db_produto & ""


    Esse "& rsADO!db_produto &" vem do servidor.
    Esse "a.db_produto" é tabela "TB_new" que no caso deve ficar "b.db_produto" porém tentei e também não deu certo.

    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3904
    Registrado : 14/08/2013

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  FabioPaes em 26/3/2018, 14:55

    Como não será possível anexar o Exemplo, recomendo que crie essa consulta Física sem o Filtro rsADO!db_produto

    Dessa forma, no seu código, apenas mande pegar os dados dessa consulta e aee aplique o Filtro rsADO!db_produto, Assim deverá funcionar!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1276
    Registrado : 21/01/2012

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Cláudio Más em 26/3/2018, 15:47

    Pode tentar assim também:

    SELECT a.*, b.Nome as Nome FROM [TB_new] As a INNER JOIN TB_produtos As b on b.db_ID = a.db_ID WHERE a.db_produto = '" & rsADO!db_produto & "'"
    avatar
    Novato_access
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 23/03/2018

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Novato_access em 27/3/2018, 11:41

    Pessoal, agradeço de mais a vocês por tentarem me ajudar mais ainda não consegui.

    Observação:
    Dessa forma consigo numa boa que é para não repetir o db_produto mais quando utilizo o INNER JOIN não funciona.

    "SELECT * FROM [TB_new] WHERE db_produto= " & rsADO!db_produto & ""


    Tentei dessas formas, porém não deu certo:

    SELECT a.*, b.Nome as Nome FROM [TB_new] As a INNER JOIN TB_produtos As b on b.db_ID = a.db_ID WHERE a.db_produto = '" & rsADO!db_produto & "'"

    SELECT a.*, b.Nome as Nome FROM [TB_new] As a INNER JOIN TB_produtos As b on b.db_ID = " & rsADO!db_ID & " WHERE a.db_produto = '" & rsADO!db_produto & "'"

    SELECT a.*, b.Nome as Nome FROM [TB_new] As a INNER JOIN TB_produtos As b on b.db_ID = a.db_ID"
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7030
    Registrado : 05/11/2009

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Alexandre Neves em 27/3/2018, 15:34

    Boa tarde,
    Que campos e tipo de dados tem em cada tabela? e campos de relacionamento?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    Novato_access
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 23/03/2018

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Novato_access em 28/3/2018, 12:37

    Tenho duas tabelas:
    1ª Tabela: TB_produtos que contém os campos (Nome, db_ID)

    2ª Tabela: TB_new que contém os campos (Nome, db_produto, db_ID, db_data)

    Busco as informações do servidor que tenho acesso a db_produto, db_ID e db_data.

    Consigo jogar as informações do servidor que seria (db_produto, db_ID e db_data) para a tabela "TB_new" e com esse ("SELECT * FROM [TB_new] WHERE db_produto= " & rsADO!db_produto & "") consigo sem problemas ter os dados na tabela "TB_new" sem repetir o "db_produto" porém o servidor não fornece a informações "Nome", por isso criei a tabela "TB_produtos" com o Nome de cada "db_ID" quero que ao buscar do servidor os dados que tem jogar na tabela "TB_new" fazendo o "INNER JOIN" para acrescentar também o "Nome".


    Agradeço desde já Smile

    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7030
    Registrado : 05/11/2009

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Alexandre Neves em 30/3/2018, 23:09

    Boa noite,
    Tente
    LocalSQL = "SELECT TB_new.*, Nome FROM [TB_new] INNER JOIN TB_produtos ON TB_new.db_ID=TB_produtos.db_ID WHERE db_produto= " & rsADO!db_produto


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    Novato_access
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 23/03/2018

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Novato_access em 3/4/2018, 13:42

    Com essas informações (LocalSQL = "SELECT TB_new.*, Nome FROM [TB_new] INNER JOIN TB_produtos ON TB_new.db_ID=TB_produtos.db_ID WHERE db_produto= " & rsADO!db_produto) apresentou erro:

    Erro em tempo de execução '3079':
    O campo especificado 'Nome' pode se referir a mais de uma tabela relacionada na cláusula FROM da instrução SQL.





    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7030
    Registrado : 05/11/2009

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Alexandre Neves em 3/4/2018, 20:17

    Boa noite,
    Será
    LocalSQL = "SELECT TB_new.*, TB_produtos.Nome FROM [TB_new] INNER JOIN TB_produtos ON TB_new.db_ID=TB_produtos.db_ID WHERE db_produto= " & rsADO!db_produto


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    Novato_access
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 23/03/2018

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Novato_access em 4/4/2018, 11:51

    Com essas informações (LocalSQL = "SELECT TB_new.*, TB_produtos.Nome FROM [TB_new] INNER JOIN TB_produtos ON TB_new.db_ID=TB_produtos.db_ID WHERE db_produto= " & rsADO!db_produto) apresentou erro:

    Não é possível efetuar a atualização. O banco de dados ou objeto é somente leitura.
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7030
    Registrado : 05/11/2009

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Alexandre Neves em 4/4/2018, 11:58

    Bom dia
    Isso já é problema de acesso à tabela.
    Tente ver se tem a tabela aberta, p.ex.


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    Novato_access
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 16
    Registrado : 23/03/2018

    Re: Como resolver problema ao utilizar "INNER JOIN" no access?

    Mensagem  Novato_access em 6/4/2018, 11:57

    A tabela está fechada e não tem nada somente leitura, mais muito obrigado pela ajuda. Very Happy

      Data/hora atual: 16/11/2018, 10:24