Página 1 de 1
delete e pack
Enviado: 16 Jan 2007 16:54
por tonyx
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
Enviado: 16 Jan 2007 18:40
por TerraSoftware
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 !!!
Enviado: 17 Jan 2007 10:12
por gvc
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.