Как вставить картинку jpg в базу ms access 2003 из Lazarus

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Как вставить картинку jpg в базу ms access 2003 из Lazarus

Сообщение Ism » 29.01.2013 23:52:38

Потратил на решение много времени, нормальных средств нет, есть только такие хаки

Код: Выделить всё
var
  aJpg:TJPEGImage; 
  InBMP: TBitmap;
begin
  aJpg :=TJPEGImage.Create;
  InBmp := TBitmap.Create;
  aJpg.LoadFromFile(SysToUTF8('c:\test.jpg');
  aJpg.CompressionQuality:=100;
  InBmp.PixelFormat:=pf24bit;
  InBmp.Assign(aJpg);
  SavePictureToDB(InBmp,TBlobField(SQLQueryPictBase.FieldByName('picture')));


Сама процедура
Код: Выделить всё
procedure SavePictureToDB(p:TBitmap;blob_field_stream:TBlobField);
var str,strb:TMemoryStream;
    h:longint;
    hb:array [1..4] of byte;
    i:integer;
const
head1=#21#28#51#0#2#0#0#0#17#0#14#0#20#0#37#0;
head2='яяяяТочечный рисунок'#0'Paint.Picture';
head3=#0#1#5#0#0#2#0#0#0#7#0#0#0;
head4='PBrush'#0#0#0#0#0#0#0#0#0;
tail1=#0#0#0#0#0#0#0#0;
tail2=#0#0#1#5#0#0#0#0#0#0#0#173#5#254;
begin
   str:=TMemoryStream.Create;
   strb:=TMemoryStream.Create;
   p.SaveToStream(strb);
   str.Write(head1,16);
   str.Write(head2,34);
   str.Write(head3,13);
   str.Write(head4,15);
   h:=strb.Size+26;
   for i:=1 to 4 do begin
     hb[i]:=h mod 256;
     h:=h div 256;
   end;
   str.Write(hb,4);
   strb.Seek(0,soFromBeginning);
   str.CopyFrom(strb,strb.Size);
   str.Write(tail1,8);
   str.Write(tail1,8);
   str.Write(tail1,8);
   str.Write(tail2,14);
   strb.Seek(0,soFromBeginning);
   blob_field_stream.LoadFromStream(str);
   strb.Free;
   str.Free;
end;
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение alexs » 30.01.2013 00:46:52

Код: Выделить всё
      Image1.Picture.Jpeg.SaveToStream(MS);

А почему нельзя через этот метод?
А уже поток можно куда хочешь сохранить, в том числе и в поле БД...
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение Ism » 30.01.2013 01:42:11

alexs писал(а):
Код: Выделить всё
      Image1.Picture.Jpeg.SaveToStream(MS);

А почему нельзя через этот метод?
А уже поток можно куда хочешь сохранить, в том числе и в поле БД...

Не, в access , как во всех извращенных системах картинка не блоб, а определенная структура, которая работает только в Ms Office
Формы access воспроизводят только это
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение alexs » 30.01.2013 02:47:24

В смысле там хранится не бинарное представление обычного jpg а какой-то свой формат?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение Ism » 30.01.2013 03:05:55

alexs писал(а):В смысле там хранится не бинарное представление обычного jpg а какой-то свой формат?

Там какаято разновидность bmp , но своя, так что обычный bmp не работает , нужен еще заголовок
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение alexs » 30.01.2013 21:04:43

Может они OLE хранилище используют?
Все офисные документы до 2007 офиса именно в нём хранились
Внутри это типа файловой системы
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение Padre_Mortius » 30.01.2013 21:10:15

Там именно OLE-объекты и хранятся
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение alexs » 31.01.2013 02:17:51

На этот случай можно использовать библиотеки которые с ним работают. Например - в fpspreadsheet есть соответсвующие модули.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение naomika » 09.08.2013 13:02:20

Через поток можно реализовать
Аватара пользователя
naomika
незнакомец
 
Сообщения: 7
Зарегистрирован: 09.08.2013 08:30:41

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение vada » 09.08.2013 13:11:15

Не понял! В Accesse-е действительно нет поля с двоичными данными. :(
Ну... можно байтовый поток конвертнуть ну хоть в 16-ти ричное текстовое представление и в текстовое поле засунуть. Потом назад тем же макаром.
ЗЫ. В PostgreSQL я JAVA классы хранил. DOM. Только легкие проблемы сериализации.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Как вставить картинку jpg в базу ms access 2003 из Lazar

Сообщение Ism » 09.08.2013 16:01:16

vada писал(а):Не понял! В Accesse-е действительно нет поля с двоичными данными. :(
Ну... можно байтовый поток конвертнуть ну хоть в 16-ти ричное текстовое представление и в текстовое поле засунуть. Потом назад тем же макаром.
ЗЫ. В PostgreSQL я JAVA классы хранил. DOM. Только легкие проблемы сериализации.

Все есть, но блоб не будет отображаться в самом Access, поэтому такие извращения
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru