Ir para conteúdo
Fórum Script Brasil
  • 0

Erro Tabela Paradox


Eder

Pergunta

Ola..

pessoal to tentando apagar os registros em uma tabela clikando num botão.... e logo em seguida em clico num outro botão para zerar o autoincremento desta tabela.......até aqui tudo bem.......

Depois quando click no botão para ver se a tabela esta zerada...ocorre o erro:

EDBENGINEERRO: SHARE VIOLATION FILE C:\TESTE\TESTE.DB

O que posso fazer para não ocorrer este erro....??

na verdade em quero excluir a tabela ....logo depois zerar o autoincremento e logo depois ver como ficou a tabela e eu gostaria de ver tudo isto acontecer apartir de uma Dbgrid.

muito Grato

:D

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
logo em seguida em clico num outro botão para zerar o autoincremento desta tabela
Como você está fazendo isto? Está mudando o tipo do campo e retornando a autoincrement?

Depois quando click no botão para ver se a tabela esta zerada...ocorre o erro:

EDBENGINEERRO: SHARE VIOLATION FILE C:\TESTE\TESTE.DB

você faz tudo utilizando o mesmo componente? Já tentou abrir a tabela via database desktop após os procedimentos?
Link para o comentário
Compartilhar em outros sites

  • 0

Ola...amigão...beleza??

Carinha eu fiz um pequeno aplicativo para limpar tabela paradox e depois zerar o autoincremento...fiz isto pois quando faço um aplicativo eu teste ele então para testar a gente acaba enchendo as tabelas..então depois de tudo testato eu uso este aplicativo para limpar a tabela e zerar o autoincremento dela..ficando novinha..pro usuario começar a trabalhar..

codigo que uso pra ver a tabela:

procedure TForm1.XiButton1Click(Sender: TObject);

begin

TABLE1.Active:=FALSE;

TABLE1.DatabaseName:=EDITBanco.TEXT;//CAMINHO DO BD

TABLE1.TableName:=EDITCaminho.TEXT;//NOME DA TABELA

TABLE1.Active:=TRUE;

end;

este para limpar a TABELA:

procedure TForm1.XiButton2Click(Sender: TObject);

begin

TABLE1.Active:=true;

TABLE1.DatabaseName:=EDITBanco.TEXT;//CAMINHO DO BD

TABLE1.TableName:=EDITCaminho.TEXT;//NOME DA TABELA

TABLE1.Active:=false;

TABLE1.CLOSE;

TABLE1.Exclusive:=False;

TABLE1.EmptyTable;

Showmessage('Tabela Zerada!!!!');

end;

Este abaixo para zerar o autoincremento:

procedure TForm1.XiButton3Click(Sender: TObject);

begin

