none
Recordset dois arquivo excel RRS feed

  • Pergunta

  • Boa noite pessoal, como vão?

    Seguinte, estou fazendo um programinha em VBA Excel. Tenho dois arquivos em Excel cada um contendo uma planilha com as seguintes configurações:

    1ª - Arquivo:PlanBOM; Planilha: BOM; Colunas: CodItem, TipoMaterial, QuantidadeProjeto

    2ª - Arquivo:Fornecimento; Planilha: PlanFornecimento; Colunas: CodItem, QuantidadeFornecida

    Estou precisando pegar os dados dessas duas planilhas e jogar em um único RecordSet. Sei que o ideal é fazer um SELECT com INNER JOIN. Porém pesquisando da internet, não consegui achar nada que me ajudasse.

    Alguém sabe como fazer? Considerando que são dois arquivos diferente, como o SELECT irá apontar para os dados do primeiro arquivo  e também apontar para os dados do segundo?

    Se alguém puder me ajudar eu agradeço muito!

    • Editado EFN quinta-feira, 12 de junho de 2014 02:52
    quinta-feira, 12 de junho de 2014 02:51

Respostas

  • "Seguinte, estou fazendo um programinha em VBA Excel. Tenho dois arquivos em Excel cada um contendo uma planilha com as seguintes configurações:"

    Não é possível você deixar essas duas tabelas na mesma pasta de trabalho? Por quê?

    ---

    "Ou seja, consigo fazer um tipo inner join com dois recordset gerando um terceiro?"

    As coisas estão ficando complicadas aqui, né? rs

    Olha como eu faria isso, usando apenas um recordset. Suponha que eu esteja executando o código da PastaA:

    -SELECT * da tabela alvo da PastaB, jogando os dados usando o método CopyFromRecordSet na planilha Plan1 de PastaA

    -SELECT * da tabela alvo da PastaC, jogando os dados usando o método CopyFromRecordSet  na planilha Plan2 de PastaA

    -Usar a instrução INNER JOIN entre as tabelas e jogue os dados na planilha desejada de PastaA.

    Para cada uma das três ações possíveis, você terá que abrir uma conexão e um recordset, e depois fecha-los.

    ---

    Atenção: Não é recomendável executar instruções SQL em pastas de trabalho que estejam abertos. Alguém muito conservador (não me incluo nessa) jogaria todos os dados da PastaB e PastaC numa possível PastaD que esteja fechada e executaria o INNER JOIN nessa PastaD. Ressaltando que tudo isso seria feito com PastaB e PastaC também fechados. Depois, a única interação de todo processo de PastaA seria receber os dados resultantes do INNER JOIN numa planilha através do método CopyFromRecordSet.



    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 26 de junho de 2014 02:35
    Moderador

Todas as Respostas

  • Não é possível diretamente executar essa instrução, pois são duas bases de dados diferentes.

    Infelizmente, creio que você terá que copiar temporariamente toda a tabela em outra para executar a instrução.

    Por que você não coloca tudo numa base só do Access?


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 14 de junho de 2014 01:47
    Moderador
  • Oi Felipe,

    Eu bem que gostaria, mas aqui na empresa não é liberado uso do Access. Porisso todos os dados que tenho estão em Excel.

    Agora jogando os dados em dois recordset, tem como jogar num terceiro os dados que tem nos dois?

    Ou seja, consigo fazer um tipo inner join com dois recordset gerando um terceiro?

    terça-feira, 24 de junho de 2014 20:14
  • "Seguinte, estou fazendo um programinha em VBA Excel. Tenho dois arquivos em Excel cada um contendo uma planilha com as seguintes configurações:"

    Não é possível você deixar essas duas tabelas na mesma pasta de trabalho? Por quê?

    ---

    "Ou seja, consigo fazer um tipo inner join com dois recordset gerando um terceiro?"

    As coisas estão ficando complicadas aqui, né? rs

    Olha como eu faria isso, usando apenas um recordset. Suponha que eu esteja executando o código da PastaA:

    -SELECT * da tabela alvo da PastaB, jogando os dados usando o método CopyFromRecordSet na planilha Plan1 de PastaA

    -SELECT * da tabela alvo da PastaC, jogando os dados usando o método CopyFromRecordSet  na planilha Plan2 de PastaA

    -Usar a instrução INNER JOIN entre as tabelas e jogue os dados na planilha desejada de PastaA.

    Para cada uma das três ações possíveis, você terá que abrir uma conexão e um recordset, e depois fecha-los.

    ---

    Atenção: Não é recomendável executar instruções SQL em pastas de trabalho que estejam abertos. Alguém muito conservador (não me incluo nessa) jogaria todos os dados da PastaB e PastaC numa possível PastaD que esteja fechada e executaria o INNER JOIN nessa PastaD. Ressaltando que tudo isso seria feito com PastaB e PastaC também fechados. Depois, a única interação de todo processo de PastaA seria receber os dados resultantes do INNER JOIN numa planilha através do método CopyFromRecordSet.



    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 26 de junho de 2014 02:35
    Moderador