MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

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

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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


2 participantes

    Mesclagem de RecordSets

    avatar
    fonazo
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 30/08/2019

    Mesclagem de RecordSets Empty Mesclagem de RecordSets

    Mensagem  fonazo Qui 19 Mar - 9:55

    Bom dia Pessoal!

    Gostaria de uma ajuda da galera do grupo...

    Tenho 4 tabelas com os seguintes campos:

    1)  TB_1: CHAVE | ESTAÇÃO | CONSTRUTORA
    2)  TB_2: CHAVE | ESTAÇÃO | PROJETO
    3)  TB_3: CHAVE | ANALISTA
    4)  TB_4: CHAVE | FISCAL

    Preciso visualizá-las em uma única tabela, com o campo CHAVE em comum, só que tenho registros exclusivos ou não, nas TB_1 e TB_2.
    Nas TB_3 e TB_4, todos os registros estão contidos em uma das anteriores.

    Fiz o seguinte:
    Código:
    xBancoAtual.Execute "DELETE * FROM TB_5"

    xBancoAtual.Execute "INSERT INTO TB_5 (CHAVE, ESTAÇÃO, CONSTRUTORA, PROJETO, ANALISTA, FISCAL) " _
    & "SELECT Nz(TB_1.CHAVE, TB_2.CHAVE) as CHAVE, Nz(TB_1.ESTAÇÃO, TB_2.ESTAÇÃO) as ESTAÇÃO, TB_1.CONSTRUTORA, TB_2.PROJETO, TB_3.ANALISTA, TB_4.FISCAL " _
    & "FROM TB_2 LEFT JOIN (TB_3 RIGHT JOIN (TB_4 RIGHT JOIN TB_1 ON TB_4.CHAVE = TB_1.CHAVE) ON TB_3.CHAVE=TB_1.CHAVE) ON TB_2.CHAVE=TB_1.CHAVE " _
    & "WHERE NOT TB_2.CHAVE IS NULL;"

    xBancoAtual.Execute "INSERT INTO TB_5 (CHAVE, ESTAÇÃO, CONSTRUTORA, PROJETO, ANALISTA, FISCAL) " _
    & "SELECT TB_1.CHAVE, TB_1.ESTAÇÃO, TB_1.CONSTRUTORA, '-', TB_3.ANALISTA, TB_4.FISCAL " _
    & "FROM TB_2 RIGHT JOIN (TB_3 RIGHT JOIN (TB_4 RIGHT JOIN TB_1 ON TB_4.CHAVE = TB_1.CHAVE) ON TB_3.CHAVE=TB_1.CHAVE) ON TB_2.CHAVE=TB_1.CHAVE " _
    & "WHERE TB_2.CHAVE IS NULL;"

    Só que ficou muito lento (de 2 a 4 min), uma vez que cada tabela dessa tem +/- 100mil registros. Quase sempre tbm, fecha o Access sozinho durante essa execução. Elas estão em rede, exceto a TB_5, que crio ela local, justamente para ficar "mais rápido"... rs

    Eu não preciso necessariamente criar uma nova tabela, preciso apenas carregar todas essas informações mescladas num subformulário para consulta. Essa maneira que fiz foi a maneira que consegui.

    Teria alguma outra maneira de eu fazer isso de forma mais rápida e eficiente???

    Desde já agradeço a atenção de todos!!!!
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 21/11/2016

    Mesclagem de RecordSets Empty Re: Mesclagem de RecordSets

    Mensagem  DamascenoJr. Qui 19 Mar - 17:14

    fonazo escreveu:Teria alguma outra maneira de eu fazer isso de forma mais rápida e eficiente???
    Sim. Consulta união.

    Crie uma nova consulta, acesse o modo SQL e cole a sql abaixo
    Código:
    SELECT Nz(TB_1.CHAVE, TB_2.CHAVE) as CHAVE, Nz(TB_1.ESTAÇÃO, TB_2.ESTAÇÃO) as ESTAÇÃO, TB_1.CONSTRUTORA, TB_2.PROJETO, TB_3.ANALISTA, TB_4.FISCAL
    FROM TB_2 LEFT JOIN (TB_3 RIGHT JOIN (TB_4 RIGHT JOIN TB_1 ON TB_4.CHAVE = TB_1.CHAVE) ON TB_3.CHAVE=TB_1.CHAVE) ON TB_2.CHAVE=TB_1.CHAVE
    WHERE NOT TB_2.CHAVE IS NULL

    UNION ALL

    SELECT TB_1.CHAVE, TB_1.ESTAÇÃO, TB_1.CONSTRUTORA, '-', TB_3.ANALISTA, TB_4.FISCAL
    FROM TB_2 RIGHT JOIN (TB_3 RIGHT JOIN (TB_4 RIGHT JOIN TB_1 ON TB_4.CHAVE = TB_1.CHAVE) ON TB_3.CHAVE=TB_1.CHAVE) ON TB_2.CHAVE=TB_1.CHAVE
    WHERE TB_2.CHAVE IS NULL;


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    fonazo
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 5
    Registrado : 30/08/2019

    Mesclagem de RecordSets Empty Re: Mesclagem de RecordSets

    Mensagem  fonazo Qui 26 Mar - 13:47

    Desde já, obrigado!

    Mas deu a seguinte msg quando tento rodar o código:

    Erro 3307: O número de colunas nas duas tabelas ou consultas selecionadas de uma consulta união não coincidem!

    Sabe como contornar??? As TB_1 e TB_2 possuem outras colunas não coincidentes!!!
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 21/11/2016

    Mesclagem de RecordSets Empty Re: Mesclagem de RecordSets

    Mensagem  DamascenoJr. Qui 26 Mar - 19:53

    SELECT Nz(TB_1.CHAVE, TB_2.CHAVE) as CHAVE, Nz(TB_1.ESTAÇÃO, TB_2.ESTAÇÃO) as ESTAÇÃO, TB_1.CONSTRUTORA, TB_2.PROJETO, TB_3.ANALISTA, TB_4.FISCAL
    FROM TB_2 LEFT JOIN (TB_3 RIGHT JOIN (TB_4 RIGHT JOIN TB_1 ON TB_4.CHAVE = TB_1.CHAVE) ON TB_3.CHAVE=TB_1.CHAVE) ON TB_2.CHAVE=TB_1.CHAVE
    WHERE NOT TB_2.CHAVE IS NULL

    UNION ALL

    SELECT TB_1.CHAVE, TB_1.ESTAÇÃO, TB_1.CONSTRUTORA, '-', TB_3.ANALISTA, TB_4.FISCAL
    FROM TB_2 RIGHT JOIN (TB_3 RIGHT JOIN (TB_4 RIGHT JOIN TB_1 ON TB_4.CHAVE = TB_1.CHAVE) ON TB_3.CHAVE=TB_1.CHAVE) ON TB_2.CHAVE=TB_1.CHAVE
    WHERE TB_2.CHAVE IS NULL;



    na minha contagem o número de colunas bateu. Então eu sugiro que anexe seu projeto para analisarmos.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    Conteúdo patrocinado


    Mesclagem de RecordSets Empty Re: Mesclagem de RecordSets

    Mensagem  Conteúdo patrocinado


      Data/hora atual: Sex 14 Jun - 9:03