Delphi 2006で開発された古いアプリケーションがあり、でいくつかの変更を加える必要があります。
このアプリでは、MsSQLの「画像」フィールドから画像を読み込んでいますが、delphi 2010でコンパイルすると、「発生した例外クラスEJPEGとメッセージ「JPEGエラー#51」」というエラーが表示されます。
データベースから画像を取得するコード:
aStream := TMemoryStream.Create;
Try
If LoadFromBlob(FieldByName('Picture'), aStream) then
begin
Pic:=TJpegImage.Create;
try
Try
Pic.LoadFromStream(aStream);
Picture.Assign(Pic); // <------ JPEG Error #51 here w D2010
Except
//something went wrong loading
HandleImageError();
End;
finally
Pic.Free;
end;
end;
Finally
aStream.Free;
End;
// ............
function LoadFromBlob(const AField: TField; const Stream: TStream): boolean;
var
ResultStr: string;
PResultStr: PChar;
begin
Result := false;
if (Assigned(AField)) and (Assigned(Stream)) then begin
try
ResultStr := AField.Value;
If ResultStr <> '' then
begin
PResultStr := PChar(ResultStr);
Stream.Write(PResultStr^, Length(ResultStr));
Stream.Seek(0,0);
Result := true;
end;
except
end;
end;
end;
少しグーグルして、エラー#51が意味することを発見しました:JERR_NO_QUANT_TABLE、それが意味するものは何でも。
Delphi 2006でコンパイルすると、同じコードがエラーなしで正常に動作するので、D2010の何が問題になっていますか?