Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить MySql - BLOB, Помогите вытащить и вставить картинку 
V
    Опции темы
boades
Дата 5.10.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



У мну возникла проблема при освоении MySql. Я хочу вытащить картинку из BLOB поля и отобразить на форме, а также сохранить в файл. Я не знаю как это сделать! Подскажите плиз какими методами делаете это вы. Также будет приятно получить парочку ссылок на хорошою литературу или компоненты. Зарание благодарен. 
PM MAIL   Вверх
Alix
Дата 5.10.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: нет
Всего: 23



Я пользовался DirectMysql (http://sourceforge.net/projects/directsql)

Код примерно такой:
Код
// executes specified query, if needed, saves result to MySQLResult variable
// returns true if successfull
function query(const q : string; saveResult : boolean = true) : boolean;
begin
  MySQLResult := MySQLClient.query(q, saveResult, result);
end;

...
  escapedScreenshot := FileToMysqlString(screenshotFilename);

  sQuery := 'INSERT INTO `SECRET` ' +
            '(ID, TestID, ClientFolder, Screenshot) VALUES ("' +
            'NULL", "' +      // autoincrement field
            someid + '", "' +
            EscapeStr(clientFolder) + '", "' +
            escapedScreenshot + '")';

  result := query(sQuery, false);
...


Суть функции FileToMysqlString проста - читаем содержимое файла в строку и примерняем к ней EscapeStr. Имеется в разделе download - 3rd party - MysqlStreams.zip

Добавлено через 7 минут и 12 секунд
Читал примерно так:
Код
procedure updateInfo;
var
  res : PAnsiChar;
  len : integer;
  idx : integer;
  hFile : THandle;
  written : longword;

  filename : string;

begin
  res := MySQLResult.FieldValueByName('screenshot');
  idx := MySQLResult.FieldIndexByName('screenshot');
  MySQLResult.FetchLengths;
  len := MySQLResult.FieldLenght(idx);

  if copy(string(res), 2, 3) = 'PNG' then
    filename := 'temp_pic.png'
  else
    filename := 'temp_pic.jpg';

  hFile := CreateFile(PAnsiChar(filename),
                      GENERIC_WRITE,
                      0,
                      nil,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_NORMAL,
                      0);

  if hFile = INVALID_HANDLE_VALUE then begin
    showmessage('Create file failed.');
    exit;
  end;

  if not WriteFile(hFile, res^, len, written, nil) then begin
    showmessage('Writefile failed');
    CloseHandle(hFile);
    exit;
  end;

  CloseHandle(hFile);

  ...

  form1.Image.Image.Picture.LoadFromFile(filename);

  DeleteFile(filename);
end;


Подход с записью во временный файл меня вполне устраивал. А вообще никто не мешает тебе спользовать TMemoryStream, например.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
boades
Дата 6.10.2007, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



спс. хороший примерчик. Кста я как раз пользуюсь DirectMySql! Так что я получил именно то что хотел! ))) +1.
PM MAIL   Вверх
boades
Дата 7.10.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Еще одно. Пытался найти MySqlStreams - не нашел. Дай ссылку плизз.
PM MAIL   Вверх
Alix
Дата 7.10.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: нет
Всего: 23



вот. тебе нужен только uMysqlStreams.pas

Это сообщение отредактировал(а) Alix - 7.10.2007, 14:00

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  MysqlStreams.zip 5,05 Kb


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
boades
Дата 7.10.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



спс большое.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.