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
O que quer dizer esse erro ??
Moderador: Moderadores
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
O que quer dizer esse erro ??
Editado pela última vez por Pablo César em 23 Set 2010 17:09, em um total de 1 vez.
-
SandroBelarmino
- Usuário Nível 3

- Mensagens: 464
- Registrado em: 04 Set 2007 16:11
- Localização: Pedreira-SP
Re: O que quer dizer esse erro ??
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.
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.
Alessandro R Belarmino
Clipper 5.2e - Blinker 7 - DBFNTX / DBFCDX
"Quem trabalha muito erra muito, quem trabalha pouco erra pouco, quem não trabalha não erra e quem não erra é promovido !!!!"
Clipper 5.2e - Blinker 7 - DBFNTX / DBFCDX
"Quem trabalha muito erra muito, quem trabalha pouco erra pouco, quem não trabalha não erra e quem não erra é promovido !!!!"
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
O que quer dizer esse erro ??
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.Não sei como os colegas fazem para deletar os registros, eu peço que todos os usuários saiam do 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:Um usuário marca o registro para deletar, e reorganiza o sistema.
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.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Re: O que quer dizer esse erro ??
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 !
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 !
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: O que quer dizer esse erro ??
Josmar, você diz que o registro fica lá marcado para deleção. Talvez já esteja fazendo isso, mas use o comando , 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
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.
Código: Selecionar todos
SET DELETED ONCom 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
. Precisa nos explicar melhor. Talvez esteja querendo dizer que o registro deletado aparece no DBU ou outro aplicativo que não o seu ?Porque da maneira que eu faço, se não eu fazer isso, o registro fica la marcado e os outros registros continuam registrando !
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.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
-
Mário Isa
- Usuário Nível 4

- Mensagens: 907
- Registrado em: 07 Jul 2004 13:54
- Localização: Ilha Solteira-sp
Re: O que quer dizer esse erro ??
eu faço o pack uma vez por semana.
e utilizo set deleted on como o Alamino falou.
Mário
e utilizo set deleted on como o Alamino falou.
Mário