Olá Pessoal!
Estou com um problema de índice que desatualiza. O sistema é em CL53 e Blinker 7 com rdd DBFCDX. A rede é novel, com vários terminais sem hd e outros com windows. Sempre funcionou bem, mas de uns tempos para cá as pesquisas (seek) simplesmente não encontram os dados. Olho diretamente no arquivo DBF e os dados estão lá sem estarem deletados, tudo ok. Apago o índice e gero novamente e pronto, volta a funcionar corretamente.
Para todos os dbfs utilizo uma função assim:
**********
FUNCTION A_PEDIDOS( ABRE, Modo, Indexa )
IF ABRE == "ABRE"
IF !FILE("PEDIDOS.DBF")
DBCREATE ( "PEDIDOS.DBF",;
{ { "CODIFUNC", "N", 3, 0 }, { "CODICART", "N", 3, 0 },;
{ "CODITRAN", "N", 3, 0 }, { "DATAPERE", "D", 8, 0 },;
{ "NUMEPERE", "N", 6, 0 }, { "ANOPERE" , "N", 2, 0 },;
{ "NUMEPEDI", "N", 6, 0 }, { "ANOPEDID", "N", 2, 0 },;
{ "DATAPEDI", "D", 8, 0 }, { "TOTAPEDI", "N", 13, 2 },;
{ "BASECALC", "N", 13, 2 }, { "CODIMERC", "N", 5, 0 },;
{ "CODITAMA", "N", 2, 0 }, { "UNIDTAMA", "N", 7, 3 },;
{ "QUANTIDA", "N", 10, 2 }, { "VALORUNI", "N", 10, 2 },;
{ "CONDPAGT", "C", 47, 0 }, { "DATAPROD", "D", 8, 0 },;
{ "VALOFRET", "N", 10, 2 }, { "VALODESC", "N", 10, 2 },;
{ "VALODESP", "N", 10, 2 }, { "ALIQFRET", "N", 6, 2 },;
{ "TIPOFRET", "C", 1, 0 }, { "PERCOMIS", "N", 6, 2 },;
{ "COMISSAO", "N", 10, 2 }, { "PERPREMI", "N", 6, 2 },;
{ "PREMIO" , "N", 10, 2 }, { "PESOBRUT", "N", 10, 2 },;
{ "PESOLIQU", "N", 10, 2 }, { "PEDIAPRO", "C", 1, 0 },;
{ "NUMEDOCT", "N", 7, 0 }, { "TIPODOCT", "C", 2, 0 },;
{ "OPERACAO", "C", 2, 0 }, { "VALORTOT", "N", 10, 2 },;
{ "DATAENSA", "D", 8, 0 }, { "ALIQUIPI", "N", 6, 2 },;
{ "VALORIPI", "N", 10, 2 }, { "ALIQICMS", "N", 6, 2 },;
{ "VALOICMS", "N", 10, 2 }, { "NOMEFANT", "C", 10, 0 },;
{ "MOTIVOCA", "C", 30, 0 }, { "QTDPEDI" , "N", 3, 0 },;
{ "CONT" , "N", 2, 0 }, { "DESMERPE", "N", 6, 2 },;
{ "CODIREDE", "N", 3, 0 }, { "SERIENF" , "C", 1, 0 },;
{ "CODICLFO", "N", 6, 0 }, { "NUMECARR", "N", 6, 0 },;
{ "SERICARR", "C", 2, 0 } } )
ENDIF
IF !FILE("PEDIDOS.CDX")
INDEXA := "S"
MODO := "E"
ENDIF
IF MODO == NIL .OR. MODO == "S"
OPENARQ("PEDIDOS","S") // USE PEDIDOS ALIAS A_PEDIDOS SHARED NEW - verifica se abriu corretamente
ELSEIF MODO == "E"
OPENARQ("PEDIDOS","E") // USE PEDIDOS ALIAS A_PEDIDOS EXCLUSIVE NEW - idem
ENDIF
IF INDEXA <> NIL .AND. MODO == "E"
PACK
INDEX ON STR(ANOPEDID,2)+STR(NUMEPEDI,6) TAG 01 TO PEDIDOS.CDX
INDEX ON DTOS(DATAPEDI)+STR(CODIMERC,5)+STR(CODITAMA,2) TAG 02 TO PEDIDOS.CDX
INDEX ON PEDIAPRO+STR(ANOPEDID,2)+STR(NUMEPEDI,6) TAG 03 TO PEDIDOS.CDX
INDEX ON STR(CODIMERC,5)+NOMEFANT+DTOS(DATAENSA)+STR(NUMEDOCT,6)+SERIENF TAG 04 TO PEDIDOS.CDX
INDEX ON DTOS(DATAPEDI)+STR(ANOPEDID,2)+STR(NUMEPEDI,6) TAG 05 TO PEDIDOS.CDX
INDEX ON STR(CODIMERC,5)+DTOS(DATAPEDI)+STR(CODITAMA,2) TAG 06 TO PEDIDOS.CDX
INDEX ON STR(NUMEDOCT,6)+DTOS(DATAENSA)+NOMEFANT TAG 07 TO PEDIDOS.CDX
INDEX ON STR(CODICLFO,6)+STR(ANOPEDID,2)+STR(NUMEPEDI,6) TAG 08 TO PEDIDOS.CDX
INDEX ON NOMEFANT+DTOS(DATAENSA)+STR(NUMEDOCT,6) TAG 09 TO PEDIDOS.CDX
INDEX ON DTOS(DATAENSA)+STR(NUMEDOCT,6) TAG 10 TO PEDIDOS.CDX
INDEX ON DTOS(DATAPROD)+STR(ANOPEDID,2)+STR(NUMEPEDI,6) TAG 11 TO PEDIDOS.CDX
INDEX ON STR(CODIFUNC,3)+STR(CODIMERC,5)+DTOS(DATAENSA) TAG 12 TO PEDIDOS.CDX
INDEX ON STR(NUMEPERE,6)+STR(ANOPERE,2)+STR(CODIMERC,5) TAG 13 TO PEDIDOS.CDX
INDEX ON STR(NUMECARR,6)+SERICARR+STR(ANOPEDID,2)+STR(NUMEPEDI,6) TAG 14 TO PEDIDOS.CDX
INDEX ON STR(ANOPEDID,2)+STR(NUMEPEDI,6)+STR(CODIMERC,5) TAG 15 TO PEDIDOS.CDX
ENDIF
SET INDEX TO PEDIDOS.CDX
ELSE
SELECT A_PEDIDOS
USE
ENDIF
RETURN NIL
**********
A funcao acima é a que mais desatualiza pois o arquivo PEDIDOS é o utilizado por mais usuarios ao mesmo tempo.
Obrigado,
Alexandre Costa
Indice CDX desatualizando
Moderador: Moderadores
- Alexandre Costa
- Usuário Nível 1

- Mensagens: 25
- Registrado em: 27 Dez 2005 10:49
- Localização: Cambé - PR
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
olá meu caro, já passei por algo semelhante.
Procure usar funções em vez de comandos.
EX.:
Ao invés de Set Index to pedidos.cdx / alias, não use a extensão .cdx, use apenas o nome do arquivo.
Use DbSetIndex("pedidos")
Nas funções de troca de indice
Ao invés de Set Order to , use OrdSetFocus("01") / o nome da tag entre parenteses
Com essas mudanças que fiz em meu sistema tudo ficou chique !
Tente aí também, se já não estiver fazendo.
:|<
Procure usar funções em vez de comandos.
EX.:
Ao invés de Set Index to pedidos.cdx / alias, não use a extensão .cdx, use apenas o nome do arquivo.
Use DbSetIndex("pedidos")
Nas funções de troca de indice
Ao invés de Set Order to , use OrdSetFocus("01") / o nome da tag entre parenteses
Com essas mudanças que fiz em meu sistema tudo ficou chique !
Tente aí também, se já não estiver fazendo.
:|<
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
-
casesistemas
- Usuário Nível 1

- Mensagens: 32
- Registrado em: 04 Ago 2004 16:50
- Localização: Campinas/SP
- Contato: