Объекты OLE из MS Access

  • Автор темы Автор темы Goalni
  • Дата начала Дата начала

Goalni

Новичок
Объекты OLE из MS Access

У меня есть база интернет магазина в формате mdb (MS Access, если кто не знает). В таблице с товарами есть поле типа "Поле объекта OLE", в котором хранится картинка. В PHP при выборке из БД данные в этом поле имеют вид: "151C33000200000011000E0014002500... и так ещё 610000 символов". var_dump говорит что это строка.
Соединяюсь с базой так:
PHP:
<? 
$dsn = 'odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\magazin\\db.mdb;Uid=Admin'; 
try { 

  $dbh = new PDO($dsn); 
  $q = $dbh->query('SELECT * FROM VID_TOVARA'); 
  //print_r($dbh->errorInfo()); 
  $q->setFetchMode(PDO::FETCH_ASSOC); 
   
  $one = $q->fetch(); 
  print var_dump($one['Foto']); 

} catch (PDOException $e) { 
  echo 'Connection failed: ' . $e->getMessage(); 
}

Полагаю что это упакованный объект OLE. Возможно нужно вызвать соответствующий COM-объект и передать ему эту строку:
PHP:
<?
//... этот код, конечно же, не работает
$img = new COM('Ole.Image'); 
$img->GetFromString($one['Foto']); 
$img->FetchToOutput();

И всё же, как вытащить картинку из этого поля?

-~{}~ 04.05.09 17:18:

Вот полный текст этого поля: http://narod.ru/disk/8340054000/fucking-ole.txt.html
 
по существу - открой файл в access, вытяни из него картинки в clipboard, вставь в граф-редактор по вкусу и сохрани как файл. в дальнейшем отдавай php-ой ссылки на статические картинки в файле.
 
Такой вариант не подойдёт. Мне не в кайф 10000 картинок вручную вытаскивать. Тем более что группа манагеров по отлаженой схеме каждую неделю обновляет ассортимент, в том числе и эти картинки.
Мне нужно полностью автоматизировать операцию "вытащить картинку из базы". В идеале карточка товара должна выглядеть так:

Название: ATmega256
Производитель: Atmel
Семейство: megaAVR
Характеристики: ...
...
Фото: <img src="/image.php?id=3832">

-~{}~ 04.05.09 18:03:

А, собственно, в image.php из БД по идентификатору вытаскивается картинка и выводится в браузер.
 
ну если вариант предложенный dimagolov не подходит, то тогда можно написать небольшую утилиту на каком нибудь системном языке (си или делфи к примеру) и пользоваться этой утилитой. Алгоритм
dimagolov уже описал
 
Goalni еще не понял, что держать backend DB на Access это не удачное решение. Видимо, они годами юзади эту хрень для герерации прайсов, а теперь решили сделать для нее web-морду.

Придется делать нормальную DB и писать админку для манагеров, а существующую как-то конвертить. Кстати, VBA Access-овский должен уметь сохранить картинку в файл, пусть даже в .bmp, потом их можно будет пакетно конвертнуть.
 
по ссылке fixxxer уже всё есть, в том числе прога для вытаскивание данных.
 
М... я туплю, или BLOB и OLE несколько разные вещи?
т.е. OLE поле в базе я могу понять. С натягом, но могу задней коркой мозка представить. Если это то, о чем я подумал, и для просто бинарных данных есть свой тип поля. Но вот если то что я понял - верно, как можно было туда додуматся картииинки пихать?
 
Видимо, всех смутило описание гипотетической ситуации. Поэтому спрошу конкретно. Как из строкового представления OLE-объекта получить данные, инкапсулированные в нём?
 
Вот этот код

PHP:
<?php
$str = file_get_contents("fucking-ole.txt");
$str = preg_replace_callback ("([a-zA-Z0-9]{2})", create_function ('$matches', 'return chr (hexdec ($matches[0]));'), $str);
file_put_contents("whatisit.txt", $str);
?>

Выдал мне что-то читабельное (вида [bin data]Точечный рисунок Paint.Picture[bin data]), но картинка не открылась.
 
там кажись ровно та же структура которая в клипборде хранится.
 
Сверху