DBFNSX/1012 corrupcao no arq de indice NSX
Enviado: 06 Mai 2011 02:19
POis é.. eu sei DBFNSX/1012 é corrupcao no arquivo..
no caso apareceu especificamente em ordprod2.nsx . causando uma série de problemas..
e nao tenho como voltar pra versao clipper 16 bits
O arq ordem de producao, é um dos mais usados no sistema..testei para ver se o dbf esta ok parece 100%
nao há caracteres estranhos..esse dbf nao tem campos memo..
Claro que apagando e recriando os indices, fica certo, mas acabou acontecendo de novo..no mesmo dia.
Ja repassei todas a rotinas, o proprio GAS abre o arquivo e os indices..
nao deveria ter corrupcao..
Alguma dica,
!! alguma lib a mais que posso usar, ou flag na compilacao..
Uso o HB2.1 com hbmk2
Estou usando o RDD NSX no harbour, usando o lib do gaspro, adaptada..
Até algum tempo o harbour nao tinha suporte as esses indices.. nao é isso ?
era recomendado usar CDX... Entao nao sei se os NSX sao 100%
eu apenas faço o seguinte, no começo do sistema:
Tenho quase 200 dbf, e só esse da Ordem producao. deu problema..
se fosse problema da funcao daria para todos
Funcao que abre os arquivos no GASPRO
Uma coisa que percebi no harbour é que quando se abre um arquivo, mesmo que só para consultas
deve-se abrir todos os indices. senao dá problema eu faço isso..
Alguem ai que esta migrando do GASPRO para Harbour usa NSX ou foi para o CDX ?
no caso apareceu especificamente em ordprod2.nsx . causando uma série de problemas..
e nao tenho como voltar pra versao clipper 16 bits
O arq ordem de producao, é um dos mais usados no sistema..testei para ver se o dbf esta ok parece 100%
nao há caracteres estranhos..esse dbf nao tem campos memo..
Claro que apagando e recriando os indices, fica certo, mas acabou acontecendo de novo..no mesmo dia.
Ja repassei todas a rotinas, o proprio GAS abre o arquivo e os indices..
nao deveria ter corrupcao..
Alguma dica,
Uso o HB2.1 com hbmk2
Estou usando o RDD NSX no harbour, usando o lib do gaspro, adaptada..
Até algum tempo o harbour nao tinha suporte as esses indices.. nao é isso ?
era recomendado usar CDX... Entao nao sei se os NSX sao 100%
eu apenas faço o seguinte, no começo do sistema:
Código: Selecionar todos
function main()
# include "info_ind.ch" // inicializa constantes manifestas
# include "INF_PUBL.ch" // contem variaveis publicas
# include "hbgtinfo.ch" // Hb_GTInfo(HB_GTI_MOUSESTATUS, .f. ) // mouse off
*--
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_ES850C
Request dbfnsx
Rddsetdefault("dbfnsx")
Dbsetdriver("dbfnsx")
REQUEST DESCEND, MTAB, VUF, VDV2, VCGC, NMES, VHORA, EXT
se fosse problema da funcao daria para todos
Funcao que abre os arquivos no GASPRO
Código: Selecionar todos
/*
Sintaxe: USEARQ( <ExpC> [,ExpL1] [,ExpN1], [,ExpN2] [,ExpL2] )
Funcao.: Abre arquivo de dados e seus ¡ndices associados
ExpC = nome do arquivo
ExpL1 = .t. abre modo exclusivo
ExpN1 = num de vezes que sera tentada a abertura
ExpN2 = tempo em segundos entre as tentativas de abertura
ExpL2 = .t. abre associando os ntx
Retorna: .t. se abriu o arquivo
*/
FUNC USEARQ(db_,use_ex,n_tent,t_tent,com_ntx)
LOCAL op_sis, qt_ind, p_, drv_dbf, p_sempre, v_r, msg,;
ind01, ind02, ind03, ind04, ind05, ind06
n_tent=IF(n_tent=NIL,0,n_tent)
t_tent=IF(t_tent=NIL,1,t_tent)
com_ntx=IF(com_ntx=NIL,.t.,com_ntx)
use_ex=IF(use_ex=NIL,.f.,use_ex)
p_sempre=(n_tent=0)
n_ant=n_tent
v_r=.f.
op_sis=EVAL(qualsis,db_) // obtem subscricao do DBF no vetor Sistema
IF op_sis>0 // tem drives
drv_dbf=sistema[op_sis,O_ARQUI,O_DIR_DBF] // drive de dados
drv_ntx=sistema[op_sis,O_ARQUI,O_DIR_NTX] // drive dos indices
ELSE // nao tem drives, pega default
drv_dbf=drvdbf // drive de dados
drv_ntx=drvntx // drive dos indices
ENDI
IF "\" $ db_ // verifica se passou diretorio + arquivo
p_=RAT("\",db_)
drv_dbf=LEFT(db_,p_) // pega diretorio passado e
db_=SUBS(db_,p_+1) // o nome do arquivo
ENDI
IF EMPTY(SELECT(db_)) // o arquivo nao esta' em uso, vamos abri-lo...
db_f=drv_dbf + db_
SELE 0 // seleciona proxima area livre
#ifdef COM_REDE
msgt="OUTRO USURIO ACESSANDO|O ARQUIVO "+db_
DO WHIL n_tent>=0 .OR. p_sempre // tenta abrir o aruivo n vezes ou p/ sempre
IF use_ex // tenta abrir com exclusividade
USE (db_f) EXCLUSIVE
ELSE // tenta abrir compartilhado
USE (db_f) SHARED
ENDI
IF ! NETERR() // abriu sem problemas
v_r=.t.
EXIT
ENDI
DBOX("Tentando abrir|"+; // avisa usuario, espera n_tent
IF(p_sempre,"(NŽO","(ESC")+; // segundos para tentar novamente
" cancela)",15,,t_tent,,msgt)
n_tent-=t_tent
IF !p_sempre .AND. LASTKEY()=K_ESC // se nao for para sempre e quer
EXIT // cancelar, nao tenta abrir mais
ENDI
ENDD
CLEA TYPEAHEAD // limpa o buffer do teclado
IF ! v_r // se nao conseguiu abrir o arquivo
RETU (.f.) // retorna falso
ENDI
#else
USE (db_f) // abre o arquivo
#endi
IF com_ntx // abre arquivo com os indices
IF op_sis=0 // se o arquivo e' externo ao sistema...
v_r=AT(".",db_) // tira extensao do arquivo
n_t_x=IF(v_r>0,LEFT(db_,v_r-1),db_) // caso exista
nt_x=drv_dbf+LEFT(n_t_x,7)+"1" // verifica se existe arquivo
IF FILE(nt_x+EXTENSAO()) // se existir indice com nome xxx1.ntx,
SET INDE TO (nt_x) // vamos usa-lo
DBSETORDER(1)
ELSE // se nao procura
nt_x=drv_dbf+LEFT(n_t_x,7) // indice com
IF FILE(nt_x+EXTENSAO()) // nome xxx.ntx, usa
SET INDE TO (nt_x)
DBSETORDER(1)
ENDI
ENDI
ELSEIF LEN(sistema[op_sis,O_INDIC])>0 // senao, abre indices segundo vetor sistema
qt_ind=LEN(sistema[op_sis,O_INDIC])
ind01=sistema[op_sis,O_ARQUI,O_DIR_NTX]+sistema[op_sis,O_INDIC,1]
IF qt_ind=1
SET INDE TO (ind01)
ELSE
ind02=sistema[op_sis,O_ARQUI,O_DIR_NTX]+sistema[op_sis,O_INDIC,2]
IF qt_ind=2
SET INDE TO (ind01), (ind02)
ELSE
ind03=sistema[op_sis,O_ARQUI,O_DIR_NTX]+sistema[op_sis,O_INDIC,3]
IF qt_ind=3
SET INDE TO (ind01), (ind02), (ind03)
ELSE
ind04=sistema[op_sis,O_ARQUI,O_DIR_NTX]+sistema[op_sis,O_INDIC,4]
IF qt_ind=4
SET INDE TO (ind01), (ind02), (ind03), (ind04)
ELSE
ind05=sistema[op_sis,O_ARQUI,O_DIR_NTX]+sistema[op_sis,O_INDIC,5]
IF qt_ind=5
SET INDE TO (ind01), (ind02), (ind03), (ind04), (ind05)
ELSE
ind06=sistema[op_sis,O_ARQUI,O_DIR_NTX]+sistema[op_sis,O_INDIC,6]
IF qt_ind=6
SET INDE TO (ind01), (ind02), (ind03), (ind04), (ind05), (ind06)
ENDI
ENDI
ENDI
ENDI
ENDI
ENDI
DBSETORDER(1)
ENDI
ENDI
ELSE
SELE SELECT(db_) // arquivo ja' estava aberto
ENDI
RETU .t. // deu tudo certo...
deve-se abrir todos os indices. senao dá problema eu faço isso..
Alguem ai que esta migrando do GASPRO para Harbour usa NSX ou foi para o CDX ?