Jump to content
Fórum Script Brasil
  • 0

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


Question

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;

 

Edited by LockSpy
Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      149403
    • Total Posts
      645891
×
×
  • Create New...