Página 1 de 1

O que quer dizer esse erro ??

Enviado: 23 Set 2010 15:46
por Josmar dos Santos
Error DBFCDX/610 Bad Index expression ! : cliente.cdx.
Como ocorreu tal erro ? Ocorreu quando um dos usuários foi excluir o registro. Nesse momento, outro usuário entrou no sistema no momento em que estava sendo excuido o registro, gerando esse erro. Deletei os cdxs e voltou a funcionar. O arquivo DBF que gerou esse erro foi o CLIENTES.DBF. Todos os aquivos que estavavam amarrado com esse arquivo CLIENTES gerou esse erro. Não sei como os colegas fazem para deletar os registros, eu peço que todos os usuários saiam do sistema. Um usuário marca o registro para deletar, e reorganiza o sistema. Agora ha alguma outra opção ? Como fazer para não geral tal erro ??

Josmar

Re: O que quer dizer esse erro ??

Enviado: 23 Set 2010 16:52
por SandroBelarmino
Por acaso voce está dando pack no momendo da exclusão após dar o delete no registo? Caso esteja fazendo isso, tire o pack.
Outra coisa, se voce está abrindo o arquivo compartilhado para ser usado em rede, voce tem que fazer um tratamento para travar (lock) o registro, isso vale para deletar ou alterar.
Se voce usar a busca voce vai achar vários tópicos tratando desse assunto aqui no fórum.

Sandro.

O que quer dizer esse erro ??

Enviado: 23 Set 2010 17:29
por Pablo César
Não sei como os colegas fazem para deletar os registros, eu peço que todos os usuários saiam do sistema
Isto é uma prática, incorreta. Nem sempre dá para sair ao menos que haja uma necessidade de manutenção de extrema necessidade. Não há por quê fazer isso para deletar um registro.
Um usuário marca o registro para deletar, e reorganiza o sistema.
Não há necessidade de reorganizar ao deletar registros, pois se o dbf foi aberto com todos os seus índices, não tem por quê reorganizar. Pois o RDD irá atualiza-los se eles estiverem abertos. O tratamento de RLOCK() no registro é vital para que não ocorra erros, isso faz parte de tratamento de rede:

1. Abrir em modo compartilhado. A clausula SHARED é necessário, nunca EXCLUSIVE, evite e se precisar faça com que só uma pessoa entre e impeça que outros entrem.
2. Se você adicionar um registro, voce deve verificar se o APPEND BLANK não deu erro. Você vê isso com o retorno da função NETERR()
3. Se precisar alterar um registro, você deve bloqueá-lo no momento do REPLACE. E se precisar deletar um registro você precisar travar o registro para que outros não acessem para escrita. Você faz isso em ambos casos com a função RLOCK().
4. Logo após ter gravado no DBF, bem enseguida, você deve liberar o registro com o comando UNLOCK 5. Em todas essas situações (menos item 4) você deve fazer a rotina de persistência e de inteiração com o usuário como também a de exceção e tratamento quando falha algo.

Re: O que quer dizer esse erro ??

Enviado: 25 Set 2010 14:39
por Josmar dos Santos
Pablo e Sandro, desculpa a minha ignorância, Essa é uma das coisas que mais me confundem a minha cabecinha, sempre trabalhei dessa maneira e ai a gente fica confuso. Vou colocar o meu ponto de vista, ai vocês questionam ! Vejam bem: O usuário registra um cliente novo com dados errados, Obviamente será gerado um numero seqüencial. Do jeito que eu trabalho, o deleted marca o registro na tbrowse e fica la esperando dar o pack para ser escluído. Agora eu pergunto a vocês, se não retirar esse registro errado e dar continuidade nos novos registros, esse número ficará vago, ou seja, a hora que fizer a indexação ele será excluído, mas derrepente o usuário só faz isso no final do expediente. Nesse período ele ja registrou mais uns 10, e aí ? esse número que ele registrou não tem mais como recuperar, haverá uma brecha no arquivo. Agora existe algum outro modo de ser excluir esse registro do arquivo sem precisar indexar (dar o pack) ? Eu ja via algumas coisas no fórum a respeito disso, não indexar a todo momento ! mas confesso a vocês que não entendi ! Aí fico pensando: Bom se não é para indexar a todo momento, é porque ha uma outra maneira de se excluir esse registro do arquivo sem precisar ficar indexando a todo momento. Porque da maneira que eu faço, se não eu fazer isso, o registro fica la marcado e os outros registros continuam registrando !

Abraços, Josmar

E mais uma vez, desculpa a minha ignorância, não tenho vergonha de dizer a vocês que ainda caminho na área de programação !

Re: O que quer dizer esse erro ??

Enviado: 25 Set 2010 22:00
por alaminojunior
Josmar, você diz que o registro fica lá marcado para deleção. Talvez já esteja fazendo isso, mas use o comando

Código: Selecionar todos

SET DELETED ON
, no início do programa.
Com isso, todos os registros que forem deletados [comando DELETE] já se tornam invisíveis nos browses. E também, o número de registro que porventura foi excluído, já fica disponível novamente.

Se você já utiliza o SET DELETED ON, não entendí o que quis dizer com
Porque da maneira que eu faço, se não eu fazer isso, o registro fica la marcado e os outros registros continuam registrando !
. Precisa nos explicar melhor. Talvez esteja querendo dizer que o registro deletado aparece no DBU ou outro aplicativo que não o seu ?

E de qualquer modo, o mais correto é sempre evitar a reindexação a todo momento, pois imagine o seu cliente com dez terminais trabalhando, e de repente precise que todos saiam para reindexar. Inviável. Precisa rever esta situação.

Se o número sequencial que foi gerado, ficou perdido no meio de outros porquê deletou o cliente, estude uma maneira de (se é que esta sequencia é tão importante) reaver o número perdido.

Re: O que quer dizer esse erro ??

Enviado: 29 Set 2010 20:54
por Mário Isa
eu faço o pack uma vez por semana.
e utilizo set deleted on como o Alamino falou.

Mário