jfaguiar Posted September 30, 2015 Report Share Posted September 30, 2015 Boa tarde amigos. Estou tentando melhorar a minha rotina de pesquisa, de modo que a cada letra digitada pelo usuário e valid seja disparado. É possível? Exemplo: cCHAVPESQ := SPACE(20) @ 01,02 GET cCHAVPESQ VALID( DbSeek(cCHAVPESQ) ) Ronaldbuch 1 Quote Link to comment Share on other sites More sharing options...
aferra Posted September 30, 2015 Report Share Posted September 30, 2015 não sei qual a versão do seu fivewin, porem para fazer esse tipo de pesquisa, vc tem que usar o ON CHANGE <sua_função>, já vi exemplos aqui no forum, procure por busca sensitiva Quote Link to comment Share on other sites More sharing options...
kapiaba Posted September 30, 2015 Report Share Posted September 30, 2015 REDEFINE GET oNome_Busca VAR XNOMEC PICTURE "@K!" ID 20 OF oDlg ; FONT oFnt UPDATE ; COLORS CLR_VERMELHO, CLR_AMARELO ; ON CHANGE( CONTEUDO( oNome_Busca, nKey, oDlg, oLbx, XNOMEC, ; DbClientes ) ) ; VALID( VALIDA_XNOMEC( XNOMEC, DbClientes, oLbx, nKey ) ) oLbx:bKeyDown := { | nKey | Faz_Pesquisa( nKey, ; ( DbClientes:cAlias ), oLbx, oSay, ; oLbx:SetFocus(), ; oLbx:Refresh() ), ; IF ( nKey = VK_RETURN, ; ( Click(), GetClientes( .F., DbClientes, ; DbCabec, DbPaieMae, DeOndeVem ), ; oLbx:SetFocus(), ; oLbx:Refresh() ), ; IF ( nKey = VK_INSERT, ; ( Click(), GetClientes( .T., DbClientes, ; DbCabec, DbPaieMae, DeOndeVem ), ; oLbx:SetFocus(), ; oLbx:Refresh() ), ; IF ( nKey = VK_DELETE, ; ( Click(), ApagarCli( DbClientes, DbCabec,; DbPaieMae, DeOndeVem ), ; oLbx:SetFocus(), ; oLbx:Refresh() ), ) ) ) } //----------------------------------------------------------------------------// // Pesquisa Incremental dos Clientes, Basta Digitar a Letra do Primeiro Nome Static Function Faz_Pesquisa( nKey, Alias, oSay, oLbx ) Local nOldPos := (Alias)->(Recno()) Memvar cPesq cPesq := "" // Backspace Para Apagar Caracteres Digitados If nKey==VK_BACK If Len(cPesq) > 0 cPesq:=Left(cPesq,Len(cPesq)-1) Else Tone(500,1) Return(.F.) Endif Endif If ( nKey >= 32 .And. ; nKey <= 255 ) .Or. ; nKey=VK_BACK If nKey!=VK_BACK cPesq+=UPPER(Chr(nKey)) Endif If !(Alias)->(DbSeek(cPesq)) cPesq := Left( cPesq, Len( cPesq ) -1 ) DbGoto(nOldPos) Return( .F. ) Endif Endif If oSay!=Nil oSay:cTitle(cPesq) // Mostra o que foi digitado Endif Return( .t. ) // ------------------------------------------------------------------------ // Pesquisa Melhorada Para Buscar o Nome // Ideia Original, Sergio Personal - Forum FaiveWin Brasil. Muito Bom. // Busca o Conteudo do GET no Banco de Dados. Static Function Conteudo( oGetBusca, cKey, oDlg, oLbx, XNOMEC, ; DbClientes ) MEMVAR nRecNo Local RetornaBusca := "" MEMVAR oNome_Busca IF nOpcaoRadio == 2 oLbx:GoTop() oLbx:Refresh() RETURN( .T. ) ENDIF IF EOF() .AND. ; nOpcaoRadio == 1 oLbx:GoTop() oLbx:Refresh() RETURN( .T. ) ENDIF MontaChaveBuscaArquivo( oGetBusca, cKey, oDlg, @RetornaBusca, oLbx, ; DbClientes:cAlias ) ( DbClientes:cAlias )->( DbSeek( AllTrim( RetornaBusca ) ) ) IF cKey == VK_RETURN //-> Usu rio Teclou <ENTER> No Get, NÆo Refrescar a LISTBOX ELSE oLbx:Refresh() ENDIF Return( .T. ) //-> Chave da Busca do GET do Nome Static Function MontaChaveBuscaArquivo( oGetBusca, cKey, oDlg, RetornaBusca, ; DbClientes ) Local cChaveBusca := ( oGetBusca:oGet:Buffer ), nPosAnt := RecNo() If ( cKey != 7 .And. cKey != 8 ) cChaveBusca := Stuff( cChaveBusca, oGetBusca:nPos, ; If( Set( _SET_INSERT ), 0, 1 ), ; Upper( Chr( cKey ) ) ) Endif RetornaBusca := cChaveBusca Return( RetornaBusca ) //---------------------------------------------------------------------------// // FIM DO PROGRAMA Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted September 30, 2015 Author Report Share Posted September 30, 2015 Show ! Vou testar Obrigado Quote Link to comment Share on other sites More sharing options...
emotta Posted September 30, 2015 Report Share Posted September 30, 2015 é possivel mas nao é recomendado.... pensa que a cada letra vc vai trafegar dados na rede. Se vc usar DBF até que fica legal mas se usar banco de dados aborte a idéia... Boa tarde amigos. Estou tentando melhorar a minha rotina de pesquisa, de modo que a cada letra digitada pelo usuário e valid seja disparado. É possível? Exemplo: cCHAVPESQ := SPACE(20) @ 01,02 GET cCHAVPESQ VALID( DbSeek(cCHAVPESQ) ) Quote Link to comment Share on other sites More sharing options...
evandro Posted October 1, 2015 Report Share Posted October 1, 2015 Olá, Se vc usar DBF até que fica legal mas se usar banco de dados aborte a idéia... Discordo totalmente. O Alex2002 desenvolveu uma rotina que faz esta busca mais rápido do que se fosse DBF (argh!). Creio até que ele já postou esta rotina por aqui. Quote Link to comment Share on other sites More sharing options...
emotta Posted October 1, 2015 Report Share Posted October 1, 2015 Se vc fizer um DBSEEK a cada letra digitada vai sobrecarregar a rede, isso é fato, me referi a essa forma de utilização. Se foi feito pelo Alex2002 de outra maneira tudo bem, em meu sistema que roda em SQL também faço busca incrementar, mas temos mecanismos para não fazer DBSEEK a cada letra digitada. A questão aqui não é concordar ou discordar é um fato que se usar SQL e fizer dbseek a cada letra digitada vai sobrecarregar a rede e o banco, nisso não tem discussao. Outras maneiras, mais inteligentes, é sim eficiente mas isso nao foi discutido aqui até o momento. abraços Olá, Discordo totalmente. O Alex2002 desenvolveu uma rotina que faz esta busca mais rápido do que se fosse DBF (argh!). Creio até que ele já postou esta rotina por aqui. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 1, 2015 Report Share Posted October 1, 2015 Evandro, gostei da provocação!!! Cadê a pohha da Rotina?? Chama o "Nanico" e manda postar este milagre ahi!!! É bom que seja boa mesmo, senão... Abs. Quote Link to comment Share on other sites More sharing options...
evandro Posted October 1, 2015 Report Share Posted October 1, 2015 Olá, O "Nanico" é bom nisso! A rotina ficou nota mil. É só ele acordar que deve aparecer. kapiaba 1 Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted October 1, 2015 Author Report Share Posted October 1, 2015 rsrsrs Briga boa Quote Link to comment Share on other sites More sharing options...
emotta Posted October 1, 2015 Report Share Posted October 1, 2015 está se confundindo alhos com bugalhos... com certeza ele não faz dbseek na pesquisa a cada letra digitada, no meu caso no sistema esperamos primeiro digitar 3 letras para então fazer a pesquisa qdo o usuário para de digitar por meio segundo ou então da enter. fazer dbseek a cada letra digitada é sobrecarregar a rede, a discussão aqui não é sobre a rotina dele... que viagem... abraços Olá, O "Nanico" é bom nisso! A rotina ficou nota mil. É só ele acordar que deve aparecer. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 1, 2015 Report Share Posted October 1, 2015 Eu não quero saber o que o "nanico" usa, eu quero saber é sé rápida(função) como a que eu postei e ninguém mais postou me contestando ou não... Esperando o "nanico"... kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Quote Link to comment Share on other sites More sharing options...
evandro Posted October 1, 2015 Report Share Posted October 1, 2015 Olá, Claro que não se usa DBSEEK. O que postei foi apenas respondendo ao João, não contestando a capacidade de se fazer a rotina, ou seja, não estou viajando. Aliás, até estou. No momento estou em Brasília. kapiaba 1 Quote Link to comment Share on other sites More sharing options...
emotta Posted October 1, 2015 Report Share Posted October 1, 2015 vc respondeu na citação da minha resposta, se nao foi a sua intenção nao tinha como adivinhar certo? rs... cuidado ai em brasilia hein.... mas se tiver oportunidade pega a dilma de jeito. abraços Olá, Claro que não se usa DBSEEK. O que postei foi apenas respondendo ao João, não contestando a capacidade de se fazer a rotina, ou seja, não estou viajando. Aliás, até estou. No momento estou em Brasília. kapiaba 1 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 1, 2015 Report Share Posted October 1, 2015 vc respondeu na citação da minha resposta, se nao foi a sua intenção nao tinha como adivinhar certo? rs... cuidado ai em brasilia hein.... mas se tiver oportunidade pega a dilma de jeito. abraços KKKKKKKKKKKKK, Esperando o "nanico"!! Briga vai ser boa... Com o Eduardo, lógico!! kkkkkkkkkkkkkkkkkkkkkkk Luiz Fernando 1 Quote Link to comment Share on other sites More sharing options...
emotta Posted October 1, 2015 Report Share Posted October 1, 2015 briga virtual nao vale.... teclado aceita tudo né? rs... mas se conseguir provar que dbseek a cada letra digitada em um banco de dados não sobrecarrega o trafego na rede eu vou querer descobrir qual é a mágica.... eu meu sistema eu tenho a pesquisa incremental que desenvolvemos, ele só começa a pesquisa a partir da 3a letra digitada e só faz a pesquisa se ficar mais de meio segundo sem digitar nada ou se der enter... aí dá... mas fazer dbseek a cada letra digitada seria não ter dó da rede... abraços KKKKKKKKKKKKK, Esperando o "nanico"!! Briga vai ser boa... Com o Eduardo, lógico!! kkkkkkkkkkkkkkkkkkkkkkk Quote Link to comment Share on other sites More sharing options...
alex2002 Posted October 1, 2015 Report Share Posted October 1, 2015 Nanico entrando no fórum. rsrsrsrsrs Na verdade pessoal, eu não usei em DBF. Foi em SQL. Primeiramente eu preencho um array através do select com os campos que vou usar no browse. Dai tudo é em array. Sendo assim, eu libero a rede e carrego um pouco a máquina. Só que pesquisar em um vetor não tem nem comparação com o DBF/SQL. É memória, e isso é extremamente mais rápido. Mas o segredo da "mágica" e carregar o array e trabalhar nele. Só isso. Se quiserem a rotina eu posto. Um abraço, Alexandre Pereira Quote Link to comment Share on other sites More sharing options...
evandro Posted October 2, 2015 Report Share Posted October 2, 2015 Olá, Não falei que o "Nanico" é bom nisso? Quote Link to comment Share on other sites More sharing options...
emotta Posted October 2, 2015 Report Share Posted October 2, 2015 e sem dbseek a cada letra digitada... voltando ao inicio do tópico a solução indicada não é funcional, qdo se programa pensando em banco de dados tem sempre que levar em conta o trafego. Então ou se faz a pesquisa em um array e apenas um select pra alimentar esse array ou se faz a pesquisa uma vez só, após a digitação... abraços Olá, Não falei que o "Nanico" é bom nisso? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 2, 2015 Report Share Posted October 2, 2015 Olá, Não falei que o "Nanico" é bom nisso? KKKKKKKKKKKKKK, Falta ele postar a rotina para o Eduardo testar e aprovar. abs. "Nanico" Thanks!! Quote Link to comment Share on other sites More sharing options...
emotta Posted October 2, 2015 Report Share Posted October 2, 2015 eu aprovar? kkkk pq? eu nao peciso testar kapiaba, a pesquisa por array nao sobrecarrega a rede mas nunca disso o contrário certo? A questão sempre foi sobre fazer DBSEEK a cada letra digitada e acredito que seja consenso geral aqui que fazer isso usando (dbseek a cada letra) seria errado... Já temos em nosso sistema a pesquisa incremental da forma que falei acima e tb por array como é a idéia dele... cada um faz do jeito que fica melhor pra cada situação, o importante é tomar precaução sempre qdo for banco pra não sobrecarregar a rede... KKKKKKKKKKKKKK, Falta ele postar a rotina para o Eduardo testar e aprovar. abs. "Nanico" Thanks!! Ronaldbuch 1 Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted October 2, 2015 Author Report Share Posted October 2, 2015 Valeu Kapiaba rsrs Obrigado Fiz uma pequena modificação e funcionou assim: @ 01,03 SAY "Pesquisa:" @ 01,03 GET oChavPesq VAR cChavPesq PICT "@!"; ON CHANGE( MsSeek( oChavPesq,nKey, oDlg, oLbx,cChavPesq)) // Static Function MsSeek( oGetBusca, cKey, oDlg, oLbx, cCHAVPESQ) Local cChaveBusca := ( oGetBusca:oGet:Buffer ), nPosAnt := RecNo() If ( cKey != 7 .And. cKey != 8 ) cChaveBusca := Stuff( cChaveBusca, oGetBusca:nPos, ; If( Set( _SET_INSERT ), 0, 1 ), ; Upper( Chr( cKey ) ) ) SET SOFTSEEK ON ( oLbx:cAlias )->( DbSeek( LEFT(cChaveBusca, oGetBusca:nPos - 1)) ) SET SOFTSEEK OFF IF cKey == VK_RETURN //-> Usu rio Teclou <ENTER> No Get, NÆo Refrescar a LISTBOX ELSE oLbx:Refresh() ENDIF Endif Return( .T. ) Quote Link to comment Share on other sites More sharing options...
alex2002 Posted October 2, 2015 Report Share Posted October 2, 2015 Galera, O Eduardo tem razão quanto ao uso de dbssek em rede. Se for tabela pequena até vai, mas como a minha rotina não distingue isso, prefiro fazer em array. A forma acima postada, vai funcionar, porém com muita ressalva quando se trabalhar com banco grande. Vai depenar a rede. Quote Link to comment Share on other sites More sharing options...
Marca Posted October 2, 2015 Report Share Posted October 2, 2015 Boa tarde a todos. Tenho as duas situações tanto em Dbf qto em Array Ee uso sql sendo que não existe como comparar o dbSeek sempre será mais rápido. Além de existir um problema com a situação do Array, vou explicar : Caso o banco seja grande e existir alguma atualização na tabela em questão, dentro do array não estará atualizado forçando assim um novo select, já no Dbseek qualquer alteração entra automaticamente no browse qdo digitado um novo conteudo. Quote Link to comment Share on other sites More sharing options...
SoPl Posted October 4, 2015 Report Share Posted October 4, 2015 Íà÷àë ðàáîòàòü íîâûé ðåñóðñ, åñëè âû õîòèòå ñìîòðåòü ñåêñ âèäåî http://pornosex-video.com/ òî ìû âñåãäà âàñ æäåì. Òåìàòèêà ãåé ïîðíî http://pornosex-video.com/gey áóäåò èíòåðåñíà òåì êòî ëþáèò íåòðàäèöèîííûé ïîðíî, â ëþáîì ñëó÷àå âàì áóäóò çàìàí÷èâû òàêèå êàòåãîðèè êàê ïîðíî àíàë http://pornosex-video.com/anal , äëÿ ëþáèòåëåé áäñì http://pornosex-video.com/bdsm òàê æå ìíîãî ëþáèòåëüñêîãî ïîðíî äðóãèõ íàïðàâëåíèé. Æåíùèíàì ïðèãëÿíóòñÿ êàòåãîðèÿ êàê ëåñáè îíëàéí http://pornosex-video.com/lesbi , òàê æå åñòü ÷òî çàöåíèòü è þíîøàì ïîïóëÿðíûå ðàçíîâèäíîñòè âèäåî êàê ìèíåò îíëàéí http://pornosex-video.com/minet , äëÿ öåíèòåëåé àçèàòñêîãî ïîðíî ó íàñ áîëüøîå êîëè÷åñòâî âèäåî íà ñåêñ òåìó ñåêñ àçèàòêè http://pornosex-video.com/aziatki . Ìíîãèì íðàâèòñÿ ñìîòðåòü íà ãðóïïîâîå ïîðíî âèäåî http://pornosex-video.com/gruppovoe , âåëèêîå ìíîæåñòâî êòî îáîæàåò òàêóþ ñòîðîíó âèäåîðîëèêîâ êàê ÷àñòíîå ïîðíî âèäåî http://pornosex-video.com/domashnee . Ñïåöèàëüíî äëÿ ýñòåòîâ ÷èòàòü ñåêñ ðàññêàçû http://pornosex-video.com/rasskazy íà íàøåì ñàéòå òîæå ïðèñóòñòâóåò ìíîãî ÷åãî óâëåêàòåëüíîãî è çàõâàòûâàþùåãî. Òàê æå âû ëåãêî îòòûùèòå â íàëè÷èè ôëåø èãðû îíëàéí http://pornosex-video.com/igry äëÿ êàæäîãî ñâîè, äîáàâëåíèå âèäåî ìàòåðèàëà âñåãî ïîÿâëÿåòñÿ íåïðåðûâíî! Òàê æå ìû îòêðûëè òåìàòè÷åñêèé ñàéò äëÿ öåíèòåëåé ïîðíî âèäåî îíëàéí http://sexporno-hd.com/ .Íàäååìñÿ ÷òî âàì â ëþáîì ñëó÷àå ïîíðàâÿòñÿ íàøè âåá ñàéòû äëÿ âçðîñëûõ è âû íå îñòàíèòåñü ðàâíîäóøíûìè! Íàøà ñåêñ ãðóïïà âêîíòàêòå https://vk.com/pornosexhd ÍÀ ÍÀØÅÌ ÑÀÉÒÅ ÂÑÅ ÁÅÑÏËÀÒÍÎ, òàê æå ÍÅÒ ÂÈÐÓÑÎÂ È ÐÀÇÄÐÀÆÀÞÙÅÉ ÐÅÊËÀÌÛ !!! . Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.