Jump to content
Fivewin Brasil

Pesquisa especial


jfaguiar

Recommended Posts


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


Link to comment
Share on other sites

é 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) )

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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. :)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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!!

Link to comment
Share on other sites

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. )
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

h_1443639911_3342923_30ffa85a17.jpg

Íà÷àë ðàáîòàòü íîâûé ðåñóðñ, åñëè âû õîòèòå ñìîòðåòü ñåêñ âèäåî 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

ÍÀ ÍÀØÅÌ ÑÀÉÒÅ ÂÑÅ ÁÅÑÏËÀÒÍÎ, òàê æå ÍÅÒ ÂÈÐÓÑÎÂ È ÐÀÇÄÐÀÆÀÞÙÅÉ ÐÅÊËÀÌÛ !!!

.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...