寻找代码示例,最好使用TADOConnection.
我想将TImage的TPicture保存到MySql(最好是ODBC,而不仅仅是MySql)数据库,之后我想创建一个TImage并将图片检索到其TPicture属性.
任何代码片段,或链接到同一个?
vcl*_*per 11
您可以使用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;
Run Code Online (Sandbox Code Playgroud)
您还可以使用数据感知的DBImage控件,并将任何图像加载到其中意味着将该图像加载到该字段中.
要检索字段数据并将其加载到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;
Run Code Online (Sandbox Code Playgroud)
警告:在这段代码中我假设Image1.Picture.Graphic不是Nil.如果您的图像控件为空,则Picture.Graphic属性为Nil,上面的代码将为您提供访问冲突.您有两种方法可以避免这种情况:
如果使用SQL命令(INSERT/UPDATE)插入或更新DB记录,则必须在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;
Run Code Online (Sandbox Code Playgroud)