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

(Resolvido)(Delphi) Erro de 'Insufficient memory for this operation.'


LockSpy

Pergunta

Olá pessoal,

Eu estou estudando o TBlobField com ClientDataSet, peguei um modelo da internet e eu estou tentando carregar um arquivo grande de em torno 35mb várias vezes, porém conforme eu vou dando o loop depois de carregar algumas vezes o ClientDataSet da erro de 'Insufficient memory for this operation.', eu já consegui verificar que é porque o arquivo é muito grande e provavelmente chega no limite do ClientDataSet. Mas gostaria de saber como posso contornar essas situações em vez de simplesmente trocar um arquivo por um pequeno, porque em cliente nem sempre vão ser arquivos pequenos.

Existe alguma forma que eu possa fazer com que verifique o limite e pare o loop e emita uma mensagem?

Ou melhor ainda existe alguma forma de carregar todos os arquivos e não dar erro de memória? De repente compactar o arquivo antes?

Qual seria a melhor solução para esse caso? Poderiam me ajudar com alguma solução?

procedure TEstudo.btnTesteClick(Sender: TObject);
var
  cdsTemp: TClientDataset;
  i: Integer;
begin
  cdsTemp:= TClientDataset.Create(nil);
  cdsTemp.FieldDefs.Add('arq', ftBlob);
  cdsTemp.CreateDataSet;
  try
    for i := 0 to 100 do
    begin
      cdsTemp.Append;
      TBlobField(cdsTemp.FieldByName('arq')).LoadFromFile(String(C:\PROJBLOB\arquivopdf.pdf)); 
      cdsTemp.Post;
    end;
  finally
    FreeAndNil(cdsTemp);
  end;
end;

 

Editado por LockSpy
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

cdsTemp.FieldDefs.Add('arq', ftBlob);

Voce não relatou qual é o banco de dados que voce esta usando.

Se for o MYSQL:

Um grande objeto binário que pode conter uma quantidade variável de dados binários. A classificação e comparação dos valores para esses objetos são realizadas de maneira sensível a maiúsculas e minúsculas.

TINYBLOB

Uma coluna de objeto binário grande com comprimento máximo de 255 (2 ^ 8 - 1) caracteres.

BLOB

Uma coluna de objeto binário grande com comprimento máximo de 65535 (2 ^ 16 - 1) caracteres.

MEDIUMBLOB

Uma coluna de objeto binário grande com comprimento máximo de 16777215 (2 ^ 24 - 1) caracteres.

LONGBLOB

Uma coluna de objeto binário grande com comprimento máximo de 4294967295 (2 ^ 32 - 1) caracteres.

Obs: Voce está tentando salvar imagens  do banco de dados ?

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

É um ClientDataSet virtual,

Eu só estou carregando o mesmo PDF várias vezes no TBlobField do ClientDataSet

for i := 0 to 100 do
    begin
      cdsTemp.Append;
      TBlobField(cdsTemp.FieldByName('arq')).LoadFromFile(String(C:\PROJBLOB\arquivopdf.pdf)); 
      cdsTemp.Post;
    end;

e depois percorro o ClientDataSet e salvo o pdf novamente dentro de uma pasta igual o numero de vezes que existe no dentro do ClientDataSet

Link para o comentário
Compartilhar em outros sites

  • 0

É um ClientDataSet virtual

O limite é seu espaço em disco ou o máximo de memoria do computador

ClientDataSet da erro de 'Insufficient memory for this operation

Quando no CDS é atingido o limite esse erro ocorre

OBS:  voce pode usar o componente ZipMaster para o delphi e compactar os arquivos

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Eu pensei nessa questão de compactar, mas mesmo compactando ainda fica com um valor muito grande para a operação.

A forma que eu resolvi foi armazenar uma quantidade pequena e ir salvando quantidade que armazenei e depois eu limpo o ClientDataSet, e repito isso até salvar todos os arquivos.

Mas obrigado Jhonas!

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...