syspel Posted May 14, 2015 Report Share Posted May 14, 2015 ola pessoal tenho um campo no banco de dados dbf,chamado descricao onde tem os nomes das pessoas quando faco os indices assim como exemplo abaixo index on rtrim(descricao ) to nome ou alltrim da o erro tamanho do dato muito longo ordcreate(0) \source\rdd\rddord.prg deste ja obrigado carlos fhw 14.04 xharbour 1.2.1 dbf cdx .bat Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 14, 2015 Report Share Posted May 14, 2015 Qual é o tamanho do campo? Quote Link to comment Share on other sites More sharing options...
Euclidao Posted May 14, 2015 Report Share Posted May 14, 2015 Carlos, A não ser que esteja errado, você não pode indexar CDX ou NTX com campos de comprimento variável. Fiz um teste com: INDEX ON TRIM(descricao) TO NOME Deu o erro: Error description: Error DBFCDX/1026 Data width error Sugiro utilizar: index on subs(descricao, 1, 20) to nome O comprimento do campo do INDEX é 20 pode ser variado à vontade. T+ Euclides Theotokos 1 Quote Link to comment Share on other sites More sharing options...
aferra Posted May 14, 2015 Report Share Posted May 14, 2015 fiquei intrigado, qual a razão de se fazer um index dessa maneira? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 14, 2015 Report Share Posted May 14, 2015 Teste e comente: #Include "FiveWin.ch" REQUEST DBFCDX Function Main() Field First, Last, State // Campos a Indexar no .CDX Local oBrw , otecla USE CUSTOMER SHARED NEW Index On TRIM( First ) + Space( 1 ) + Last Tag Nome TO CUSTOMER ; FOR !DELETED() EVAL( CursorWait(), SysRefresh() ) EVERY 10 Index On State Tag Estado TO CUSTOMER ; FOR !DELETED() EVAL( CursorWait(), SysRefresh() ) EVERY 10 xBrowse() Return Nil Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 14, 2015 Report Share Posted May 14, 2015 Resolvido un est... #Include "FiveWin.ch" ANNOUNCE RDDSYS REQUEST DBFCDX, DBFFPT REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto Function Main() Field First, Last, State // Campos a Indexar no .CDX RDDSETDEFAULT( "DBFCDX" ) // CARREGA RDD DEFINIDO NO CASO, *.CDX USE CUSTOMER SHARED NEW /* // Funciona normal Index On TRIM( First ) + Space( 1 ) + Last Tag Nome TO CUSTOMER ; FOR !DELETED() EVAL( CursorWait(), SysRefresh() ) EVERY 10 */ /* // Assim quebra: // Error description: Error DBFCDX/1026 Data width error Index On TRIM( First ) Tag Nome TO CUSTOMER ; FOR !DELETED() EVAL( CursorWait(), SysRefresh() ) EVERY 10 */ // Funciona normal Index On TRIM( First ) + Space( 1 ) Tag Nome TO CUSTOMER ; FOR !DELETED() EVAL( CursorWait(), SysRefresh() ) EVERY 10 Index On State Tag Estado TO CUSTOMER ; FOR !DELETED() EVAL( CursorWait(), SysRefresh() ) EVERY 10 xBrowse() Return Nil Quote Link to comment Share on other sites More sharing options...
sambomb Posted May 14, 2015 Report Share Posted May 14, 2015 Não pode indexar um campo com tamanhos diferentes....Utilize sem alltrim que vai resolver Quote Link to comment Share on other sites More sharing options...
syspel Posted May 21, 2015 Author Report Share Posted May 21, 2015 na versao do clipper 5.3 vc podia index os descricao assim index on len(rtrim(descricao)) to aa quando eu for procurar uma palavra começando com (a) ele colocaria o ponteiro em cima da palavra alberto,ou se eu quiser colocar tudo comecado com a letra a ele colocaria o ponteiro em cima da letra a o index nao aceita alltrim,rtrim ltrim porque ? fwh 1404 xharbour dbf xdev cdx carlos syspel Quote Link to comment Share on other sites More sharing options...
aferra Posted May 21, 2015 Report Share Posted May 21, 2015 Bem Carlos eu acho que não se pode indexar os campos com tamanhos diferentes, e sem fazer toda essa manobra eu consigo o mesmo resultado Quote Link to comment Share on other sites More sharing options...
crisvam Posted May 21, 2015 Report Share Posted May 21, 2015 Tire o Alltrim/rTrim da indexação que funcionará Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 21, 2015 Report Share Posted May 21, 2015 Pois eu agarantcho, que assim funcionará perfeito, eu acho que ele nem testou. // Funciona normal Index On TRIM( Nome ) + Space( 1 ) Tag Nome TO CUSTOMER ; FOR !DELETED() EVAL( CursorWait(), SysRefresh() ) EVERY 10 Quote Link to comment Share on other sites More sharing options...
sambomb Posted May 21, 2015 Report Share Posted May 21, 2015 Pois eu agarantcho, que assim funcionará perfeito, eu acho que ele nem testou. // Funciona normal Index On TRIM( Nome ) + Space( 1 ) Tag Nome TO CUSTOMER ; FOR !DELETED() EVAL( CursorWait(), SysRefresh() ) EVERY 10 Só deveria funcionar se o banco estiver com todos os registros com o mesmo tamanho Quote Link to comment Share on other sites More sharing options...
kleyber Posted May 21, 2015 Report Share Posted May 21, 2015 Faço minhas as palavras do AFerra: qual a razão de se criar um índice dessa forma? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 21, 2015 Report Share Posted May 21, 2015 Só deveria funcionar se o banco estiver com todos os registros com o mesmo tamanho Quote Link to comment Share on other sites More sharing options...
sambomb Posted May 21, 2015 Report Share Posted May 21, 2015 Não na estrutura e sim no conteudo exemplo: Funcionaria: Reg | Campo nome 001 | Joao 002 | Juca 003 | Mano Erro: Reg | Campo nome 001 | Joao 002 | Kapiaba 003 | Samir Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 21, 2015 Report Share Posted May 21, 2015 Entendi Samir. Valew(). Obg. abs. Quote Link to comment Share on other sites More sharing options...
syspel Posted May 22, 2015 Author Report Share Posted May 22, 2015 entendi vou testar o exemplo do amigo e te direi obrigado Quote Link to comment Share on other sites More sharing options...
syspel Posted May 25, 2015 Author Report Share Posted May 25, 2015 noo funcionou o ultimo exemplo denttro do banco de dados estao assim antonio carlo antonio cae antonio caefaz antonio pereira antonio brito antonio sergueira a ideia e a seguinte ni clipper 53 funciona quando eu procuro pelo nome antonio c ele posicione o ponteiro em cima do anotnio carlos se eu procura-se pelo antonio carlos o poniteiro ficaria em cima como eu tenho varios antonio se procura-se pelo antonio e ficaria em cima do antonio o ponteiiro fui mais claro carlos Quote Link to comment Share on other sites More sharing options...
sambomb Posted May 25, 2015 Report Share Posted May 25, 2015 noo funcionou o ultimo exemplo denttro do banco de dados estao assim antonio carlo antonio cae antonio caefaz antonio pereira antonio brito antonio sergueira a ideia e a seguinte ni clipper 53 funciona quando eu procuro pelo nome antonio c ele posicione o ponteiro em cima do anotnio carlos se eu procura-se pelo antonio carlos o poniteiro ficaria em cima como eu tenho varios antonio se procura-se pelo antonio e ficaria em cima do antonio o ponteiiro fui mais claro carlos A ordem alfabética correta é: antonio brito antonio cae antonio caefaz antonio carlo antonio pereira antonio sergueiraEntão caso procure por "antonio" iria focar primeiro no "antonio brito" Se procurar por "antonio c" vai focar em "antonio cae" Se procurar por "antonio p" vai focar em "antonio sergueira" Certifique-se que está pesquisando com AllTrim() pois caso contrário vai dar diferença. Exemplo: index on NOME tag NOMEASC to ("C:\TABELA") /*---------------------------*/ Select TABELA DbSetOrder(1) cGet := "antonio" If DbSeek( AllTrim( cGet ) ) ? NOME //-- "antonio brito" Else ? "Falhou ao pesquisar (" + AllTrim( cGet ) + ")" End cGet := "antonio c" If DbSeek( AllTrim( cGet ) ) ? NOME //-- "antonio cae" Else ? "Falhou ao pesquisar (" + AllTrim( cGet ) + ")" End Obs.: A indexação diferencia maiúsculo de minusculo, então pode causar diferença, nesse caso utilize Upper no indice e na pesquisa para sanar a diferença Quote Link to comment Share on other sites More sharing options...
syspel Posted June 2, 2015 Author Report Share Posted June 2, 2015 vou tester e te falo abrigado Quote Link to comment Share on other sites More sharing options...
reneumg Posted June 2, 2015 Report Share Posted June 2, 2015 Vou Dar meu pitaco, se é que entendi o Post. Se fazer assim: Exemplo: Select("CLIENTE") index on Upper(NOME) tag NOMECLI to ("C:\TABELA") vBusca:="ANTONIO C" CLIENTE->(DbSeek(vBusca,.t.)) Ou SET SOFTSEEK ON CLIENTE->(DbSeek(vBusca)) SET SOFTSEEK OFF Fim Quote Link to comment Share on other sites More sharing options...
syspel Posted June 10, 2015 Author Report Share Posted June 10, 2015 ok amigos deu certo a ideia show bola obrigado carlos fwh14.04 xharb 123 dbf xdev 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.