| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
progjunior Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2005 Mensagens: 67
|
Enviada: Qui Mar 01, 2007 11:28 pm Assunto: Tabela DBase e *.mdx |
|
|
pesssoal estou com um problema com um cliente que tem um computador antigo e este dito cujo faz o banco de dados ficar corrumpido.
o problema é aquela mensagem: que aparece como o nome da tabela.
ex. table1.mdx = essa mensagem diz que essa tabela nao existe. Eu gostaria de saber como faço para resolver este problema, para que esta mensagem nao apereça mais e o banco de dados nao fique trincado e o libere novamente.
grato. |
|
| Voltar ao Topo |
|
 |
progjunior Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2005 Mensagens: 67
|
Enviada: Ter Mar 06, 2007 12:34 pm Assunto: Sobre Table.DBF *.mdx |
|
|
pessoal como faço para resolver um problema de tabela em Dbase do tipo *.mdx esse arquivo temporario que ele gera e quando dá uma problema como falta de energia ele fecha a tabela.
grato. |
|
| Voltar ao Topo |
|
 |
visitante Aprendiz

Registrado: Domingo, 10 de Janeiro de 2010 Mensagens: 261
|
Enviada: Qua Mar 07, 2007 1:05 am Assunto: |
|
|
Olá progjunior
Bom.. O .mdx do Dbase não é um arquivo temporário. Ele é gerado quando a tabela possui indices.
Caso ele se corrompa, você pode abrir a tabela e deletar o indice. Para isto é necessário apagar o Byte 28 do dbf. Este byte indica que existe um arquivo de indice relacionado a ela. Depois basta abrir a tabela e reindexar normalmente...
Deletando o byte 28 da tabela Dbase:
Procedure RemoveMDXByte(dbFile: String);
const
Value : Byte = 0;
var
F: File of Byte ;
begin
AssignFile(F, dbFile) ;
Reset(F);
Try
// posisciona no byte 28
Seek(F, 28 ) ;
//Grava o valor 0 na posição
Write(F, Value) ;
finally
CloseFile(F) ;
end ;
// Exclui o arquivo MDX que não é mais válido
DeleFile(ChangeFileExt(dbFile,'.MDX') ;
end ;
end ;
-----------------
Depois, abra normalmente o DBF e reindexe-o normalmente.
Nota
O ideal é usar tratamentos de exceções e executar a rotina acima em caso de erro no arquivo de indice. Assim, o usuário nem fica sabendo do ocorrido. Segue abaixo detalhes do erro para uso em exceções.
Dados do erro
Mensagem........: Corrupt table/index header.
Classe do erro..: EDBEngineError
Código do erro..: 8961
[]'s
Valdomiro |
|
| Voltar ao Topo |
|
 |
progjunior Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2005 Mensagens: 67
|
Enviada: Qua Mar 07, 2007 2:38 pm Assunto: Como isso acontece |
|
|
| Diga porque esse erro acontece, preciso saber, quero que nao acontece mais e como farei para que ele nao venha a se repetir. |
|
| Voltar ao Topo |
|
 |
progjunior Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2005 Mensagens: 67
|
Enviada: Qui Mar 08, 2007 2:19 pm Assunto: como uso |
|
|
| meu caro colega, como uso essa procedure. |
|
| Voltar ao Topo |
|
 |
visitante Aprendiz

Registrado: Domingo, 10 de Janeiro de 2010 Mensagens: 261
|
Enviada: Qui Mar 08, 2007 9:10 pm Assunto: |
|
|
Olá amigo...
Por que ocorre ???
Bom... Talvez pelo mesmo motivo que: Ao invés de vender sistema de aterramentos para computador, os fabricantes preferem fabricar "PINOS ADAPTADORES que iliminam a terceito pino da tomada. Ou seja, quase ninguém, no Brasil, usa um bom aterramento para seu computador..
Daí fica fácil de corromper qualquer tabela, seja lá qual for o banco de dados. Basta um surto de tensão com arco voltaico... Usar só o estabilizador não adianta...
Para usar a rotina acima, faça o seguinte
Coloque um botão no form e no evento Onclick faça:
RemoveMDXByte(nome_da_tabela);
Lembre-se: Precisa ser o nome completo com caminho e tudo, ok?
Note que vamos abrir a tabela usando o sistema operacional como se fosse um arquivo comum... Sendo assim, ela deverá estar fechada na hora de chamar a rotina...
[]'s
Valdomiro |
|
| Voltar ao Topo |
|
 |
progjunior Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2005 Mensagens: 67
|
Enviada: Qui Mar 08, 2007 11:15 pm Assunto: agradecimentos |
|
|
meu caro colega, obrigado pela diga, pois ela muito ajudou-me. Mais foi como eu já imaginava que era problema de tesao.
grato! |
|
| Voltar ao Topo |
|
 |
progjunior Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2005 Mensagens: 67
|
Enviada: Sex Mar 09, 2007 11:30 am Assunto: sobre *.mdx |
|
|
caro colega, como faço para exibir todas as tabelas que estao dentro de um determinado banco de dados.
por ex:
Alias:DBdemos.
para mostrar todas as tabelas que estao dentro deste alias.
e em seguida deletar o byte 28 de qualquer uma delas, sendo que eu possa escolher qualquer uma e em seguinda fazer tal rotina.
Todas elas irao aparecer e em seguida eu quero apagar o byte 28 de qualquer uma.
nao sei se fui claro, mais estou esperando resposta. |
|
| Voltar ao Topo |
|
 |
progjunior Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2005 Mensagens: 67
|
Enviada: Sáb Mar 10, 2007 9:01 am Assunto: resposta valdomiro |
|
|
meu caro colega estou aguardando sua resposta.
ok! |
|
| Voltar ao Topo |
|
 |
|