如何将(Jpeg)图像保存到MySql并在以后检索?
寻找代码示例,最好使用TADOConnection。如何将(Jpeg)图像保存到MySql并在以后检索?
我想将TImage的TPicture保存到MySql(最好是ODBC,而不仅仅是MySql)数据库,后来我想创建一个TImage并将图片检索到它的TPicture属性。
任何代码片段或链接相同?
您可以使用BLOB字段。假设你有一个TAdoDataset的实例,并且你想编辑一个图像域。您可以使用这样的代码:
AStream := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(AStream);
AStream.Position := 0;
if ADODataSet1.Active then
begin
ADODataSet1.Edit;
TBlobField(ADODataSet1.FieldByName('MyField')).LoadFromStream(AStream);
ADODataSet1.Post;
end;
finally
AStream.Free;
end;
你也可以使用一个数据库图像控制,是数据感知,和加载任何图像转换成这意味着图像加载到该领域。
要检索的字段数据,并将其加载到一个的TImage例如,你可以有这样的代码:
var
AStream : TMemoryStream;
begin
AStream := TMemoryStream.Create;
try
if ADODataSet1.Active then
begin
TBlobField(ADODataSet1.FieldByName('MyField')).SaveToStream(AStream);
AStream.Position := 0;
Image1.Picture.Graphic.LoadFromStream(AStream);
end;
finally
AStream.Free;
end;
end;
警告:在这段代码我假定Image1.Picture.Graphic不无。如果您的图像控件为空,则Picture.Graphic属性为Nil,并且上面的代码会给您提供访问冲突。你有两个选择,以避免这种情况:
- 取而代之的是图像保存到 内存流的,它保存到本地 临时文件,然后使用Image1.Picture.LoadFromFile加载图片 。 LoadFromFile检查文件扩展名 ,并根据文件扩展名 创建一个来自 TGraphics后代类之一的适当对象。对于 示例,如果该文件是JPEG,则其 将创建TJPEGImage 类的一个实例,并将数据加载到该实例中。
- 您自己创建适当的 对象并将其分配给 Image1.Picture.Graphic。例如,如果图像为JPEG,则为 ,创建TJPEGImage的一个 实例,将其加载到其中,然后将其分配给 Image1.Picture.Graphic。
如果要插入或更新使用SQL命令(INSERT/UPDATE)数据库记录,你在你的SQL命令使用SQL参数,那么就可以将流加载到代表图像字段中的参数:
///Sample SQL Command:
INSERT INTO My_Table_Name
(MyField1, MyField2)
VALUES (:prmMyField1, :prmMyField2)
/// Sending INSERT command to DB server
var
AStream : TMemoryStream;
begin
AStream := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(AStream);
AStream.Position := 0;
// Save some random data into the first param
ADOCommand1.Parameters.ParamByName('prmMyField1').Value := 1;
// Save image stream into the second param
ADOCommand1.Parameters.ParamByName('prmMyField2').LoadFromStream(AStream);
ADOCommand1.Execute;
finally
AStream.Free;
end;
end;
也许这可以帮助你:
http://www.scalabium.com/faq/dct0065.htm - 组件保存到一个流
,之后流保存到MySql
和 http://en.allexperts.com/q/Delphi-1595/2008/7/Save-big-file-Mysql.htm
希望这就是你想要的,我明白什么你问。
最好的问候,
你存储图像本身在MySQL?为什么要这么做?在这方面做了几个基准测试,结论是这种做法不可扩展。
更好的做法是保持磁盘上的所有图像&有一张表,其中包含所有图像的链接。
在谷歌上的简单查询 - 'mysql image store'或'mysql image store benchmarks'会为您提供适当的链接。
+1你当然是对的,我会这么做的。谢谢 – Mawg 2011-01-14 02:51:49
在Delphi XE5中,ParamByName('param')。LoadFromStream需要一个附加参数ftBlob – Brendan 2013-12-09 14:28:47