в моем проекте я использую mysql.pas иметь дело с базой данных MySql, поэтому я эту таблицу структуру:Delphi Загрузка Blob из 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 заголовка файла, позвольте мне объяснить: Audi_Car изображение сохраняется как Png изображение , но когда я загрузить его образ я всегда получаю это так:
Поэтому, пожалуйста, как можно это исправить? есть ли ошибка в моем запросе Sql?
P.S: Я создаю TrgStream в другом месте.
И вот моя процедура LoadCarImage:
Procedure LoadCarImage();
var
CarStrm:TMemoryStream;
begin
CarStrm:=TMemoryStream.Create;
Try
GetCarImage('Audi',CarStrm);
CarStrm.SaveToFile('audi.png');
finally
CarStrm.Free;
end;
end;
большое спасибо
Как вы знаете, что "сохранить рутинные работы очень хорошо"? Вы можете извлечь содержимое столбца другим способом и проверить его, чтобы убедиться, что он правильно сохранен в базе данных? Если он поврежден или поврежден во время сохранения, он не может быть правильно прочитан. Кроме того, где вы сохраняете содержимое потока? Ваш код не показывает эту информацию. –
@ Ken White большое спасибо, за ваш 1-й вопрос. Да, хотя об этом я и использовал MySQLWorkbench, чтобы протестировать его, так что загрузите файл png в поле Blob (так что сохранение выполняется вручную). Для вашего второго вопроса я отредактирую свою тему и добавлю процедуру загрузки – Sdean
Я отредактировал мою тему, чтобы добавить процедуру LoadCarImage. – Sdean