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

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    leicand
    leicand
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 04/01/2016

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! Empty [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    Mensagem  leicand 20/7/2016, 15:59

    Bom dia amigos,

    Tenho um subformulário que tem como recordsource uma consulta que vem de tabelas vinculadas do Banco de Dados SQL SERVER. Inicialmente eu atribuía via VBA, mas ela ficava lenta. O recordsource era o seguinte:

    "select x.cod_prod_pv0131, y.desc_prod_pv0131, y.qtde_prod_pv0131, y.valor_unit_pv0131, y.dt_ped_pv0131 from ( "& _
    "select max(dbo_pv0131.num_ped_pv0131) as MAXPED, dbo_pv0131.cod_prod_pv0131 from dbo_pv0131 left join dbo_pv0130 on dbo_pv0130.num_ped_pv0130 = dbo_pv0131.num_ped_pv0131 "& _
    "where dbo_pv0130.cod_cli_pv0130 = '" & Cliente & "' and dbo_pv0130.status_pv0130 <> '4' " 'and dbo_pv0130.dt_ped_pv0130 > '" & Data & "' "& _
    "group by dbo_pv0131.cod_prod_pv0131) as x left join dbo_pv0131 as y on x.dbo_pv0131.cod_prod_pv0131 = y.cod_prod_pv0131 and y.num_ped_pv0131 = x.MAXPED " 'where x.cod_prod_pv0131 not in (select cod_prod from orcTemp)"& _
    "order by y.dt_ped_pv0131 desc "

    Depois tentei criar uma Consulta de passagem com um DSN e atribuir o seguinte source:

    "select x.cod_prod_pv0131, " & _
    "y.desc_prod_pv0131," & _
    "y.qtde_prod_pv0131," & _
    "y.valor_unit_pv0131, " & _
    "y.dt_ped_pv0131 " & _
    "from ( " & _
    "select max(num_ped_pv0131) as MAXPED," & _
    "cod_prod_pv0131 " & _
    "from pv0131 " & _
    "left join pv0130 on num_ped_pv0130 = num_ped_pv0131 " & _
    "where cod_cli_pv0130 = '" & Cliente & "' " & _
    "and status_pv0130 <> '4' " & _
    "and dt_ped_pv0130 > dateadd(dd,-" & dias & ",getdate()) " & _
    "group by cod_prod_pv0131) as x " & _
    "left join pv0131 as y on x.cod_prod_pv0131 = y.cod_prod_pv0131 " & _
    "and y.num_ped_pv0131 = x.MAXPED " & _
    "order by y.dt_ped_pv0131 desc "

    Melhorou um pouco, mas continua muito mais lento do que é viável para o usuário. Alguém poderia POR FAVOR me ajudar a otimizar essa consulta? Quando eu rodo ela no SQL Server ela é instantânea, mas no Access leva mais do que três segundos!!!
    philipp.moreira
    philipp.moreira
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 257
    Registrado : 05/02/2016

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! Empty Re: [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    Mensagem  philipp.moreira 21/7/2016, 21:12

    Boa tarde!

    Porque não criar uma Stored Procedure no SQL Server que receba os parametros e chama esta procedure ?
    leicand
    leicand
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 04/01/2016

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! Empty Re: [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    Mensagem  leicand 21/7/2016, 21:20

    Boa tarde Philipp,

    Mas como eu faria para ter o resultado da Query como o recordsource em um Form no Access? Teria como pegar o resultado de uma Stored Procedure?

    Muito obrigado

    philipp.moreira
    philipp.moreira
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 257
    Registrado : 05/02/2016

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! Empty Re: [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    Mensagem  philipp.moreira 21/7/2016, 22:21

    Leicand,

    I  - Crie a Stored Procedure no SQL Server com a lógica da consulta que você possui hoje;
    *Obs.: Teste a Stored Procedure no SQL Server, verificando se a mesma traz as informações corretamente.

    II  - No Access crie uma consulta de passagem (configurando acesso ao servidor do Banco de Dados SQL Server);
      1 - Selecione o tipo consulta de passagem
      2 - Configure o acesso ao SQL Server, especificando a Base de Dados
      3 - No script da consulta de passagem no Access faça a chamada da Stored Procedure passando os parâmetros necessários
       * Na evidência não há os parametros, pois criei um teste de um SP sem parametros, mas, basta você passar os parâmetros na frente do nome da procedure.

    III - Vincule a consulta de passagem ao formulário.

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! 2naqi9x

    Mas isto seria uma sugestão. Talvez mais alguém do fórum possa ter propor algo melhor.

    Se precisar de um help, vai falando.

    Fuçando na web achei o link abaixo, vale a pena dar uma olhada.
    https://www.mssqltips.com/sqlservertip/1482/microsoft-access-pass-through-queries-to-sql-server/
    leicand
    leicand
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 04/01/2016

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! Empty Re: [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    Mensagem  leicand 22/7/2016, 13:10

    Bom dia Philipp,

    Achei a sugestão muito boa! Testei, mas infelizmente o resultado foi igual. Aparentemente ter a consulta de passagem usa o mesmo tipo de processamento que a Stored Procedure.

    Mas obrigado pela ajuda!
    philipp.moreira
    philipp.moreira
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 257
    Registrado : 05/02/2016

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! Empty Re: [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    Mensagem  philipp.moreira 22/7/2016, 18:35

    Leicand,
    eu sugeriria um novo teste recriar as tabelas localmente no access e rodar a consulta local se ela realmente for performatica como voce havia dito que quando roda direto no sql server, creio que poderia presumir que o gargalo que esta tendo é devido a rede e não sua query em si.
    leicand
    leicand
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 47
    Registrado : 04/01/2016

    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! Empty Re: [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    Mensagem  leicand 22/7/2016, 19:42

    Bom dia Philipp,

    Com as tabelas criadas localmente a consulta ficou extremamente lenta, a tabela tem mais de 170.000 linhas e faz uma dupla join com ela mesma, com group by etc.

    Acho que a melhor solução é a da Stored Procedure. Apesar de não ter atingido a velocidade que gostaria, ficou um pouco mais rápido do que antes e viabilizou a experiência do usuário.

    Também creio que o gargalo deve ser a rede. Considero o tópico resolvido.

    Muito obrigado Philipp!

    Conteúdo patrocinado


    [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta! Empty Re: [Resolvido]Consulta: Ajuda - Consulta passagem SQL Muito lenta!

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 27/4/2024, 23:18