Fórum Gravar campo foto como null #349524
23/11/2007
0
Estou com uma grande dúvida em relação ao campo foto: supondo que este não seja um campo obrigatório, como fazer com que receba um valor null???
Pesquisei muito sobre isso, mas infelizmente não achei nada a respeito. Isso realmente é possível???
Ah, estou usando Delphi 2006 + Firebird + DBExpress + TImage.
[b:1d4ec71d4c]Códigos utilizados:[/b:1d4ec71d4c]
[b:1d4ec71d4c]- Na gravação:[/b:1d4ec71d4c]
procedure Tform1.GravaRegistro;
var
img : TMemoryStream;
begin
if flag = ´I´ then
begin
with ClientDataSet1 do
begin
close;
Params.ParamByName(´NOME´).AsString := edtNome.Text;
if Image1.Picture <> nil then
begin
img := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(img);
Params.ParamByName(´FOTO´).LoadFromStream(img, ftBlob);
finally
img.Free;
end;
end
else
[i:1d4ec71d4c] [b:1d4ec71d4c] //Params.ParamByName(´FOTO´).AsBlob := null;[/b:1d4ec71d4c][/i:1d4ec71d4c]
[b:1d4ec71d4c] eu tentei colocar esta linha, mas dá erro de access violation....[/b:1d4ec71d4c]
execute;
end;
end;
end;
[b:1d4ec71d4c]- Na visualização[/b:1d4ec71d4c]
procedure Tform1.DataSource1DataChange(Sender: TObject; Field: TField);
var
mem : TMemoryStream;
jpg : TJPEGImage;
begin
if not DataSource1.DataSet.IsEmpty then
begin
edtCodigo.Text := inttostr(ClientDataSet2.FieldByName(´ID_CONVIDADO´).AsInteger);
edtNome.Text := ClientDataSet2.FieldByName(´NOME´).AsString;
jpg := TJPEGImage.Create;
mem := TMemoryStream.Create;
try
ClientDataSet2FOTO.SaveToStream(mem);
mem.Position := 0;
jpg.LoadFromStream(mem);
Image1.Picture.Assign(jpg);
finally
jpg.Free;
mem.Free;
end;
end;
end;
Desde já agradeço pela atenção.
[]´s
Rogério
[/b]
Roger1976
Curtir tópico
+ 0Posts
23/11/2007
Abadia
Não esqueça de ajustar o tipjo do parâmetro
Gostei + 0
23/11/2007
Roger1976
Gostei + 0
23/11/2007
Abadia
Gostei + 0
24/11/2007
Roger1976
[b:a565740ff2]procedure Tform1.GravaRegistro;[/b:a565740ff2]
var
mem : TMemoryStream;
begin
if flag = ´I´ then
begin
with ClientDataSet1 do
begin
close;
Params.ParamByName(´NOME´).AsString := edtNome.Text;
mem := TMemoryStream.Create;
if Image1.Picture.Graphic <> nil then
begin
try
Image1.Picture.Graphic.SaveToStream(mem);
Params.ParamByName(´FOTO´).LoadFromStream(mem, ftBlob);
finally
freeandnil(mem);
end;
end;
execute;
end;
end;
[b:a565740ff2]end;[/b:a565740ff2]
Eu havia cometido pequenos equívocos:
1) Eu estava criando o objeto mem depois da condição (acho que o correto era criar antes)
2)[b:a565740ff2] if Image1.Picture <> nil then[/b:a565740ff2] ao invés de i[b:a565740ff2]f Image1.Picture.Graphic <> nil then[/b:a565740ff2]
Agora, está funcionando.
Kra, muito obrigado pela força, caso tenha sugestões melhores, fique a vontade.
Um bom fim-de-semana
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)