私のプロジェクトでは、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;
私は車の画像を取得しますが、Malformed file Header を使用して説明させてください: 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;
どうもありがとう