Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 将JPEG保存到数据库_Delphi - Fatal编程技术网

Delphi 将JPEG保存到数据库

Delphi 将JPEG保存到数据库,delphi,Delphi,此代码在TBlobField行提供访问冲突: procedure TfrmCapture.Button3Click(Sender: TObject); var j: TJPEGImage; S: TFileStream; begin J := TJPEGImage.Create; try J.Assign(Image1.Picture.Graphic); J.CompressionQuality := 80; J.Compress; J.SaveT

此代码在TBlobField行提供访问冲突:

procedure TfrmCapture.Button3Click(Sender: TObject);
var
  j: TJPEGImage;
  S: TFileStream;
begin
  J := TJPEGImage.Create;
  try
    J.Assign(Image1.Picture.Graphic);
    J.CompressionQuality := 80;
    J.Compress;
    J.SaveToStream(S);
    S.Position := 0;
    TBlobField(frmSignout.tblImg.FieldByName('Picture')).LoadFromStream(S);
  finally
    J.Free;
  end;
  Image1.Picture := nil;
  Close;
end;
基本上,我正在尝试将图像转换成JPEG格式,然后将其保存到图像字段MSSQL express
有什么办法解决吗?

伙计,我只是累了……当然不是文件流,而是内存流……天啊

这是在MSSQL express ~50kb/图像中将图像另存为JPEG的正确代码:

procedure TfrmCapture.Button3Click(Sender: TObject);
var
j:TJPEGImage;
S : TMemorystream;
begin
J := TJPEGImage.Create;
S := Tmemorystream.Create;
try
J.Assign(image1.Picture.graphic);
J.CompressionQuality :=80;
J.Compress;
J.SaveToStream(S);
S.Position :=0;
(frmSignout.tblImg.FieldByName('Picture') as TblobField).LoadFromStream(S);
finally
J.Free;
S.Free;
end;
image1.Picture :=nil;
close;
end;

您没有实例化保存到以下位置的TFileStream:

procedure TfrmCapture.Button3Click(Sender: TObject);
var
 J: TJPEGImage;
 S: TFileStream;
begin
  J := TJPEGImage.Create;
  try
    J.Assign(Image1.Picture.Graphic);
    J.CompressionQuality := 80;
    J.Compress;
    S := TFileStream.Create('c:\path to\somefile.jpg', fmCreate); // <-- add this!
    try
      J.SaveToStream(S);
      S.Position := 0;
      TBlobField(frmSignout.tblImg.FieldByName('Picture')).LoadFromStream(S);
    finally
      S.Free; // <-- add this
    end;
  finally
    J.Free;
  end;
  Image1.Picture := nil;
  Close;
end;

刚刚意识到流可能是空的,然后它抛出了访问冲突…这是可能的吗?我可以将流分配给Image2,它显示时没有问题。是否听说过TFileStream。Create e.g.S:=TFileStream。Create'c:\test.dat',fmOpenReadWrite;您是如何在丢失缩进的同时突出显示此代码块的?o_0Man我有什么问题?应该是MemoryStream而不是FileStream。我浪费了一个小时试图弄清楚。@Sardukar:你应该把这个问题作为原始问题的编辑发布,而不是作为单独的答案发布。o我明白了。我想我应该出于教育目的保留这个错误。是的,谢谢。
procedure TfrmCapture.Button3Click(Sender: TObject);
var
 J: TJPEGImage;
 S: TStream;
begin
  J := TJPEGImage.Create;
  try
    J.Assign(Image1.Picture.Graphic);
    J.CompressionQuality := 80;
    J.Compress;
    S := frmSignout.tlbImg.CreateBlobStream(frmSignout.tblImg.FieldByName('Picture'), bmWrite); 
    try
      J.SaveToStream(S);
    finally
      S.Free;
    end;
  finally
    J.Free;
  end;
  Image1.Picture := nil;
  Close;
end;