ResetAutoInc(editbanco.text+'\'+editcaminho.text, 0 );

SHOWMESSAGE('Tabela Zerada o Autoincremento!!!');

end;

beleza..todas funcionam...mas quando eu faço o processo na ordem que esta cima....e quero fazer este mesmo processo com outra tabela ai da este erro:

EDBENGINEERRO: SHARE VIOLATION FILE C:\TESTE\TESTE.DB

Mas se eu fechar o programa e abrir novamente ele deixa eu fazer mais uma tabela...

resumindo..eu tenho sempre que fazer de uma tabela....depois fechar o prg e fazer de outra tabela...

Não sei se fui claro...

Eu só queria que este erro não acontecesse mais....eu pudesse limpar e zerar qtos quizesse.

Haaa..Micheus...tentei colocar o codigo no modo Codigo...e ele não me deixa..sempre aparece uma caixinha na tela dizendo que é pra por assim [quoto]xxxxx[/quoto] mas quando faço isto nada acontece...mas só acontece aqui na empresa ...em casa funciona..acho que é alguma configuração da minha nmáquina ..será??mas só acontece com quote e code

muito Grato..t+

Link para o comentário
Compartilhar em outros sites

  • 0

Eder, se não for secredo, o que você está fazendo na função:

ResetAutoInc(editbanco.text+'\'+editcaminho.text, 0 );
Não pode ser ela que está deixando a tabela locada?

Quando eu zerava via Database Desktop, eu apenas passava o campo para Integer e depois para Auto-incremento

Haaa..Micheus...tentei colocar o codigo no modo Codigo..
digite [ CODE ] no início do código e [ /CODE ] quando terminar - sem os espaços que deixei.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Eder, se não for secredo, o que você está fazendo na função:

R. a função é esta:

function ResetAutoInc(FileName: TFileName; Base: Longint): Boolean;
begin
 with TFileStream.Create(FILENAME, fmOpenReadWrite) do
 Result := (Seek($49, soFromBeginning) = $49) and (Write(Base, 4) = 4);
end;
 ResetAutoInc(editbanco.text+'\'+editcaminho.text, 0 );  

Não pode ser ela que está deixando a tabela locada?

Quando eu zerava via Database Desktop, eu apenas passava o campo para Integer e depois para Auto-incremento

R. Bom acho que é..pois acontece só depois que uso ela. Terias algo mais eficiente.??

digite [ CODE ] no início do código e [ /CODE ] quando terminar - sem os espaços que deixei.

R...Ok..agora deu certo como vê ....

muito Grato..amigão..t+

Link para o comentário
Compartilhar em outros sites

  • 0

function ResetAutoInc(FileName: TFileName; Base: Longint): Boolean;
begin
  with TFileStream.Create(FILENAME, fmOpenReadWrite) do
  begin
    Result := (Seek($49, soFromBeginning) = $49) and (Write(Base, 4) = 4);
    Free;
  end;
end;

Acho que faltou liberar o stream e então o arquivo será fechado. Da forma como está ele fica aberto e a área em memória alocada. Por isso que só quando você sai do programa e volta é que funciona novamente.

Este método eu também já utilizei numa rotina que, juntamente com API's da BDE, corrigiar tabelas com índices corrompidos. Por que em alguns cassos, este contador é corrompido e você não consegue mais incluir nada, pois gera key-violation (se bem me lembro). você só deve ter o cuidado de levar em conta a versão das tabelas Paradox(pro caso de mais alguém utilizar o código), pois a posição no header do arquivo muda de posição de uma versão para a outra(da 5 para a 7 com certeza).

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Amigão deu certo agora ficou bom.. :D

Você só deve ter o cuidado de levar em conta a versão das tabelas Paradox(pro caso de mais alguém utilizar o código), pois a posição no header do arquivo muda de posição de uma versão para a outra(da 5 para a 7 com certeza).

R. Beleza...eu só uso o Paradox 7..

Amigão...só uma duvida..

Eu costumo usar o Paradox AutoIncremento nas tabelas...então eu te pergunto:

Porque que quando a gente exclui um registro desses de autoincremento...a gente não consegui mais usar este registro...ou seja...se eu apagar o registro 7 nunca mais eu conseguirei usar nesta tabela o 7 ??

Perguntei uma vez num forum e me disseram que não da mais pra usa-lo..

Isto é verdade??

Grato..Valeu t+

Link para o comentário
Compartilhar em outros sites

  • 0
Porque que quando a gente exclui um registro desses de autoincremento...a gente não consegui mais usar este registro...ou seja...se eu apagar o registro 7 nunca mais eu conseguirei usar nesta tabela o 7 ??

Perguntei uma vez num forum e me disseram que não da mais pra usa-lo..

Isto é verdade??

Eder, é verdade sim. Talvez você tenha obtido o procedimento pronto e então não percebeu que o que você faz quando escreve na posição $49, no header da tabela, é justamente subescrever a "variável" que armazena o último número gerado (gravado).

Supondo que você exclua o último item, como exemplificou, bastaria que vê chamasse este seu procedimento com o número 6:

ResetAutoInc(editbanco.text+'\'+editcaminho.text, 6);

Se eu não estiver enganado, a próxima inclusão gerará o campo com o valor 7.

Este procedimento deverá sempre ser executado com a tabela vazia justamente para não ter problemas com violação da chave em que normalmente este tipo de campo faz parte.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Porque você não cria a tabela novamente?

Declare corretamente os compos no TABLE1 e logo em seguida, execute:

   
Table1.Close;
Table1.DeleteTable;
Table1.CreateTable;
[/codebox]

Acho que isso resolve seu problema.

Lembrando sempre, que se a tabela for compartilhada, todos os usuário tem que fechar essa tabela.

beleza ?

Espero ter ajudado.

Carlos A. L. Piubello

Programador

piubello arroba gmail ponto com

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...