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

    Duvida quanto a consulta em formulario de pesquisa

    avatar
    wilflx2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 31/01/2014

    Duvida quanto a consulta em formulario de pesquisa Empty Duvida quanto a consulta em formulario de pesquisa

    Mensagem  wilflx2 em 18/9/2019, 21:34


    Olá a todos,

    Venho desta vez sanar minha dúvida com quem tem mais experiencia nessa área de VBA e SQL, em questão a formulários de pesquisa.

    Vamos lá, tenho um formulário de pesquisa desvinculado, onde contem um campo chamado txPesq, e um subformulário, também desvinculado, onde retorna a pesquisa com base no campo txPesq.
    Eu carrego esse subformulário no evento "ao perder foco" do campo txPesq sendo feito em SQL pelo VBA.
    Com isso ele carrega retorna a pesquisa já filtrada e da nomes aos campos.

    Dessa forma toda vez que o usuário limpa o campo txPesq e insere um novo nome a ser pesquisado por exemplo, com esse método ele fará uma nova consulta na tabela via SQL filtrando de novo os dados. Estou sentindo uma certa lentidão ao processar a busca, e gostaria de deixa-la mais rápida.

    Consultando aqui no forum algumas formas de fazer essas pesquisas, encontrei a opção de FilterOn, pelo que entendi ele filtra a pesquisa já carregada por SQL em subformulario.

    Agora vem minha dúvida, o que seria mais rápido, consultar a tabela toda sem filtrar, retornando todos os dados e assim aplicar o FilterOn ou continuar do método que já utilizo que é a cada vez que o usuário pede uma nova busca, o SQL corre toda a tabela novamente já filtrando os dados?


    Antonildo
    Antonildo
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 35
    Registrado : 14/03/2014

    Duvida quanto a consulta em formulario de pesquisa Empty Re: Duvida quanto a consulta em formulario de pesquisa

    Mensagem  Antonildo em 19/9/2019, 03:34

    Olá!! eu faço uso desse codigo abaixo;
    ele fica em uma caixa de combinação ou combox

    Private Sub NOMEDASEMPRESAS_AfterUpdate()
    Dim frm As Form
    Set frm = Forms![CONTAS A RECEBER]![subcontasareceber].Form
    frm.Filter = "[NOME] = '" & Me.NOMEDASEMPRESAS & "'"
    Debug.Print (frm.Filter)
    frm.FilterOn = True
    frm.Requery
    If (IsNull(Me.NOMEDASEMPRESAS)) Then
    Dim mySql As String
    Dim Tmp As Variant

    mySql = "SELECT * FROM Contasareceber"

    ' Reinicia a propriedade OrigemDoRegistro do subformulário para remover registros.
    Me![subcontasareceber].Form.RecordSource = mySql

    End If

    End Sub
    avatar
    wilflx2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 31/01/2014

    Duvida quanto a consulta em formulario de pesquisa Empty Re: Duvida quanto a consulta em formulario de pesquisa

    Mensagem  wilflx2 em 25/9/2019, 21:23


    Obrigado pela resposta Antonildo, mas na realidade estou procurando mais uma explicação técnica do que um exemplo.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Duvida quanto a consulta em formulario de pesquisa Empty Re: Duvida quanto a consulta em formulario de pesquisa

    Mensagem  DamascenoJr. em 25/9/2019, 22:11

    Recomendo ter uma tabela espelho no banco onde fica o formulário. Essa tabela teria apenas os campos usados na pesquisa.

    A lógica seria, ao abrir o formulário, trazer os dados de forma temporária para a tabela espelho e com isso fazendo pesquisas a vontade sem ficar indo e voltando à base de dados desvinculada (o que causa a lentidão). Podendo inclusive usar o evento "Ao alterar" do seu campo txPesq para que os dados sejam filtrados a medida que o usuário digita. E no fechamento do formulário a tabela espelho seja toda zerada.

    Da forma indicada, poderia fazer pesquisa de forma ilimitada dando apenas uma viagem à tabela com os dados na base de dados desvinculada.


    .................................................................................
    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
    wilflx2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 31/01/2014

    Duvida quanto a consulta em formulario de pesquisa Empty Re: Duvida quanto a consulta em formulario de pesquisa

    Mensagem  wilflx2 em 27/9/2019, 06:34


    Olá Ivanjr, interessante, gostei da sua ideia, com menos Campos a busca é mais rápida, mas deixa eu ver se entendi, toda vez que a pessoa clica para consultar, antes o SQL copia para da tabela original para a espelho e assim retorna os a busca? Ou quando já se cadastra um registro ele salva nas duas tabelas ?
    Como seria essa criação da tabela espelho ?
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Duvida quanto a consulta em formulario de pesquisa Empty Re: Duvida quanto a consulta em formulario de pesquisa

    Mensagem  DamascenoJr. em 27/9/2019, 13:39

    perdoe-me o termo "espelho". O correto seria tabela "temporária". No fórum existe exemplos sobre este assunto.

    A lógica seria ao abrir o formulário de pesquisa, trazer uma cópia da tabela do banco desvinculado para o front-end apenas para uso temporário no formulário em questão. E ao fechar o formulário limpar ou apagar a tabela usada. Com os dados estando no front-end as buscas ficam mais rápidas e acaba seu problema de lentidão.

    Se a tabela tiver 30 campos mas você só usar o campo "nome" para busca, basta trazer apenas esta coluna da tabela para a tabela temporária.

    toda vez que a pessoa clica para consultar, antes o SQL copia para da tabela original para a espelho e assim retorna os a busca?

    sim

    Ou quando já se cadastra um registro ele salva nas duas tabelas ?
    não. Permaneceria apenas a original e a tabela temporária só existiria nos momentos de pesquisa quando o código fizer uma cópia dela.

    Como seria essa criação da tabela espelho ?
    há exemplos no fórum. Também existe o artigo do link abaixo
    usandoaccess.com.br/tutoriais/movimento-bancario-saldo-linha-a-linha.asp?id=1


    .................................................................................
    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
    wilflx2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 31/01/2014

    Duvida quanto a consulta em formulario de pesquisa Empty Re: Duvida quanto a consulta em formulario de pesquisa

    Mensagem  wilflx2 em 27/9/2019, 21:27


    Ivanjr. Aderi a sua idéia, porem, ainda senti lentidão. Crio uma tabela temporária assim quando o form abre, com isso no botão "BUSCAR" tem o SELECT nesta tabela já carregada, e quando fecho o form ele roda o comando para deletar a tabela.

    O problema é quando abro o formulário, há uma demora de uns 30 segundos até que se crie a tabela.
    Rodando o SELECT direto na tabela original, demora uns 15 seg.

    Segue meu código para criar a tabela temp:
    Código:
    Function TabelaTemp()
       
        On Error Resume Next
        CurrentDb.Execute "SELECT tabUteroCad.Identificação, tabUteroCad.Paciente, tabUteroCad.Numero," & _
        " tabUteroCad.Orgão, tabUteroCad.Cidade, tabUteroCad.Data, tabUteroCad.Protocolo, tabUteroCad.datadeliberacao, tabUteroCad.Ano" & _
        " INTO tmpTabUteroCad " & _
        " FROM tabUteroCad" & _
        " ORDER BY tabUteroCad.Identificação DESC"

    End Function

    Será que a lentidão é devido a rede ou a maquina em que está o banco?
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Duvida quanto a consulta em formulario de pesquisa Empty Re: Duvida quanto a consulta em formulario de pesquisa

    Mensagem  DamascenoJr. em 28/9/2019, 03:21

    Quantos registros tem sua tabela? Sua conexão é via wifi?

    Se tiver muitos registros e/ou a lentidão continuar, então a sugestão é não fazer a conexão com o banco enquanto o usuário não preencher uma determinada quantidade de caracteres para que a busca retorne o menor número de registros possível. É por esse motivo que alguns sites de pesquisa exigem o mínimo de 3 caracteres para uma pesquisa ou não mostram o resultado de uma pesquisa enquanto o usuário não refinar a busca.

    Se sua rede estiver sobrecarregada certamente está influenciando.


    .................................................................................
    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
    wilflx2
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 31/01/2014

    Duvida quanto a consulta em formulario de pesquisa Empty Re: Duvida quanto a consulta em formulario de pesquisa

    Mensagem  wilflx2 em 28/9/2019, 05:52


    Minha tabela tem 106.350 mil registros. Não, toda a rede é cabeada.
    Coloquei para buscar apenas quando o valor da busca tem 5 caracteres.

    Não sei o que pode ser. Farei uns testes mudando o banco para outra maquina e posto meu teste.



      Data/hora atual: 23/10/2020, 12:29