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

(Resolvido) Erro ao inserir registro em banco DBF!


Gustavo_Sid

Pergunta

Ola galera.

Estou com um problema em uma aplicação..

Manipulo arquivos DBF que uso para integrar com minha aplicação, consigo limpar as tabelas com o comando delete..

Utilizo a query da paleta BDE.. então quando utilizo Append.. para fazer a inserção de registros da o seguinte erro : 'cannot modify a read-only dataset'.. já verifiquei se o arquivo está como somente leitura e não está, por um Manager de DBF consigu inclui registros..

Somente pelo delphi que da esse erro..

O que pode ser???

alguém tem outra solução ??

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Foi mal ... propriedade RequestLive = true

abraço

OK. brigadão amigo deu certo..

Mais agora tem outro problema.. a aplicação limpa essa tabela DBF e insere novos registros cada vez que é executada, e quando ela é limpa o tamanho dela não muda..

Por exemplo inseri os registros e ficou com 500Kb o arquivo DBF, quando rodo a rotina novamente fica com 1MB, se rodo novamente vai para 1,5MB, ou seja ela mantem o tamanho existente e aumenta 500Kb, mais se abrir o arquivo são sempre a mesma quantidade de registros.

Sabe como resolver isso ??

Utilizo o camando "DELETE FROM" na query para limpar..

Aguardo. Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0
a aplicação limpa essa tabela DBF e insere novos registros cada vez que é executada, e quando ela é limpa o tamanho dela não muda..

Por exemplo inseri os registros e ficou com 500Kb o arquivo DBF, quando rodo a rotina novamente fica com 1MB, se rodo novamente vai para 1,5MB, ou seja ela mantem o tamanho existente e aumenta 500Kb, mais se abrir o arquivo são sempre a mesma quantidade de registros.

quando voce trabalha com componente Query , voce está trabalhando com uma cópia da tabela

quando voce deleta os registros , eles não são deletados fisicamente, por isso o tamanho continua subindo a cada nova inserção

voce precisa trabalhar com o compomnente Table tambem, ele consegue fazer um pack na tabela, ou seja, deleta fisicamente os registros da tabela, e com isso o tamanho diminui

exemplo:

procedure tbDBDeleteAll(const DataSet: TDataSet);
begin
  with DataSet do
    while RecordCount > 0 do
      Delete;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
   query1.Active := true;
   // Deletar registros da tabela
   tbDBDeleteAll(query1);
   query1.Active := false;  // necessario fechar a query 

   // Deletar registros fisicamente da tabela
   Table1.EmptyTable;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
   // Rotina para inserir 100 registros na tabela
   query1.Active := true;
   for i := 1 to 100 do
      begin
         query1.Last;
         query1.Append;
         query1.edit;
         Query1NUM_OS.AsInteger := i;
         Query1CHECK_LIST.Value := 'INSERINDO UMA STRING';
         query1.Post;
      end;
end;

OBS: inicialmente a tabela tem 2K de registros ( ou seja vazio ) ... após a inserção a tabela passa a ter 100 registros e tamanho = 14K

se clicar novamente no botão para inserir novos registros ( + 100 registros ) a tabela passa a ter 26K

se clicar no botão para deletar, os registros não aparecem mas continua com o mesmo tamanho

o comando Table1.EmptyTable; faz um pack na tabela e ela volta a ter os 2k iniciais

abraço

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,5k
×
×
  • Criar Novo...