Clipper On Line • Ver Tópico - Diferença de comportamento com SET AUTOPEN ON hbnetio/letodb
Página 1 de 1

Diferença de comportamento com SET AUTOPEN ON hbnetio/letodb

MensagemEnviado: 04 Fev 2016 16:42
por asimoes
Pessoal,

A questão é para o driver DBFCDX tanto para HBNETIO/LETODB onde encontrei comportamento diferente para os dois gerenciadores.

O comando SET AUTOPEN ON faz com que o indice do dbf seja aberto automaticamente sem a necessidade de SET INDEX TO (CDX)

Funciona tanto com HBNETIO/LETODB notei a seguinte diferença:

Tenho uma rotina onde eu preciso criar indices temporários para uma tabela que já tem um indice.

Antes de criar o indice faço:

AbreDbf("APC01")

APC01->(ordListClear())

INDEX ON Codigo TAG IND001 FOR Empty(D_Deslig) .AND. !Deleted() MEMORY ADDITIVE

Com hbnetio o indice é acrescentado aos indices que já existem, ou seja o ordlistclear não funcionou.
Com letodb funciona o ordlistclear somente o indice ind001 está na área de trabalho do dbf

Diferença de comportamento com SET AUTOPEN ON hbnetio/letodb

MensagemEnviado: 04 Fev 2016 17:15
por asimoes
Exemplificando:

Sem letodb/hbnetio

         SET AUTOPEN ON
         fErase("TESTDBF.CDX")
         aStruct:={}
         aAdd(aStruct, {"CODIGO", "C", 5, 0})
         aAdd(aStruct, {"NOME", "C", 30, 0})
         DbCreate( "TESTDBF", aStruct, "DBFCDX",.T., "TESTDBF" )
         INDEX ON CODIGO TAG CODIGO TO TESTDBF
         INDEX ON NOME   TAG NOME   TO TESTDBF
         TESTDBF->(DbCloseArea())
         DbUseArea(.T., "DBFCDX", "TESTDBF", "TESTDBF", .T.)
         TESTDBF->(ordListClear())
         INDEX ON Codigo                                 TAG IND001  FOR !Deleted() MEMORY ADDITIVE
         INDEX ON Codigo + Nome                          TAG IND002  FOR !Deleted() MEMORY ADDITIVE
         FOR I:=1 TO TESTDBF->(OrdCount())
             ? TESTDBF->(OrdName(i)), TESTDBF->(OrdKey(i))
             inkey(0)
         NEXT

Diferença de comportamento com SET AUTOPEN ON hbnetio/letodb

MensagemEnviado: 04 Fev 2016 18:15
por asimoes
Testando, ser usar SET AUTOPEN ON ordListClear() não funciona isso com hbnetio, com letodb funciona.

Diferença de comportamento com SET AUTOPEN ON hbnetio/letodb

MensagemEnviado: 05 Fev 2016 01:07
por JoséQuintas
Se não me engano, autoopen não é recomendado.
Aqui sempre usei com ele desligado, mesmo com Clipper e SIXCDX.

Diferença de comportamento com SET AUTOPEN ON hbnetio/letodb

MensagemEnviado: 05 Fev 2016 07:56
por asimoes
Quintas,

O interessante é que com letodb funciona! sem o autopen tem que especificar o indice com SET INDEX TO