TStream e Blob ?
Eu gostaria de copiar uma imagem de uma tabela para outra, o campo é do tipo Blob do FireBird, montei esse código mais não tive sucesso, alguém poderia me dar uma ajudinha ?
[/code]
procedure TForm1.BitBtn1Click(Sender: TObject); var A,B : TStream; Begin ClientDataSet1.Open; ClientDataSet2.Open; ClientDataSet1.First; ProgressBar1.Position := 0; ProgressBar1.Max := ClientDataSet1.RecordCount; While not ClientDataSet1.Eof do begin ClientDataSet2.Append; ClientDataSet2ID.AsInteger := ClientDataSet1ID.AsInteger; ClientDataSet2DESCRICAO.AsString := ClientDataSet1DESCRICAO.AsString; A := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName(´FOTO´), BMREAD); B := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName(´COMENTARIOS´), BMREAD); if B.Size > 0 then begin try ClientDataSet2FOTO.SaveToStream(a); ClientDataSet2COMENTARIOS.SaveToStream(B); Finally A.Destroy; b.Destroy; end; end; ClientDataSet2.Post; ProgressBar1.Position := ProgressBar1.Position +1; ClientDataSet1.Next; end; ClientDataSet2.ApplyUpdates(0); end;
[/code]
Renatacoimbra
Curtidas 0
Respostas
Cabelo
26/04/2006
Colega....
você está usando o método errado.....
use assim na linha para salvar na 2ª tabela..
clientdataset2.LOADFROMSTREAM(A);
e não clientdataset2.SaveToStream(A);
dessa forma você está carregando para a variável A o conteúdo do dataset 2
um abraço
você está usando o método errado.....
use assim na linha para salvar na 2ª tabela..
clientdataset2.LOADFROMSTREAM(A);
e não clientdataset2.SaveToStream(A);
dessa forma você está carregando para a variável A o conteúdo do dataset 2
um abraço
GOSTEI 0
Renatacoimbra
26/04/2006
Oi Cabelo, obrigada pela resposta, usando o código abaixo está dando outro erro, BitMap Image is not valid.
a imagem que tenho na tabela 1 é jpg, será se o erro é derivado disso ?
a imagem que tenho na tabela 1 é jpg, será se o erro é derivado disso ?
procedure TForm1.BitBtn1Click(Sender: TObject); var A,B : TStream; Begin ClientDataSet1.Open; ClientDataSet2.Open; ClientDataSet1.First; ProgressBar1.Position := 0; ProgressBar1.Max := ClientDataSet1.RecordCount; While not ClientDataSet1.Eof do begin ClientDataSet2.Append; ClientDataSet2ID.AsInteger := ClientDataSet1ID.AsInteger; ClientDataSet2DESCRICAO.AsString := ClientDataSet1DESCRICAO.AsString; A := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName(´FOTO´), BMREAD); B := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName(´COMENTARIOS´), BMREAD); try ClientDataSet2FOTO.LoadFromStream(a); ClientDataSet2COMENTARIOS.LoadFromStream(B); Finally A.Destroy; b.Destroy; end; ClientDataSet2.Post; ProgressBar1.Position := ProgressBar1.Position +1; ClientDataSet1.Next; end; ClientDataSet2.ApplyUpdates(0); end;
GOSTEI 0
Cabelo
26/04/2006
Qual é exatamento o campo blob que você criou para armazenar a imagem?????
GOSTEI 0
Renatacoimbra
26/04/2006
Tipo do do campo Imagem:
[list:e816073acb]
BLOB sub_type 0 segment size 80[/list:u:e816073acb][/code]
[list:e816073acb]
BLOB sub_type 0 segment size 80[/list:u:e816073acb][/code]
GOSTEI 0
Cabelo
26/04/2006
Renata...
Verifique se existe realmente uma imagem no campo que você está tentando gravar... e veja se no banco de dados o campo blob não esta setado para not null.
Debug o programa desde a primeira linha desta rotina e me fale em qual linha está dando o erro...
Verifique se existe realmente uma imagem no campo que você está tentando gravar... e veja se no banco de dados o campo blob não esta setado para not null.
Debug o programa desde a primeira linha desta rotina e me fale em qual linha está dando o erro...
GOSTEI 0
Renatacoimbra
26/04/2006
Todos os campos tem imagem sim, o campo não esta not null, o erro está acontecendo nas linhas abaixo:
ClientDataSet2FOTO.LoadFromStream(a); ClientDataSet2COMENTARIOS.LoadFromStream(B);
GOSTEI 0
Cabelo
26/04/2006
Tente gravar primeiro os dados que não forem blobs, incluisive a chave primária... depois selecione somente a chave e o campo que deseja gravar a imagem, dê um edit e inclua a rotina para gravar...
assim :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
A,B : TStream;
Begin
ClientDataSet1.Open;
ClientDataSet2.Open;
ClientDataSet1.First;
ProgressBar1.Position := 0;
ProgressBar1.Max := ClientDataSet1.RecordCount;
while not ClientDataSet1.Eof do
begin
ClientDataSet2.Append;
ClientDataSet2ID.AsInteger := ClientDataSet1ID.AsInteger;
ClientDataSet2DESCRICAO.AsString := ClientDataSet1DESCRICAO.AsString;
ClientDataSet2.ApplyUpdates(0);
ClientDataSet3.Open;
ClientDataSet3.Edit;
A := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName(´FOTO´), BMREAD);
B := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName(´COMENTARIOS´), BMREAD);
try
ClientDataSet3FOTO.LoadFromStream(a);
Finally
A.Free;
end;
clientDataSet33.ApplayUpdates;
ProgressBar1.Position := ProgressBar1.Position +1;
ClientDataSet1.Next;
end;
end;
só para testar.... se funcionar... é só implementar para os outros campos BLOB..
assim :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
A,B : TStream;
Begin
ClientDataSet1.Open;
ClientDataSet2.Open;
ClientDataSet1.First;
ProgressBar1.Position := 0;
ProgressBar1.Max := ClientDataSet1.RecordCount;
while not ClientDataSet1.Eof do
begin
ClientDataSet2.Append;
ClientDataSet2ID.AsInteger := ClientDataSet1ID.AsInteger;
ClientDataSet2DESCRICAO.AsString := ClientDataSet1DESCRICAO.AsString;
ClientDataSet2.ApplyUpdates(0);
ClientDataSet3.Open;
ClientDataSet3.Edit;
A := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName(´FOTO´), BMREAD);
B := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName(´COMENTARIOS´), BMREAD);
try
ClientDataSet3FOTO.LoadFromStream(a);
Finally
A.Free;
end;
clientDataSet33.ApplayUpdates;
ProgressBar1.Position := ProgressBar1.Position +1;
ClientDataSet1.Next;
end;
end;
só para testar.... se funcionar... é só implementar para os outros campos BLOB..
GOSTEI 0