a questa e simples: estou em modo compartilhado ( shared )
quando usamos o delete e le so marca o registro sem retiralo fisicamente
mas para retiralo fisicamente usamos o comando PACK
mas o comando pack so funciona em modo exclusivo
eu tenho o seguinte na deletacao
function del_reg)
] 1- fichar o registro com frlock
2- deletar o registro com - delete
3- e liberar o registro - unlock
return(nil)
-------
pergunta posso usar o pack dentro Nesta rotina
-----
ou utilizo uma outra com - copy to ou sort - mas que estas tambem vao
com o arquivo com o registro marcado
OU EXISTE OTRA MANEIRA DE MATAR FISICAMENTE O TAL REGISTRO MARCADO
delete e pack
Moderador: Moderadores
-
TerraSoftware
- Usuário Nível 3

- Mensagens: 353
- Registrado em: 28 Jul 2004 13:14
- Localização: Cianorte-PR
- Contato:
Caro colega...
Se o seu sistema fica operando 24X7 (24 horas por dia e 7 dias por semana), ai vc tem um sério problema. Como provavelmente isso naum acontece, entao ai vai uma sugestao:
Crie no seu sistema uma rotina que antes de abrir os arquivos em shared, abra eles em exclusive e use o comando pack, depois delete os index e abra os arquivos em shared e indexa novamente. Claro que isso vai fazer seu sistema ficar muito mais lento na hora de abrir. Entao faza isso apenas 1 vez por semana, ou 1 por mes, como quizer. Eu faço uma por semana, por medida de segurança, pois neste momento eu indexo a base tambem. Ah... vc talvez esteja pensando em usar a funcao dow() para retornar qual é o dia da semana (1,2,3,4,5,6 ou 7) e ai fixar um dia para fazer isso. Naum aconcelho o amigo a fazer isso, pois existe feriados e/ou talvez dia em que o cliente naum use o sistema, sei lá !!!! Eu faço o seguinte: gravo a data a ultima indexada em uma certa base de dados, e ai testo toda vez na hora de entrar:
if ultimoindex+7 >= date()
minhafuncaoindex()
endif
Estero ter ajudado !!!
Se o seu sistema fica operando 24X7 (24 horas por dia e 7 dias por semana), ai vc tem um sério problema. Como provavelmente isso naum acontece, entao ai vai uma sugestao:
Crie no seu sistema uma rotina que antes de abrir os arquivos em shared, abra eles em exclusive e use o comando pack, depois delete os index e abra os arquivos em shared e indexa novamente. Claro que isso vai fazer seu sistema ficar muito mais lento na hora de abrir. Entao faza isso apenas 1 vez por semana, ou 1 por mes, como quizer. Eu faço uma por semana, por medida de segurança, pois neste momento eu indexo a base tambem. Ah... vc talvez esteja pensando em usar a funcao dow() para retornar qual é o dia da semana (1,2,3,4,5,6 ou 7) e ai fixar um dia para fazer isso. Naum aconcelho o amigo a fazer isso, pois existe feriados e/ou talvez dia em que o cliente naum use o sistema, sei lá !!!! Eu faço o seguinte: gravo a data a ultima indexada em uma certa base de dados, e ai testo toda vez na hora de entrar:
if ultimoindex+7 >= date()
minhafuncaoindex()
endif
Estero ter ajudado !!!
Se vc esta usando o set deleted on os registros marcados como apagado não aparecem para o usuário.
Não execute o pack quando vc apaga o registro, pois cada vez ele trabalha no dbf e nos ntx/cdx.
Também não rode pack na abertura do sistema. Mais de um usuário podem estar entrando no sistema ao mesmo tempo. Um travaria o outro.
Crie um executavel para fazer o pack no arquivo e reindexar os ntx/cdx.
Esse executavel será rodado manualmente por vc ou pelo administrador do sistema. Vc pode "engatilhar" o windows para rodar esse executavel.
Eu tenho sistema que "recicla" o registro.
O registro é marcado como apagado, todos os campos são "limpos" e o campo chave é preenchido com determinado valor, que não será usado pelo usuário. Esses registros não aparecem para o usuário.
Quando vou acrescentar um resgistro, verifico se existe um registro com essa chave. Se não existir, crio um novo registro. Se existe, reativo o registro e gravo os dados nele.
Espero ter ajudado. Boa sorte.
Não execute o pack quando vc apaga o registro, pois cada vez ele trabalha no dbf e nos ntx/cdx.
Também não rode pack na abertura do sistema. Mais de um usuário podem estar entrando no sistema ao mesmo tempo. Um travaria o outro.
Crie um executavel para fazer o pack no arquivo e reindexar os ntx/cdx.
Esse executavel será rodado manualmente por vc ou pelo administrador do sistema. Vc pode "engatilhar" o windows para rodar esse executavel.
Eu tenho sistema que "recicla" o registro.
O registro é marcado como apagado, todos os campos são "limpos" e o campo chave é preenchido com determinado valor, que não será usado pelo usuário. Esses registros não aparecem para o usuário.
Quando vou acrescentar um resgistro, verifico se existe um registro com essa chave. Se não existir, crio um novo registro. Se existe, reativo o registro e gravo os dados nele.
Espero ter ajudado. Boa sorte.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
