MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Mesclagem de RecordSets

    avatar
    fonazo
    Novato
    Novato

    Respeito às Regras 100%

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

    Mesclagem de RecordSets Empty Mesclagem de RecordSets

    Mensagem  fonazo em 19/3/2020, 12: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 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2298
    Registrado : 22/11/2016

    Mesclagem de RecordSets Empty Re: Mesclagem de RecordSets

    Mensagem  DamascenoJr. em 19/3/2020, 20: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 100%

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

    Mesclagem de RecordSets Empty Re: Mesclagem de RecordSets

    Mensagem  fonazo em 26/3/2020, 16: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 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2298
    Registrado : 22/11/2016

    Mesclagem de RecordSets Empty Re: Mesclagem de RecordSets

    Mensagem  DamascenoJr. em 26/3/2020, 22: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.

      Data/hora atual: 22/10/2020, 01:28