Criar indices .fpt

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Criar indices .fpt

Mensagem por Laudelino Scarmagnani »

Olá pessoal.
Tenho uma estrutura com um campo memo. Tenho que gerar os índices desta estrutura. Como faço isso no xHabour? Para os índices normais uso:
INDEX ON STR(CDFILIAL,3)+STR(CDCLIENTE,7)+STR(NRNOTAFISC,9)+IDSERIENF+STR(NRSEQITEM,3)+;
STR(NRSEQUENC,3)+STR(CDOBSERV,3) TO ESOBS
Abraços.
Laudelino
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Criar indices .fpt

Mensagem por Itamar M. Lins Jr. »

Você quer dizer CDX, porque FPT é o campo memo antigo DBT.

Código: Selecionar todos

INDEX ON STR(CDFILIAL,3)+STR(CDCLIENTE,7)+STR(NRNOTAFISC,9)+IDSERIENF+STR(NRSEQITEM,3)+;
STR(NRSEQUENC,3)+STR(CDOBSERV,3)  TAG 001 
INDEX on NOME TAG 002
INDEX on CODIGO TAG 003
Não esquecer do REQUEST "DBCDX","DBFFPT"... RDDSETDEFAULT("DBFCDX")...
Tem exemplos aqui no forum...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Criar indices .fpt

Mensagem por Jairo Maia »

Olá Laudelino,

Não é possível criar índices com campos Memo. Somente os campos com tipos: Caractere, Data, Numérico e Lógico podem ser criados índices.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

Criar indices .fpt

Mensagem por Laudelino Scarmagnani »

Quando crio um campo memo em um arquivo .DBF, é criado um arquivo com o nome da estrutura.fpt. Exemplo
NFAUX.DBF. Dentro dela tenho definido o campo XML tipo MEMO.
NFAUX.CDX ->Primeiro Indice
NFAUX1.CDX -> Segundo Indice.
NFAUX.FPT é criado pelo sistema. Se eu deletar este arquivo por algum motivo, da erro ao setar o arquivo.
Não sei como cria-lo novamente.
Laudelino
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Criar indices .fpt

Mensagem por Itamar M. Lins Jr. »

Você não pode deletar um arquivo seja FPT ou DBT, quando você faz isso, não consegue mais abrir o arquivo DBF é normal.
Se deseja apagar um arquivo FPT ou DBT, modifique a estrutura do DBF, apague a campo memo do DBF na estrutura via modi struct...
E ainda está errado sua forma de trabalhar com CDX.
Não fica vários indices CDX, apenas um CDX para cada DBF, e dentro do CDX que é uma sacola (BAG) ficam todos os indices.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criar indices .fpt

Mensagem por JoséQuintas »

Tem que lembrar de duas coisas:
- Existe um limite para o tamanho da chave de índice
- A chave do índice precisa tamanho fixo. Ao usar campo memo, isso vai deixar o índice "doidão" e corrompido.

Então pra indexar por um campo memo, teria que fixar um tamanho.

Código: Selecionar todos

INDEX ON PAD( campomemo, 200 ) TO INDEX
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Criar indices .fpt

Mensagem por Jairo Maia »

Está errado também o raciocínio. Arquivos FPT ou DBT não são índices, mas sim arquivos literais. Quando você grava o XML no campo memo, esse XML não está no DBF mas sim no FPT. É possível recriar um arquivo FPT vazio para ter acesso ao DBF, mas o conteúdo do campo memo se perdeu ao apagar o arquivo.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criar indices .fpt

Mensagem por JoséQuintas »

Ok, vi a primeira mensagem, ele cita sobre indexar por um campo memo.
Em outra mensagem ele diz sobre ter perdido do FPT.

Se for pra indexar, é o que já mencionei.

Se for pra recuperar o FPT:
O conteúdo se perdeu, não há mais como recuperá-lo.
A única opção é criar uma estrutura com o memo, e copiar o FPT vazio pra ocupar o lugar do perdido.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Criar indices .fpt

Mensagem por Jairo Maia »

Olá José,

Minha mensagem anterior onde eu disse: "Está errado também o raciocínio", deu a impressão que eu estava me referindo a sua. Mas na verdade eu estava dando continuidade a uma citação do Itamar mais acima, o correto teria sido colocar essa citação ficando assim:
Itamar M. Lins Jr. escreveu:E ainda está errado sua forma de trabalhar com CDX.
Está errado também o raciocínio. [restante da msg].

Já quanto também minha interpretação na primeira mensagem foi que ele pretendia criar um índice usando um campo Memo, e eu disse que não era possível. Porém, realmente é sim usando a função PAD(). Aprendi mais uma, valeu a dica:

Código: Selecionar todos

REQUEST DBFCDX

PROC REC_estr     // estrutura do arquivo RECADOS
 Local aEstr := {;
                {"codcli"  ,"N",  5, 0},;
                {"nomecli" ,"C", 40, 0},;
                {"obs"     ,"M", 10, 0};
                }

 RddSetDefault( "DBFCDX" )

 DBCreate( "TestMemo", aEstr )
 Use TestMemo Shared New
 
 Append Blank
 Replace Codcli With 3
 Replace nomecli With "Cliente 1"
 Replace obs With Repl( "3 Testar index em campo Memo - ", 20 )
 
 Append Blank
 Replace Codcli With 2
 Replace nomecli With "Cliente 2"
 Replace obs With Repl( "2 Testar index em campo Memo - ", 20 )
 
 Append Blank
 Replace Codcli With 1
 Replace nomecli With "Cliente 3"
 Replace obs With Repl( "1 Testar index em campo Memo - ", 20 )
 
 DbCommit()
 
 Index On codcli Tag Codigo To TestMemo
 Index On nomecli Tag NomeCli To TestMemo
 Index On Pad( obs, 20 ) Tag Obs To TestMemo
 
 Set Order To Tag Codigo
 Browse()

 Set Order To Tag NomeCli
 Go Top
 Browse()

 Set Order To Tag Obs
 Go Top
 Browse()

Return Nil
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criar indices .fpt

Mensagem por JoséQuintas »

Sem problemas.

Tem também um erro básico... INDEX ON Trim( nome )
Isso também causaria problemas de índice, porque o tamanho da chave ficaria indefinido.

Mas acho que o mais comum pode ser mesmo o tamanho da chave.
Se não me engano, pra NTX o limite é 100 caracteres, e pra CDX 200.
Algo assim, estouraria o limite:

Código: Selecionar todos

index on NomeDepto + NomeSecao + NomeCategoria + NomeGrupo + NomeProduto TO temp
Num caso desses, um pedaço do nome + código pode ser útil.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder