[resolvido] Cx de texto filtrar em Cbo

Moderador: Avelino Sampaio

Marco Sousa
Mensagens: 20
Registrado em: 15 Dez 2016, 14:59

[resolvido] Cx de texto filtrar em Cbo

Mensagempor Marco Sousa » 25 Fev 2017, 15:16

boas
tenho uma cboxpto (formContinuo) que consulta o Numero e Nome do Cliente, sendo que a coluna vinculada = 1, Número de Colunas = 2, Largura de Colunas = 0cm; 2cm. Sendo que o Numero do Cliente é o campo que relaciona uma tabela a outra.
Pretendia numa Caixa de Texto - No cabeçalho ao escrever o Nome do Cliente filtra-se nessa cbo, uma vez, estou a aproveitar o mesmo form para lançar dados e efetuar as pesquisas necessárias... tentei assim ( sem sucesso )

Código:
Private Sub txtPesquisa_Change()
Me.Refresh
If Not IsNull(Me.txtPesquisa) Then
Me.Filter = "cboClientes Like '*" & Me.txtPesquisa.Text & "' & '*'"
Me.FilterOn = True
Me.txtPesquisa.SelStart = Nz(Len(Me.txtPesquisa), 0)
Else
End If
End Sub


Como ultrapassar... Obrigado

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Avelino Sampaio
Mensagens: 2163
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Cx de texto filtrar em Cbo

Mensagempor Avelino Sampaio » 25 Fev 2017, 16:58

Marco,

isso que vc está querendo não vai dar certo, pois o valor real da combobox é o número do cliente. Se vc precisa muito filtrar pelo nome do cliente, vai ter que criar um campo virtual na consulta, origem do formulário. Supondo que sua consulta seja:

Código:
SELECT Campo1, Campo2, cbxClientes FROM NomeTabela;


Acrecente o campo virtual usando uma consulta aninhada ou o Dlookup

Código:
SELECT Campo1, Campo2, cbxClientes, (select Cliente FROM tblClientes WHERE IdCliente = [cbxClientes]) AS Cliente 
FROM NomeTabela;


Nota: Esse tipo de consulta pode causar uma certa lentidão se o número de registros for grande. Eu particularmente não uso nos meus projetos.

Acrescente ao seu formulário continuo esse novo campo Clientes da consulta, e então aplique a filtragem sobre este campo.

Código:
Private Sub txtPesquisa_Change()
Me.Refresh
If Not IsNull(Me.txtPesquisa) Then
Me.Filter = "Cliente Like "'*" & Me.txtPesquisa.Text & "*'"
Me.FilterOn = True
Me.txtPesquisa.SelStart = Nz(Len(Me.txtPesquisa), 0)
Else
End If
End Sub


Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Avatar do usuário
Dilson
Mensagens: 18
Registrado em: 08 Jun 2015, 13:11
Localização: Altamira-Pará

Re: Cx de texto filtrar em Cbo

Mensagempor Dilson » 26 Fev 2017, 15:46

Montei uma instrução SQL no vba e imagino que populará a fonte do controle do Subformulario.
Quando cita cliente, imaginei que esteja falando de um form continuo vendas. Substitua os nomes de campos e tabelas e caminhos de referência e veja se funciona no evento ao alterar:

Código:
Dim SQL As String
SQL = "SELECT * " _
& "FROM SuaTabelaCliente " _
& "LEFT JOIN " _
& "SuaTabelaVendas " _
& "ON " _
& "SuaTabelaCliente.IdChavePrimaria = SuaTabelaVendas.IdChaveEstrangeira " _
& "WHERE " _
& "((SuaTabelaCliente.NomeCliente Like '*'+ txtPesquisa.Text & '*')) " _
& "ORDER BY " _
& "SuaTabelaCliente.IdChavePrimaria DESC"
Forms!NomeDoForm!NomeDoSubForm.Form.RecordSource = SQL
Forms!NomeDoForm!NomeDoSubForm.Requery

Marco Sousa
Mensagens: 20
Registrado em: 15 Dez 2016, 14:59

Re: Cx de texto filtrar em Cbo

Mensagempor Marco Sousa » 26 Fev 2017, 19:30

boas
Obrigado aos 2 . . . mestre - Avelino acho que foi isto que me falou, mas estou com um problema... ao inserir um novo registo apaga o Nome do Cliente.
Obrigado.
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Dilson
Mensagens: 18
Registrado em: 08 Jun 2015, 13:11
Localização: Altamira-Pará

Re: Cx de texto filtrar em Cbo

Mensagempor Dilson » 26 Fev 2017, 23:02

Funcionando 100% no evento após atualizar da TextBox

Código:
Dim SQL As String
SQL = "SELECT tabCadXPTO.IdtabCadXPTO, tabCadXPTO.Data, tabCadXPTO.IDtabCadCliente, " _
& "tabCadClientes.NomeCliente, tabCadXPTO.Obs " _
& "FROM tabCadClientes " _
& "LEFT JOIN " _
& "tabCadXPTO " _
& "ON " _
& "tabCadClientes.NumeroCliente = tabCadXPTO.IDTabCadCliente " _
& "WHERE " _
& "((tabCadClientes.NomeCliente Like '*'+ Forms!frmCadXPTO!txtPesquisa & '*')) " _
& "ORDER BY " _
& "tabCadClientes.ID DESC"
Me.Form.RecordSource = SQL
Me.Requery

Marco Sousa
Mensagens: 20
Registrado em: 15 Dez 2016, 14:59

