Gravar campo foto como null

Delphi

23/11/2007

Saudações!!!!


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

Roger1976

Curtidas 0

Respostas

Abadia

Abadia

23/11/2007

Params.ParamByName(´FOTO´).Clear

Não esqueça de ajustar o tipjo do parâmetro


GOSTEI 0
Roger1976

Roger1976

23/11/2007

abadia, implementei sua sugestão, mas não deu certo. A propósito, o tipo de parâmetro já está ajustado como ftblob. De qualquer maneira, muito obrigado, e se tiver outras sugestões, por favor poste.


GOSTEI 0
Abadia

Abadia

23/11/2007

Uma pergunta... quando tu colocas a imagem funciona?


GOSTEI 0
Roger1976

Roger1976

23/11/2007

abadia, com a imagem funciona, mas com uma troca de idéias com outras pessoas, percebi que não é necessário forçar a gravá-lo como null, pq trata-se de um campo não obrigatório (eu achava que o erro ocorria pq o campo deveria receber null). Veja como ficou:

[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
POSTAR