在我的项目中,我使用 mysql.pas 来处理 MySql 数据库,所以我有这个表结构:
Table Name :CarsTbl
ID int 10
CarName varchar 100
Car_Img longblob 0
我使用这张表来保存每辆汽车的名称和图片。保存程序运行良好。
但问题是当我使用以下程序获取 Car_Img 时:
procedure GetCarImage(const MyCarName:String;TrgStream:TMemoryStream);
var
query_string: String;
rCount: Integer;
mySQL_Res: PMYSQL_RES;
LibH: PMYSQL;
Row: PMYSQL_ROW;
iLen:PMYSQL_LENGTHS;
begin
mySQL_Res := nil;
Try
Try
query_string := 'SELECT CarName,Car_Img FROM CarsTbl WHERE CarName="'+MyCarName+'"';
mysql_real_query(LibH, PAnsiChar(query_string), Length(query_string));
mySQL_Res := mysql_store_result(LibH);
Try
rCount := mysql_num_rows(mySQL_Res);
If rCount > 0 Then Begin
Repeat
Row := mysql_fetch_row(mySQL_Res);
iLen:= mysql_fetch_lengths(mySQL_Res);
If Row <> nil Then Begin
TrgStream.position :=0;
//Row^[1] ==== Car_Img Blob Field
TrgStream.WriteBuffer(Row^[1],iLen[1]);
End;
Until Row = nil;
end;
Finally
mysql_free_result(mySQL_Res);
mySQL_Res := nil;
Row := nil;
End;
Finally
mysql_close(LibH);
End;
Finally
LibH := nil;
End;
end;
我得到汽车图像,但文件格式错误,标题让我解释一下:Audi_Car 图像保存为 Png 图像,但是当我加载它的图像时,我总是这样得到:
那么请问如何纠正呢?我的 Sql 查询中是否有任何错误?
PS:我在另一个地方创建了 TrgStream。
这是我的 LoadCarImage 程序:
Procedure LoadCarImage();
var
CarStrm:TMemoryStream;
begin
CarStrm:=TMemoryStream.Create;
Try
GetCarImage('Audi',CarStrm);
CarStrm.SaveToFile('audi.png');
finally
CarStrm.Free;
end;
end;
非常感谢