Página 1 de 1

Problema pra criar CDX

Enviado: 28 Set 2018 20:22
por JoséQuintas
Estou estranhando o comportamento.
Tenho a rotina de criar índices, sempre igual pra todos os arquivos e índices.

use arquivo
index on chave tag (nome)
index on chave2 tag (outro)


mas agora precisei usar pra arquivos em pastas.

use pasta\arquivo

o problema é que ao final da reindexação, somente uma única tag está dentro do CDX, para os arquivos em pasta diferente.

Alguma idéia?

Nota:
A rotina usa array pra TODOS os dbfs e TODOS os índices.
A única diferença é alguns arquivos com path no nome.

Problema pra criar CDX

Enviado: 28 Set 2018 20:35
por JoséQuintas

Código: Selecionar todos

      SELECT 0
      IF ! UseSoDbf( cDbfName )
         RETURN .F.
      ENDIF
      FOR nCont = 1 TO Len( acIndice )
         GrafTempo( "Criando " + acIndice[ nCont, 1 ] + IndexExt() )
         SET INDEX TO // para usar for
         GOTO TOP     // para usar for
         xCampo := acIndice[ nCont, 2 ]
         IF Len( acIndice[ nCont ] ) == 2
            INDEX ON &xCampo TAG ( ToTag( acIndice[ nCont, 1 ] ) ) TO ( cDbfName ) EVAL GrafInd()
         ELSEIF Len( acIndice[ nCont ] ) == 3
            INDEX ON &xCampo TAG ( ToTag( acIndice[ nCont, 1 ] ) ) TO ( cDbfName ) FOR &( acIndice[ nCont, 3 ] ) EVAL GrafInd()
         ELSEIF Len( acIndice[ nCont ] ) == 4
            INDEX ON &xCampo TAG ( ToTag( acIndice[ nCont, 1 ] ) ) TO ( cDbfName ) DESCEND EVAL GrafInd()
         ELSEIF Len( acIndice[ nCont ] ) == 5
            INDEX ON &xCampo TAG ( ToTag( acIndice[ nCont, 1 ] ) )  TO ( cDbfName ) UNIQUE EVAL GrafInd()
         ENDIF
         SET INDEX TO
         //nRecOk += LastRec()
      NEXT
      USE
      chmodFile( cDbfName + IndexExt() )
A rotina é sempre essa.
Apesar do chmodFile(), é no Windows.

Acrescentei o nome do arquivo de índice depois, pra ver se fazia diferença.
E Acrescentei o ToTag() pra não considerar path (a rotina vale pra IDX e CDX)

Dois itens do array

Código: Selecionar todos

   IndexDbf( "B0600", "COBR B0600 Orcamento Obras", "COBR" )
      IndexInd( "B06001", "Cod_Emp + Cod_Pi" )
      IndexInd( "B06002", "Nome" )
      IndexInd( "B06003", "Cod_Cli" )
   IndexDbf( cPathDbf + "B2500", "PRD1 Produto Principal", "PRD1" )
      IndexInd( cPathDbf + "B25001", "Cod_Pro" )
      IndexInd( cPathDbf + "B25002", "Nome" )
      IndexInd( cPathDbf + "B25003", "Substr( Nome, 21, 90 )" )
A única diferença é o path no nome do arquivo
é um único array com tudo, tudo no mesmo fonte.
Só sobra comportamento diferente com path.

Problema pra criar CDX

Enviado: 28 Set 2018 23:52
por Itamar M. Lins Jr.
Ola!
Tentou sem "TO (cDBFNAME)" é desnecessário.

Saudações,
Itamar M. Lins Jr.

Problema pra criar CDX

Enviado: 29 Set 2018 01:42
por JoséQuintas
Estava sem nome antes.

Problema pra criar CDX

Enviado: 29 Set 2018 18:12
por JoséQuintas
Resolvido.
Esqueci que são duas rotinas, e estava alterando só uma.
E o que atrapalhou foi a barra de path estilo Linux.
Ao entrar como parte da tag, todas as tags ficaram iguais.
icdx.png

Problema pra criar CDX

Enviado: 30 Set 2018 18:26
por asimoes
Quintas,

o que é esse comando "disp stat" desculpa a minha ignorância, isso é do harbour ?

Problema pra criar CDX

Enviado: 30 Set 2018 23:44
por alxsts
Olá!
asimoes escreveu:o que é esse comando "disp stat" desculpa a minha ignorância, isso é do harbour ?
Este é o famoso e ancestral comando Display status do dot prompt do dBASE.

Problema pra criar CDX

Enviado: 01 Out 2018 08:05
por JoséQuintas
Isso.
Que no meu dbase executa esta rotina:

Código: Selecionar todos

STATIC FUNCTION cmdListStatus()

   LOCAL nCont, nCont2, nSelect := Select()

   FOR nCont = 1 TO 255
      IF Len( Trim( Alias( nCont ) ) ) != 0
         SELECT ( nCont )
         SayScroll()
         SayScroll( "Alias " + Str( nCont, 2 ) + " -> " + Alias() + iif( nCont == nSelect, "  ==> Actual Alias", "" ) )
         FOR nCont2 = 1 TO 100
            IF Len( Trim( OrdKey(nCont2 ) ) ) == 0
               EXIT
            ENDIF
            SayScroll( "   Tag " + OrdName( nCont2 ) + " -> " + OrdKey( nCont2 ) )
         NEXT
         IF Len( Trim( dbFilter() ) ) != 0
            SayScroll( "          Filter: " + dbFilter() )
         ENDIF
         IF Len( Trim( dbRelation() ) ) != 0
            SayScroll("          Relation: " + dbRelation() + " Alias: " + Alias( dbRSelect() ) )
         ENDIF
      ENDIF
   NEXT
   SELECT ( nSelect )
   SayScroll( "Current Path -> " + hb_cwd() )
   SayScroll()

   RETURN NIL

Problema pra criar CDX

Enviado: 01 Out 2018 20:44
por Itamar M. Lins Jr.
Ola!

Cadê o "modi stru" ?

Saudações,
Itamar M. Lins Jr.

Problema pra criar CDX

Enviado: 02 Out 2018 09:00
por JoséQuintas