IDX incompativel com CLIPPER

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

Moderador: Moderadores

VanderSimples
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 15 Jul 2013 15:39
Localização: Marilia

IDX incompativel com CLIPPER

Mensagem por VanderSimples »

Eu tenho um sistema que converti do CLIPPER 5.2 para Harbour usando arquivos DBF ordenado em IDX

Quando rodo o sistema em Harbour da a mensagem que o Indice esta corrompido então eu deleto os arquivos IDX, entrou no sistema e esta os Índices são criados normalmente.
Se tento abrir o sistema em Clipper da o mesmo erro... aí tenho de deletar os índices para entrar no sistema em Clipper.

Também abri os 2 indices feitos pelo CLIPPER e pelo Harbour usando um editor HEX.
No indice IDX do CLIPPER a chave inicia no byte (16)
No indice IDX do Harbour a chave inicia no byte (22)

Alguém teria alguma ideia de como compatibilizar estes Índices?

Se tiver de usar CDX vai dar um belo de um trabalho...
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

IDX incompativel com CLIPPER

Mensagem por sygecom »

Procure por:
SET DBFLOCKSCHEME TO <nLockScheme>

DB_DBFLOCK_DEFAULT 0 Default locking scheme
DB_DBFLOCK_CLIP 1 Clipper 5.2 locking scheme
DB_DBFLOCK_CL53 2 Clipper 5.3 locking scheme
DB_DBFLOCK_VFP 3 Visual FoxPro locking scheme
DB_DBFLOCK_CL53EXT 4 Emulated shared locking
DB_DBFLOCK_XHB64 5 Locking scheme for files > 4GB
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

IDX incompativel com CLIPPER

Mensagem por Jairo Maia »

Olá Pessoal,

Apenas uma observação: O RDD DBF/IDX com Harbour apresenta problemas severos para trabalhar em rede. Salvo se as versões 3.x do Harbour trouxe novidade a esse respeito, em rede os índices desse RDD se corrompem com facilidade.
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)
VanderSimples
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 15 Jul 2013 15:39
Localização: Marilia

IDX incompativel com CLIPPER

Mensagem por VanderSimples »

Ola

Sygecon, eu não conhecia este SET DBFLOCKSCHEME TO <nLockScheme>

Mas pelo que li, ele apenas serve para compatibilizar o travamento de registros em rede, será muito útil para mim, mas infelizmente não resolveu meu problema.

Mesmos colocando SET DBFLOCKSCHEME TO no inicio do sistema, antes do MAIN(), os indices foram criados de forma que não consegui abrir no CLIPPER.

Olhando aquivo de include dbinfo.ch achei outra constante:
/* DBF TYPES */
#define DB_DBF_STD 1
#define DB_DBF_VFP 2

Saberia me dizer qual comando que utiliza esta constante? É apenas no DbCreate? Ou tem da para colocar no USE também?
VanderSimples
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 15 Jul 2013 15:39
Localização: Marilia

IDX incompativel com CLIPPER

Mensagem por VanderSimples »

Haa... descobri o meu problema... é muito mais simples que eu imaginava.

No clipper quando eu faço:

Código: Selecionar todos

   REQUEST DBFCDX 
   DBSETDRIVER("DBFCDX") 
   RDDSETDEFAULT("DBFCDX") 
   
use e:\clientes\geren\cadusu.dbf new alias USU shared
index on U_COD to e:\clientes\geren\usucod
O resultado é que ele cria o USUCOD.IDX

fazendo o mesmo no Harbour:

Código: Selecionar todos

#include <hmg.ch>
#include "hbgtinfo.ch"

Function Main

   REQUEST DBFCDX 
   REQUEST DBFFPT
   DBSETDRIVER("DBFCDX") 
   RDDSETDEFAULT("DBFCDX") 
   SET DBFLOCKSCHEME TO DB_DBFLOCK_CLIP   
 
   use e:\clientes\geren\cadusu.dbf new alias USU shared
   index on U_COD to e:\clientes\geren\usucod

Return
O resultado é que ele cria um usucod.cdx

Como na minha linha estava assim: index on U_COD to e:\clientes\geren\usucod.idx eu não percebia que na realidade era um CDX.

Então a minha pergunta é alguem sabe como executar o INDEX ON de forma que o HARBOUR crie um IDX e não um CDX?
Responder