Arthur Silvestre Posted June 6, 2013 Report Share Posted June 6, 2013 Pessoal eu faço um filtro com o simbolo de "Esta contido" no código (set filter to 'x' $ cAlias->Nome). Porem a primeira vez ele demora pra caramba para efetuar esse filtro, mas da segunda em diante faz rapidinho. alguém tem alguma ideia do por que isso acontece? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted June 6, 2013 Report Share Posted June 6, 2013 Melhor usar ORDSCOPE() ou INDICE TEMPORARIO(TEMPORARY) Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted June 6, 2013 Author Report Share Posted June 6, 2013 Melhor usar ORDSCOPE() ou INDICE TEMPORARIO(TEMPORARY) ordscope faz a pesquisa no meio ? exemplo : ar $ xÃcara < isso é .t. Ate hoje não vi. e como funcionaria o Ãndice temporário ? ps: o dbase é enorme, cerca de 200000 produtos. Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted June 6, 2013 Report Share Posted June 6, 2013 Colega existe um comando proprio do xharbour para se fazer isto , aqui como sempre usei ADS e agora SQL , numca precisei usar este comando, mais o proprio kapiaba ja postou exemplo em dicas, so não sei como procurar, vamos ver se ele se lembra disto... Abraços Luiz Fernando Quote Link to comment Share on other sites More sharing options...
kapiaba Posted June 6, 2013 Report Share Posted June 6, 2013 // Tenho essa rotina, ve se te ajuda, crio um array com o retorno dos dados // solicitado: STATIC FUNCTION BuscaSN(oBrw) LOCAL oBtnSN[1] PRIVATE aSnsele := oSnsele := {}, oBrwSN, nRegistro := RecNo(), ; vSn := SPACE(30), lDados := .F. vfoc:=OrdSetFocus() Con->(dbSetOrder(2)) Con->(dbGoTop()) IF MsgGet( "Procurar Por", "Sobrenome do ContribuÃnte", @vSn, "Busca" ) vSn := ALLTRIM(UPPER(vSn)) DbEval({|| IF(ordWildSeek("*"+vSn+"*",.T.),(AADD( aSnsele, {Con->ativo,Con->codigo,Con->nome,Con->operadora}),lDados:=.T.),)}) IF ldados DEFINE DIALOG oDlg FROM 1,15 TO IF(lSystem,354,345),500 ; PIXEL STYLE nOr(DS_MODALFRAME) ; TITLE " Lista de ContribuÃntes com Sobrenome "+vSn ; COLOR nRgb(0,0,0),nRgb(225, 225, 240) @ 5,5 BROWSE oSnsele SIZE 232,122 PIXEL FONT oFnt1 OF oDlg ; ON DBLCLICK ChamaDados() ; COLOR nRgb(0,0,0), nRgb(180,230,190) ADD COLUMN TO oSnsele HEADER "S" ; DATA {|| IF(aSnsele[oSnsele:nat,1]=="S" .AND. ; aSnsele[oSnsele:nat,4]#"999",oBmp[1], ; IF(aSnsele[oSnsele:nat,1]=="N" .AND. ; aSnsele[oSnsele:nat,4]#"999",oBmp[2],oBmp[3]))} ; 3DLOOK FALSE SIZE 20 BITMAP ADD COLUMN TO oSnsele HEADER CRLF+"Código"+CRLF DATA aSnsele[oSnsele:nat,2] 3DLOOK FALSE SIZE 80 PIXEL ADD COLUMN TO oSnsele HEADER CRLF+"Nome"+CRLF DATA aSnsele[oSnsele:nat,3] 3DLOOK FALSE SIZE 350 PIXEL oSnsele:SetArray(aSnsele) oSnsele:nHeightCell+=6 oSnsele:nHeightHead+=4 oSnsele:lNoHScroll := .T. @ 132,185 VBtnBmp oBtnSN[1] Prompt "Sair" Pixel Size 51,16 Of oDlg Font oFnt3 ; Fundo nRgb(0,0,0),{{nRgb(255,255,255),nRgb(190,190,190),1},{nRgb(190,190,190),nRgb(255,255,255),1}} ; BitMaps {"VOLTA",1} ACTION oDlg:End() oBtnSN[1]:cToolTip:="Retorna a Tela Anterior" ACTIVATE DIALOG oDlg CENTER ; ON PAINT ( oMsg := TMsgBar():New(oDlg," Lista de ContribuÃntes com Sobrenome "+vSn)) ELSE MsgAlert("Não Foi encontrado ContribuÃntes com"+CRLF+"o sobrenome "+vSn,"Atenção") ENDIF ENDIF Con->(dbSetOrder(vfoc)) dbGoTo(nRegistro) ; oBrw:UpsTable() ; oBrw:Refresh() Return( .T. ) // Beto Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted June 7, 2013 Author Report Share Posted June 7, 2013 Bom dia a todos, de fato funcionou essa função Kapiaba, mas eu fiz de outro método, no final das contas o erro era meu >_> xD. Quando troquei o ordscope por dbseek ele apresentou um desempenho em rede muito melhor. Obrigado a todos, Perdão qualquer inconveniência causada por minha pessoa. 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.