ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Tabela DBase e *.mdx

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
progjunior
Novato
Novato


Registrado: Quarta-Feira, 21 de Dezembro de 2005
Mensagens: 67

MensagemEnviada: Qui Mar 01, 2007 11:28 pm    Assunto: Tabela DBase e *.mdx Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
progjunior
Novato
Novato


Registrado: Quarta-Feira, 21 de Dezembro de 2005
Mensagens: 67

MensagemEnviada: Ter Mar 06, 2007 12:34 pm    Assunto: Sobre Table.DBF *.mdx Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
visitante
Aprendiz
Aprendiz


Registrado: Domingo, 10 de Janeiro de 2010
Mensagens: 261

MensagemEnviada: Qua Mar 07, 2007 1:05 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
progjunior
Novato
Novato


Registrado: Quarta-Feira, 21 de Dezembro de 2005
Mensagens: 67

MensagemEnviada: Qua Mar 07, 2007 2:38 pm    Assunto: Como isso acontece Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
progjunior
Novato
Novato


Registrado: Quarta-Feira, 21 de Dezembro de 2005
Mensagens: 67

MensagemEnviada: Qui Mar 08, 2007 2:19 pm    Assunto: como uso Responder com Citação

meu caro colega, como uso essa procedure.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
visitante
Aprendiz
Aprendiz


Registrado: Domingo, 10 de Janeiro de 2010
Mensagens: 261

MensagemEnviada: Qui Mar 08, 2007 9:10 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
progjunior
Novato
Novato


Registrado: Quarta-Feira, 21 de Dezembro de 2005
Mensagens: 67

MensagemEnviada: Qui Mar 08, 2007 11:15 pm    Assunto: agradecimentos Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
progjunior
Novato
Novato


Registrado: Quarta-Feira, 21 de Dezembro de 2005
Mensagens: 67

MensagemEnviada: Sex Mar 09, 2007 11:30 am    Assunto: sobre *.mdx Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
progjunior
Novato
Novato


Registrado: Quarta-Feira, 21 de Dezembro de 2005
Mensagens: 67

MensagemEnviada: Sáb Mar 10, 2007 9:01 am    Assunto: resposta valdomiro Responder com Citação

meu caro colega estou aguardando sua resposta.

ok!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB