|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Accueil → WINDEV 25 → Wx - Busca incremental autocomplete, busca filtrada, busca ao digitar exibe os dados do retorno de cada tecla digitada, busca com like |
Wx - Busca incremental autocomplete, busca filtrada, busca ao digitar exibe os dados do retorno de cada tecla digitada, busca com like |
Débuté par adrianoboller, 10 mar. 2016 12:22 - 8 réponses |
| |
| | | |
|
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 10 mars 2016 - 12:22 |
Prezados,
Segue aqui a técnica para a Busca filtrada incremental.
A cada tecla digitada faz isso no embed evento modifiy do campo faz a consulta no banco de dados
TableDeleteAll(nome da tabela) consulta com parâmetro HExecuteQuery(com a consulta usando conteins = like) For each qyery TableAdd(... END TableDisplay(nome da tabela,taReExecuteQuery) TableDisplay(nome da tabela,taInit)
A lógica é básica: 1 - limpar controle Table, looper, combo.... ou outro controle similar. 2 - buscar registros do que tem no campo de edição 3 - preencher controle com o retorno da busca no banco a cada tecla editada, como faz muito rápido da o efeito esperado.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 10 mars 2016 - 17:11 |
Passo a passo:
CREATE TABLE "T000_Enderecos" ( "T000_ID" NUMERIC(19,0) PRIMARY KEY , "T000_Endereco" VARCHAR(50) , "T000_Numero" INTEGER , "T000_Bairro" VARCHAR(50) , "T000_Cidade" VARCHAR(50) , "T000_UF" VARCHAR(2) , "T000_CEP" VARCHAR(8) );
Query
SELECT T000_Enderecos.T000_ID AS T000_ID, T000_Enderecos.T000_Endereco AS T000_Endereco, T000_Enderecos.T000_Numero AS T000_Numero, T000_Enderecos.T000_Bairro AS T000_Bairro, T000_Enderecos.T000_Cidade AS T000_Cidade, T000_Enderecos.T000_UF AS T000_UF, T000_Enderecos.T000_CEP AS T000_CEP FROM T000_Enderecos WHERE T000_Enderecos.T000_Endereco LIKE %{pEndereco}%
Tela
O Browserlist deve ser do tipo programado
Código no campo de busca:
bTemRegistros is boolean
TableDeleteAll(TABLE_QRY_Select_Endereco_Filtrado)
ok is boolean = HExecuteQuery(QRY_Select_Endereco_Filtrado, hQueryDefault, EDT_Busca_incremental)
IF ok = True THEN FOR EACH QRY_Select_Endereco_Filtrado bTemRegistros = HFound(QRY_Select_Endereco_Filtrado) IF bTemRegistros = True THEN TableAdd(TABLE_QRY_Select_Endereco_Filtrado, QRY_Select_Endereco_Filtrado.T000_ID + TAB +... QRY_Select_Endereco_Filtrado.T000_Endereco + TAB +... QRY_Select_Endereco_Filtrado.T000_Numero + TAB +... QRY_Select_Endereco_Filtrado.T000_Bairro + TAB +... QRY_Select_Endereco_Filtrado.T000_Cidade + TAB +... QRY_Select_Endereco_Filtrado.T000_UF + TAB +... QRY_Select_Endereco_Filtrado.T000_CEP) END END END
TableDisplay(TABLE_QRY_Select_Endereco_Filtrado,taReExecuteQuery)
TableDisplay(TABLE_QRY_Select_Endereco_Filtrado,taInit)
Resultado
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 10 mars 2016 - 17:17 |
Ao abrir a janela
Query sem filtro: QRY_Select_Endereco
SELECT T000_Enderecos.T000_ID AS T000_ID, T000_Enderecos.T000_Endereco AS T000_Endereco, T000_Enderecos.T000_Numero AS T000_Numero, T000_Enderecos.T000_Bairro AS T000_Bairro, T000_Enderecos.T000_Cidade AS T000_Cidade, T000_Enderecos.T000_UF AS T000_UF, T000_Enderecos.T000_CEP AS T000_CEP FROM T000_Enderecos
Código no open da janela:
bTemRegistros is boolean
TableDeleteAll(TABLE_QRY_Select_Endereco_Filtrado)
ok is boolean = HExecuteQuery(QRY_Select_Endereco, hQueryDefault)
IF ok = True THEN
FOR EACH QRY_Select_Endereco_Filtrado
bTemRegistros = HFound(QRY_Select_Endereco_Filtrado)
IF bTemRegistros = True THEN
TableAdd(TABLE_QRY_Select_Endereco_Filtrado, QRY_Select_Endereco_Filtrado.T000_ID + TAB +... QRY_Select_Endereco_Filtrado.T000_Endereco + TAB +... QRY_Select_Endereco_Filtrado.T000_Numero + TAB +... QRY_Select_Endereco_Filtrado.T000_Bairro + TAB +... QRY_Select_Endereco_Filtrado.T000_Cidade + TAB +... QRY_Select_Endereco_Filtrado.T000_UF + TAB +... QRY_Select_Endereco_Filtrado.T000_CEP) END
END
END
TableDisplay(TABLE_QRY_Select_Endereco_Filtrado,taReExecuteQuery)
TableDisplay(TABLE_QRY_Select_Endereco_Filtrado,taInit)
Resultado:
Pronto
Simples Assim... agora é só juntar o quebra cabeças do que ja postei e ter os recursos que precisa.
Forte abraço e bons estudos.
Ahhh... não esqueça de dar o joinha se gostou do post!
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 10 mars 2016 - 17:22 |
Correção do código acima, a query é não filtrada, mostra todos os registros
bTemRegistros is boolean
TableDeleteAll(TABLE_QRY_Select_Endereco_Filtrado)
ok is boolean = HExecuteQuery(QRY_Select_Endereco, hQueryDefault)
IF ok = True THEN
FOR EACH QRY_Select_Endereco
bTemRegistros = HFound(QRY_Select_Endereco)
IF bTemRegistros = True THEN
TableAdd(TABLE_QRY_Select_Endereco_Filtrado, QRY_Select_Endereco.T000_ID + TAB +... QRY_Select_Endereco.T000_Endereco + TAB +... QRY_Select_Endereco.T000_Numero + TAB +... QRY_Select_Endereco.T000_Bairro + TAB +... QRY_Select_Endereco.T000_Cidade + TAB +... QRY_Select_Endereco.T000_UF + TAB +... QRY_Select_Endereco.T000_CEP) END
END
END
TableDisplay(TABLE_QRY_Select_Endereco_Filtrado,taReExecuteQuery)
TableDisplay(TABLE_QRY_Select_Endereco_Filtrado,taInit)
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 messages |
|
Posté le 10 mars 2016 - 20:12 |
Obrigado Adriano. Só faltou colocar que o ideal é criar um índice no campo que utilizamos na pesquisa. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 messages |
|
Posté le 10 mars 2016 - 21:41 |
MAURICIOBS escreveu: > Obrigado Adriano. Só faltou colocar que o ideal é criar um índice no campo que utilizamos na pesquisa.
Me enganei, revi o código e observei que tu utiliza LIKE %string% então realmente o índice não traz benefício, traria se fosse LIKE string% |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 15 mars 2016 - 22:27 |
Prezado Mauricio
Funciona perfeitamente, claro pode por indice pode agilizar dependendo do tamanho da base de dados.
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 9949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.blogspot.com.br/ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 09 juin 2017 - 13:44 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 651 messages Popularité : +175 (223 votes) |
|
Posté le 09 juin 2017 - 15:35 |
Complemento
https://help.windev.com/en-US/…
AssistedInputDeleteAll(EDT_Cities)
HExecuteQuery(QRY_FindCity, hQueryDefault, "NEW")
FOR EACH QRY_FindCity
sValueFound = gFontBold(True) + gPen(LightRed) + "NEW" + ... gFontBold(False) + gPen(Black)
AssistedInputAdd(EDT_Cities, sValueFound) END
O princípio da entrada assistida em um controle de edição é direto: quando o usuário começa a digitar um controle de edição, uma lista é expandida automaticamente abaixo do controle, propondo os valores que começam com o texto atualmente digitado. A entrada assistida pode ser implementada a partir do editor ou pode ser personalizada por programação.
WINDEV Mobile Entrada assistida em uma janela
WINDEV Mobile Vários tipos de entrada assistida estão disponíveis: Entrada assistida "Navegação": o controle de edição está vinculado a um item encontrado em um arquivo de dados ou em uma consulta. O WINDEV gerencia a exibição de dados na lista de acordo com a entrada. WINDEV Entrada assistida programada: a entrada assistida é realizada a partir de uma lista personalizada de dados. A exibição dos dados na lista de acordo com a entrada é personalizada. Assistindo entrada assistida WINDEV Mobile Para implementar a entrada assistida "Navegação": Na janela de descrição do controle de edição: Verifique se o controle de edição está vinculado a um item encontrado em um arquivo de dados ou em uma consulta (guia "Link"). Cuidado: o item deve ser uma chave. Na guia "Detalhes", marque "Entrada assistida (ligação necessária)". Valide a janela da descrição do controle de edição. Em tempo de execução, assim que a primeira letra é digitada no controle, as letras correspondentes a um elemento encontrado no arquivo de dados são propostas automaticamente.
Entrada assistida programada A entrada assistida programada pode ser usada em qualquer controle de edição (vinculado ou não a um item encontrado em um arquivo de dados). Para usar a entrada assistida programada: Inicialize a lista de elementos levados em conta pela entrada assistida via AssistedInputAdd . No código "Sempre que modificado" do controle: Limpe a lista de sugestões ( AssistedInputDeleteAll ). Recriar a lista de elementos propostos de acordo com os caracteres digitados ( AssistedInputAdd ). Use AssistedInputOpen para abrir a lista de elementos propostos pela entrada assistida . Nota: Para destacar os termos digitados pelo usuário, você pode usar o gPen e o gFontBold .
-- Adriano José Boller ______________________________________________ Consultor e Representante Oficial da PcSoft no Brasil +55 (41) 99949 1800 adrianoboller@gmail.com skype: adrianoboller http://wxinformatica.com.br/Message modifié, 09 juin 2017 - 15:42 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|