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


3 participantes

    [Resolvido]Criar tabela temporária com vba

    rubenscouto
    rubenscouto
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 679
    Registrado : 02/10/2011

    [Resolvido]Criar tabela temporária com vba Empty [Resolvido]Criar tabela temporária com vba

    Mensagem  rubenscouto 17/6/2014, 04:48

    Não sei se esta é a sala correta para postar este duvida:
    Tenho duas consultas abaixo relacionadas:
    esta é a primeira:
    ==========================================================================================================
    SELECT Lancamentos.CodConta, Lancamentos.Centrocst, Month([Dtlcto]) AS Mês, Year([Dtlcto]) AS Ano, Sum(Lancamentos.ValorMObjet) AS ExecutadoMensal, 0 AS OrcadoMensal, Format(DSum("[saldo]","qry_ExecutadoMensal","[Mês] <= " & [Mês] & "And [Ano] = " & [Ano] & "And [Centrocst] = " & [Centrocst] & "And [CodConta] = " & [CodConta]),"Currency") AS ExecutadoAcum, 0 AS OrcadoAcum
    FROM Lancamentos
    GROUP BY Lancamentos.CodConta, Lancamentos.Centrocst, Month([Dtlcto]), Year([Dtlcto])
    HAVING (((Year([Dtlcto]))=Year(Date())));

    Esta é a segunda:
    ============================================================================================================
    SELECT PlanejamentoAnual.CodConta, PlanejamentoAnual.Centrocst, PlanejamentoAnual.MesRef AS Mês, PlanejamentoAnual.AnoRef AS Ano, 0 AS ExecutadoMensal, Sum(PlanejamentoAnual.CustosPlan) AS OrcadoMensal, 0 AS ExecutadoAcum, Format(DSum("[Saldo]","qry_OrcadoMensal","[MesRef] <= " & [MesRef] & "And [AnoRef] = " & [AnoRef] & "And [Centrocst] = " & [Centrocst] & "And [CodConta] = " & [CodConta]),"Currency") AS OrcadoAcum
    FROM PlanejamentoAnual
    GROUP BY PlanejamentoAnual.CodConta, PlanejamentoAnual.Centrocst, PlanejamentoAnual.MesRef, PlanejamentoAnual.AnoRef
    HAVING (((PlanejamentoAnual.AnoRef)=Year(Date())));
    =============================================================================================================

    Esta terceira é uma consulta union das duas primeira:
    ==============================================================================================================
    SELECT Lancamentos.CodConta, Lancamentos.Centrocst, Month([Dtlcto]) AS Mês, Year([Dtlcto]) AS Ano, Sum(Lancamentos.ValorMObjet) AS ExecutadoMensal, 0 AS OrcadoMensal, Format(DSum("[saldo]","qry_ExecutadoMensal","[Mês] <= " & [Mês] & "And [Ano] = " & [Ano] & "And [Centrocst] = " & [Centrocst] & "And [CodConta] = " & [CodConta]),"Currency") AS ExecutadoAcum, 0 AS OrcadoAcum
    FROM Lancamentos
    GROUP BY Lancamentos.CodConta, Lancamentos.Centrocst, Month([Dtlcto]), Year([Dtlcto])
    HAVING (((Year([Dtlcto]))=Year(Date()))) UNION SELECT PlanejamentoAnual.CodConta, PlanejamentoAnual.Centrocst, PlanejamentoAnual.MesRef AS Mês, PlanejamentoAnual.AnoRef AS Ano, 0 AS ExecutadoMensal, Sum(PlanejamentoAnual.CustosPlan) AS OrcadoMensal, 0 AS ExecutadoAcum, Format(DSum("[Saldo]","qry_OrcadoMensal","[MesRef] <= " & [MesRef] & "And [AnoRef] = " & [AnoRef] & "And [Centrocst] = " & [Centrocst] & "And [CodConta] = " & [CodConta]),"Currency") AS OrcadoAcum
    FROM PlanejamentoAnual
    GROUP BY PlanejamentoAnual.CodConta, PlanejamentoAnual.Centrocst, PlanejamentoAnual.MesRef, PlanejamentoAnual.AnoRef
    HAVING (((PlanejamentoAnual.AnoRef)=Year(Date())));
    ==============================================================================================================

    e esta é o agrupamento da terceira, que é a base de um relatorio gerencial:
    ==============================================================================================================
    SELECT qry_ExecutadoOrcadoAcumMes.CodConta, qry_ExecutadoOrcadoAcumMes.Centrocst, qry_ExecutadoOrcadoAcumMes.Mês, qry_ExecutadoOrcadoAcumMes.Ano, Sum(qry_ExecutadoOrcadoAcumMes.Executado) AS ExecutadoMensal, Sum(qry_ExecutadoOrcadoAcumMes.OrcadoMensal) AS OrcadoMensal, Sum(Format([ExecutadoAcum],"Currency")) AS ExecutadoAcumulado, Sum(qry_ExecutadoOrcadoAcumMes.OrcadoAcum) AS OrcadoAcumulado, Contas.Conta, [ExecutadoMensal]-[OrcadoMensal] AS Desvio, IIf([OrcadoMensal]=0,0,[Desvio]/[OrcadoMensal]) AS Desvio2, Classes.CodClasse, Grupos.CodGrupo, Contas.CodCusto
    FROM (((qry_ExecutadoOrcadoAcumMes INNER JOIN Contas ON qry_ExecutadoOrcadoAcumMes.CodConta = Contas.CodConta) INNER JOIN Classes ON Contas.CodClasse = Classes.CodClasse) INNER JOIN Grupos ON Classes.CodGrupo = Grupos.CodGrupo) INNER JOIN CentroDeCusto ON qry_ExecutadoOrcadoAcumMes.Centrocst = CentroDeCusto.Centrocst
    GROUP BY qry_ExecutadoOrcadoAcumMes.CodConta, qry_ExecutadoOrcadoAcumMes.Centrocst, qry_ExecutadoOrcadoAcumMes.Mês, qry_ExecutadoOrcadoAcumMes.Ano, Contas.Conta, Classes.CodClasse, Grupos.CodGrupo, Contas.CodCusto;
    ==============================================================================================================

    Pelo painel de navegação está pesando o banco de dados. Como faço para executar estas pelo menos as duas primeiras consultas criando tabelas temporarias e apartir dai criar as consultas 3 e 4 ? já vi que fica mais rápido fazer pelo vba, mas não tenho os comandos necessários para fazê-los.
    Alguem tem alguma ideia? qualquer coisa serve, seja criando tabelas temporárias, seja função ou outra coisa que seja mais rápido.

    Grato pela ajuda.
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3880
    Registrado : 04/04/2010

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  Avelino Sampaio 18/6/2014, 08:36

    Olá!

    Exemplo:

    SELECT Lancamentos.CodConta, Lancamentos.Centrocst, Month([Dtlcto]) AS Mês, Year([Dtlcto]) AS Ano, Sum(Lancamentos.ValorMObjet) AS ExecutadoMensal, 0 AS OrcadoMensal, Format(DSum("[saldo]","qry_ExecutadoMensal","[Mês] <= " & [Mês] & "And [Ano] = " & [Ano] & "And [Centrocst] = " & [Centrocst] & "And [CodConta] = " & [CodConta]),"Currency") AS ExecutadoAcum, 0 AS OrcadoAcum
    INTO tblNovaTabela FROM Lancamentos
    GROUP BY Lancamentos.CodConta, Lancamentos.Centrocst, Month([Dtlcto]), Year([Dtlcto])
    HAVING (((Year([Dtlcto]))=Year(Date())));

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    rubenscouto
    rubenscouto
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 679
    Registrado : 02/10/2011

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  rubenscouto 18/6/2014, 16:17

    com este comando eu crio uma nova tabela no vba ou no painel de navegação?
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7919
    Registrado : 15/03/2013

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  Alvaro Teixeira 18/6/2014, 16:28

    Olá a todos,

    Em cima , no exemplo é a instrução em SQL.

    Podes utilizar em VBA com a instrução DoCmd.RunSql "instrução em sql"

    Aproveita dá uma vista de olhos no exemplo do link abaixo:

    http://msdn.microsoft.com/en-us/library/office/ff194626(v=office.15).aspx
    rubenscouto
    rubenscouto
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 679
    Registrado : 02/10/2011

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  rubenscouto 19/6/2014, 04:21

    aonde tem aspas duplas dentro da instrução sql dá erro e o codigo pára.
    Ex:
    ("[saldo]","qry_ExecutadoMensal",
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7919
    Registrado : 15/03/2013

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  Alvaro Teixeira 19/6/2014, 16:54

    Olá,

    Fui buscar acima a tua instrução, exprimenta assim no VBA:

    Código:

    DoCmd.RunSQL "SELECT qry_ExecutadoOrcadoAcumMes.CodConta, qry_ExecutadoOrcadoAcumMes.Centrocst, qry_ExecutadoOrcadoAcumMes.Mês, " _
               & "qry_ExecutadoOrcadoAcumMes.Ano, Sum(qry_ExecutadoOrcadoAcumMes.Executado) AS ExecutadoMensal, " _
               & "Sum(qry_ExecutadoOrcadoAcumMes.OrcadoMensal) AS OrcadoMensal, Sum(Format([ExecutadoAcum],'Currency')) AS ExecutadoAcumulado, " _
               & "Sum(qry_ExecutadoOrcadoAcumMes.OrcadoAcum) AS OrcadoAcumulado, Contas.Conta, [ExecutadoMensal]-[OrcadoMensal] AS Desvio, " _
               & "IIf([OrcadoMensal]=0,0,[Desvio]/[OrcadoMensal]) AS Desvio2, Classes.CodClasse, Grupos.CodGrupo, Contas.CodCusto " _
               & "FROM (((qry_ExecutadoOrcadoAcumMes INNER JOIN Contas ON qry_ExecutadoOrcadoAcumMes.CodConta = Contas.CodConta) " _
               & "INNER JOIN Classes ON Contas.CodClasse = Classes.CodClasse) INNER JOIN Grupos ON Classes.CodGrupo = Grupos.CodGrupo) " _
               & "INNER JOIN CentroDeCusto ON qry_ExecutadoOrcadoAcumMes.Centrocst = CentroDeCusto.Centrocst " _
               & "GROUP BY qry_ExecutadoOrcadoAcumMes.CodConta, qry_ExecutadoOrcadoAcumMes.Centrocst, qry_ExecutadoOrcadoAcumMes.Mês, " _
               & "qry_ExecutadoOrcadoAcumMes.Ano, Contas.Conta, Classes.CodClasse, Grupos.CodGrupo, Contas.CodCusto;"

    Se não der o melhor será disponibilizares uma base de exemplo  com a consulta, quanto ao volume da dados, apaga nas tabelas, ficando apenas dois ou tres registos.
    rubenscouto
    rubenscouto
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 679
    Registrado : 02/10/2011

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  rubenscouto 23/6/2014, 08:25

    Na consulta "qry_UnionExecutadoOrcadoAcumMes" existe uma função agregada "Dsum" que busca o valor da conta até o mês de abertura do relatório "rpt_Executado_X_Orcado" com base no parâmetros do formulário "Frm_Parametros". Creio que é esta função que está pesando a abertura dos dados. Há alguma forma de se criar tabelas no vba e apartir destas tabelas criadas criar outras tabelas para chegar a mesma estrutura da consulta "qry_ExecutadoOrcadoMesAno" para servir de base para qualquer relatório?
    Segue em anexo o bd.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7919
    Registrado : 15/03/2013

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  Alvaro Teixeira 23/6/2014, 14:24

    Olá,

    Normalmente as consultas tem um desempenho melhor, nao me parece que vá alterar o rendimento, pois vai ter um acesso de leitura e escrita numa nova tabela.

    Um das coisas que reparei é que estás a calcular o Mes e Ano na consulta, talvez (é de exprimentar) seria ter logo na tabela de movimentos o campo ANO e MES de preferencia campo numerico indexado, que seria automáticamente preenchido logo quando são efetuados os movimentos. Assim é menos um calculo nas consultas ao agregar.

    Vou analisar um pouco melhor e dar novo feedback

    rubenscouto
    rubenscouto
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 679
    Registrado : 02/10/2011

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  rubenscouto 24/6/2014, 11:04

    O relatório baseado na consulta está levando de 4 a 5 segundos para abrir. se eu conseguir extrair os dados da consulta e inseri-los em uma tabela, o relatório abre mais rápido. O meu pensamento é executar as consultas "Qry_ExecutadoMensal" e "qry_OrcadoMensal" pelo vba, extrair os dados e inserir ao dados em tabelas. A partir destas novas tabelas efetuar as novas consultas para servir de base para o relatório . Já percebi que a abertura fica mais eficiente. seria o caso de uma "tabledefs" criada pelo vba?
    rubenscouto
    rubenscouto
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 679
    Registrado : 02/10/2011

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  rubenscouto 24/6/2014, 12:18

    Achei um um código neste site:
    http://allenbrowne.com/func-dao.html#CreateQueryDAO
    Aqui cria a tabela, basta agora eu adaptar ao meu projeto. preciso agora é selecionar os dados via vba e inseri-los neste tabela.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7919
    Registrado : 15/03/2013

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  Alvaro Teixeira 25/6/2014, 11:21

    Sim, o exemplo cria uma tabela noutra base de dados que poderá ser tabela temporaria.

    Tembém tenho utilizado, a técnica que tenho utilizado é:
    -criar a BD temporaria, com as tabelas desejadas
    -verificar se já existe alguma ligação (vinculado) da tabela(s) temporaria(s) e eliminar
    -Ligar (vincular) à base de dados temporaria a tabela(s)

    Depois trabalho normalmente com a(s) tabela(s) vinculadas, como se fosse na propria base de dados do projeto.

    Abraço
    rubenscouto
    rubenscouto
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 679
    Registrado : 02/10/2011

    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  rubenscouto 15/7/2014, 02:19

    vou dar o topico como resolvido.

    Conteúdo patrocinado


    [Resolvido]Criar tabela temporária com vba Empty Re: [Resolvido]Criar tabela temporária com vba

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 26/4/2024, 23:02