Re: Cx de texto filtrar em Cbo

Mensagempor Marco Sousa » 27 Fev 2017, 11:54

Olá Dilson... Obrigado está a funcionar sim :P mas tentei adaptar a outro projeto sem sucesso o que estou a fazer mal :oops: ?
repare, ao digitar o nome, e após clicar no Enter - Run-time error '3131': erro de sintaxe na cláusula FROM


Dim SQL As String
SQL = "SELECT tabCadUlceras.IDtabCadUlceras, tabCadUlceras.Data, tabCadUlceras.IDtabCadUtente, " _
& "tabCadUtentes.NomeUtente, tabCadUlceras.Observacao " _
& "FROM tabCadUtentes " _
& "LEFT JOIN " _
& "tabCadUlceras" _
& "ON " _
& "tabCadUtentes.NumeroUtente = tabCadUlceras.IDTabCadUtente " _
& "WHERE " _
& "((tabCadUtentes.NomeCliente Like '*'+ Forms!frmCadUlceras!txtPesquisa & '*')) " _
& "ORDER BY " _
& "tabCadUtentes.ID DESC"
Me.Form.RecordSource = SQL
Me.Requery

Run-time error '3131': erro de sintaxe na cláusula FROM
Debug
e marca a linha Me.Form.RecordSource = SQL

Obrigado.

Avatar do usuário
Avelino Sampaio
Mensagens: 2163
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Cx de texto filtrar em Cbo

Mensagempor Avelino Sampaio » 27 Fev 2017, 12:10

Marco,

acrescente temporariamente a caixa de mensagem e veja se encontra visualemnte o erro na SQL

Dim SQL As String
SQL = "SELECT tabCadUlceras.IDtabCadUlceras, tabCadUlceras.Data, tabCadUlceras.IDtabCadUtente, " _
& "tabCadUtentes.NomeUtente, tabCadUlceras.Observacao " _
& "FROM tabCadUtentes " _
& "LEFT JOIN " _
& "tabCadUlceras" _
& "ON " _
& "tabCadUtentes.NumeroUtente = tabCadUlceras.IDTabCadUtente " _
& "WHERE " _
& "((tabCadUtentes.NomeCliente Like '*'+ Forms!frmCadUlceras!txtPesquisa & '*')) " _
& "ORDER BY " _
& "tabCadUtentes.ID DESC"
msgbox SQL
'Me.Form.RecordSource = SQL
'Me.Requery

Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Marco Sousa
Mensagens: 20
Registrado em: 15 Dez 2016, 14:59

Re: Cx de texto filtrar em Cbo

Mensagempor Marco Sousa » 27 Fev 2017, 12:46

boas
existia um erro aqui
& "((tabCadUtentes.NomeCliente Like '*'+ Forms!frmCadUlceras!txtPesquisa & '*')) " _
& "((tabCadUtentes.NomeUtente Like '*'+ Forms!frmCadUlceras!txtPesquisa & '*')) " _
mas mesmo emendando... mantem-se o mesmo erro.
Questiono o seguinte
Existindo mais campos na consulta tipo - IDtabCadEstadoConsciencia, IDtabCadTipoUlceras será necessário acrescentar no sql ?
Obrigado
Se for possível acrescentar outra questão na mensagem 4 a pesquisa estava a funcionar, apenas no acrescentar de um novo registo apagava o Nome do Cliente... Obrigado.

Avatar do usuário
Dilson
Mensagens: 18
Registrado em: 08 Jun 2015, 13:11
Localização: Altamira-Pará

Re: Cx de texto filtrar em Cbo

Mensagempor Dilson » 27 Fev 2017, 22:22

O que percebi de erro de sintaxe foi a falta de um espaço abaixo de LEFT JOIN:

& "tabCadUlceras" _

na hora da junção ficará assim tabCadUlcerasON

Deveria estar assim:

& "tabCadUlceras " _

tabCadUlceras ON

Se for usar os campos na fonte de registro distribuído na grade QBE. Sim deverá incluir na sintaxe.

Marco Sousa
Mensagens: 20
Registrado em: 15 Dez 2016, 14:59

[resolvido] Re: Cx de texto filtrar em Cbo

Mensagempor Marco Sousa » 28 Fev 2017, 12:18

boas Dilson, resolvido... era mesmo isso. Obrigado mesmo. Obrigado também ao mestre Avelino. Abraço aos 2 aqui de Portugal... :mrgreen:

Avatar do usuário
Dilson
Mensagens: 18
Registrado em: 08 Jun 2015, 13:11
Localização: Altamira-Pará

Re: [resolvido] Cx de texto filtrar em Cbo

Mensagempor Dilson » 28 Fev 2017, 13:24

Me passou que poderia filtrar os nomes independentes se tiverem acentuados.
Para filtrar José e Jose, use:

Troque isso:
& "((tabCadUtentes.NomeCliente Like '*'+ Forms!frmCadUlceras!txtPesquisa & '*')) " _

Por isso:
& "((StrConv(tabCadUtentes.NomeCliente,2,1049) Like '*'+ StrConv(Forms!frmCadUlceras!txtPesquisa,2,1049) & '*') " _

Essa técnica se não me engano foi criada pelo Avelino Sampaio.


Off: Já fiz passeio na França (Paris), daqui uns tempos quero andar em Portugal, não sei em qual cidade ainda. :)

Abraço!

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.



Voltar para “Formulários”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 3 visitantes