Página 2 de 3
Enviado: 09 Jan 2008 12:40
por Maligno
Pablo César escreveu:Mas absolutamente que não, não foi isso que eu disse.
O que você disse foi:
não creio que ampliando o tamanho do atual zapado com simplesmente mudar o ponteiro.
Entendo nessa frase que você está confundindo os termos, dando a entender que há um ponteiro envolvido na operação de chSize(). Não há. Naquele programa exemplo usa-se o reposicionamento do ponteiro do arquivo para a obtenção de alguns bytes. Mas pára por aí.
justamente para "ampliar" o tamanho do arquivo ZAPado, teria que disposicionar o ponteiro também. Não achas que é assim ?. Me refiro nesse exemplo que postei (em VFP).
Sim, sei que é nesse exemplo que se baseia, mas realmente a função fchSize() nada tem a ver com ponteiro. Acho que você está confundindo os termos. Ela não move o ponteiro pra lugar algum. Apenas ajusta o tamanho do arquivo.
Enviado: 09 Jan 2008 12:59
por Pablo César
Maligno escreveu:não creio que ampliando o tamanho do atual zapado com simplesmente mudar o ponteiro.
Entendo nessa frase que você está confundindo os termos, dando a entender que há um ponteiro envolvido na operação de chSize().
Ahh disponibilizando a minhas palavras dessa forma que você está fazendo, até eu acreditaria que o chSize() faria todo esse MILAGRE... a frase COMPLETA minha ja esclarece que ao que eu estou me referido é ao procedimento e não tão somente ao chSize. Maligno, veja a minha frase toda, não utilize SUBSTRINGS na minha frase para dar o sentido que vcê deu:
"Na verdade, não boto muita fé
nesse código, não creio que ampliando o tamanho do atual zapado com simplesmente mudar o ponteiro... será ?"
Mas tudo bem, qualquer conselho que me é dado aceitarei convenientemente mas não posso admitir uma coisa que eu não disse. Agora que aquele código, posiciona o ponteiro antes de usar o chSize(), isso é necessário (acredito eu) para fazer uso do chSize(). Também não sei se o termo que utilizei de "ponteiro" serviria para fazer uso do posicionamento do arquivo no disco rígido e depois extender o seu fim de arquivo no cluster originariamente. Pelo menos é isso que eu entendí do código.
No entanto reconheço que eu não tenho muita intimidade com funções em baixo nível como você o tem maligno. Se quiseres comentar a respeito, esteja a vontade.
Enviado: 09 Jan 2008 15:27
por Maligno
Pablo César escreveu:Ahh disponibilizando a minhas palavras dessa forma que você está fazendo, até eu acreditaria que o chSize() faria todo esse MILAGRE...
Mas faz. Esta função, eu já havia dito, é o coração do procedimento.
não posso admitir uma coisa que eu não disse.
Ok. Não vamos mais perder tempo com isso.

))
Agora que aquele código, posiciona o ponteiro antes de usar o chSize(), isso é necessário (acredito eu) para fazer uso do chSize().
Sim. O ponteiro é reposicionado para obter os dados para calcular a que tamanho X irá o arquivo. Esse X alimenta chSize().
No entanto reconheço que eu não tenho muita intimidade com funções em baixo nível como você o tem maligno. Se quiseres comentar a respeito, esteja a vontade.
Essa função chSize() não é muito utilizada em lugar algum. Não tem respaldo em C por não ser ANSI. O procedimento em si, conforme discutimos, nem é tão útil assim. E pra finalizar: duvido que essa piçiroca funcione.

))
Enviado: 10 Jan 2008 15:10
por Eolo
Lapinha, vc está acompanhando a discussão? Cara, foi o que eu disse antes: esquece. DELETEou ou ZAPeou? Já era...
Há algumas empresas em ... ou ... ou ... (todas na Europa e adjacências) que vasculham o seu HD e acham o que até Deus duvida, mas isso vai lhe custar dinheiro, MUITO dinheiro. E elas não prometem 100% de retorno... Quanto vc tem pra gastar nisso? Vale a pena gastar uma bolada pra recuperar só parte das informações? Quanto valem essas informações?
Enviado: 10 Jan 2008 15:30
por Pablo César
Eolo, é bom ser prático. Mas talvez a pergunta foi originada por mera curiosidade... ja pensou se esse código fizer esse milagre que diz fazer ? Por falar disso, você tem VFP ?
Enviado: 10 Jan 2008 18:05
por Maligno
O esforço em realizar o que parece "perdido" normalmente é proporcional ao valor da perda. Só o OP pra dizer.
Enviado: 16 Abr 2008 11:22
por rrfsistemas
Ja conseguiram testar ??
Eu estava fora do forum ha algum tempo por isso não vi a msg.
Enviado: 16 Abr 2008 11:28
por Pablo César
Pois é Renato, faz tempo que não te vejo por estas bandas...
Pelo que eu sei, ninguém se disponibilizou para compilar esse exemplo em VFP, talvez o colega queira fazer alguns testes e ver se isso funciona mesmo.
Enviado: 16 Abr 2008 11:35
por rrfsistemas
Se vcs me derem as coordenadas eu posso tentar ajudar...
Enviado: 16 Abr 2008 12:26
por Pablo César
O código fonte está aqui
https://pctoledo.org/forum/viewto ... 9219#39219 só não sabemos se vai funcionar.
Enviado: 16 Abr 2008 14:51
por gvc
Recuperar o arquivo Zappeando não é uma coisa tão simples.
O DBase apaga os registro e reajusta o tamanho do arquivo DBF automaticamente.
O Clipper não faz isso.
Só que o header (é assim?) de arquivo controla tb a quantidade de registros contido nele.
Vale lembrar que existe um caracter de final de arquivo no final do último registro do arquivo em questão.
Como existe uma série de fatores contra o sucesso, acho dificil conseguir.
Se é por pesquisa, até vale a pena, mas por trabalho acho complicado (custo / benefício)
- Pegue toda a descrição do header de arquivo DBF.
- Verifique todos os valores do header do seu DBF.
- Determine o fim do header e início dos dados.
- Determine o local atual do caracter de fim de arquivo e mude-o conforme a regra de DBF. Acho que é colocar esse byte para chr(32). Lembrando que o tamanho do registro é o tamanho de todos os campos + 1 byte de controle. Esse byte no final do registro é o que deve ser mudado.
- Determine o último registro.
- Mude o caracter de fim de arquivo para o byte de controle desse último registro.
- Acerte, no header, a quantidade de registros do seu dbf.
(lembrando que isso tudo é teoria. Felizmente não tive que colocar em prática.)
Espero ter ajudado. Boa sorte.
Enviado: 16 Abr 2008 16:57
por Pablo César
Pois é GVC até esse ponto nós chegamos a essa mesma conclusão, agora se funciona ou não, acho que só compilando para ver se dá certo. Ahh e tem uma situação certa, que acredito que só será capaz de UNZAPear caso fosse esta uma das ultimas gravações em disco que foram feitas. Pois se algo foi gravado nessa parte que foi liberada, então bau bau (acho eu).
Mas esperemos talvez o Renato (rrfsistemas ) compile para nós e nos dê um resultado.
Enviado: 16 Abr 2008 18:26
por Netavin
Amigões !! boa tarde !
... bem, sou iniciante em VFP e testei a rotina da seguinte forma:
peguei um DBF e zapei geral; usei o unzup e "recuperei" 47 registros. Recuperei vírgula!!! os campos apareceram todos zerados ou seja, os campos numéricos apareceram com "zeros", os campos data "vazios" e os campos texto "em branco", sem nada.
se precisar mais alguma ajuda ...
[]´s
Netavin
Enviado: 17 Abr 2008 08:40
por Pablo César
Netavin escreveu:"recuperei" 47 registros.
Bom dia colega, esses 47 registros foram o número exato que possuia o DBF ?. Outra pergunta: esse UNZAP você fez logo após que você fez o ZAP ?. Ou você fez alguma gravação no seu HD posterior ao ZAP ?
Enviado: 17 Abr 2008 09:00
por Netavin
bom dia!
... ZAPeei, fiz uma cópia dele no "C:\", abri o VFP e executei o UNZUP.
Havia muito mais registros do que os 47 que tentei recuperar. Uns 9.000 registros mais ou menos.
[]´s
Netavin