Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TDBImage не показывает картинки из БД через ADO [D6, Access2K]


Hound_Dog ©   (2004-05-03 14:56:00) 

Итак, есть БД Акцеес 2000, доступ производится через ADO. В таблице БД хранятся катринки (поле объекта OLE). Связка ADOConnection - ADOQuery - DataSet - DBGrid. Поле с картинкой отображается в DBGrid как BLOB. Окей, привязываем компонент TDBImage к полю pic (то есть картинка). Не показывает, несмотря на любые данные в таблице - BMP, JPEG, GIF.
Присвоение по событию DBImage1.Picture.Bitmap.Assign(TBLOBField (ADOQuery2.FieldByName('pic'))); так же ничего не дает (вылетает с той же ошибкой Bitmap image is not valid) (ADOQuery2.SQL = 'SELECT pic FROM table1 where index = 2)

Что не так, подскажите? третий день бьюсь.


sniknik   (2004-05-05 11:09:00) [1]

> Дело же в следующем: БД наполняется не из дельфи-клиента
вот с этого надо было начинать, что наполняется не из дельфей
ты формат знаеш? там префикс в данных (82 длинна) с описанием что это за обьект (это если стандартно из Access ложить)
вот стандартный доступ к BMP

var Stream: TMemoryStream;
   Pref: Word;
begin
 Stream:= TMemoryStream.Create;
 try
   TBLOBField(ADODataSet1.FieldByName('ImField')).SaveToStream(Stream);
   if Stream.Size <> 0 then begin
     Stream.Position:= 0;
     Stream.ReadBuffer(Pref, 2);
     if Pref = $4D42 then DBImage1.DataSource:= DataSource1 //это положено из дельфей включаем стандартный DBImage
     else begin //это аксесом перекладываем в Image
       Stream.Position:= 82;
       Image1.Picture.Bitmap.LoadFromStream(Stream);
     end;
   end;
 finally
   Stream.Free;
 end;
end;


Andriy Tysh   (2004-05-05 10:18:00) [2]


> DBImage1.Picture.Bitmap.Assign(TBLOBField (ADOQuery2.FieldByName('pic')));
>

Это прокатит если тянешь BMP.
Я в ДВГриде тоже рисовал. То написал процедуру, которая проверяет BMP или JPEG (иного у меня нет). Может и Вы попробуйте после вытягивания проверить или переконвертировать в удобный формат.


Hound_Dog   (2004-05-05 08:48:00) [3]

Гым...
Я знаю, что ОЛЕ это не всегда рисунок, в общем случае набор байт.
Тут картина какая - я так сказать, точно знаю, что в этом поле, поскольку сам туда это засунул. Дело же в следующем: БД наполняется не из дельфи-клиента, а из собственной акцесс-формы, а дельф мне потребовался для описания автоматизации с CorelDRAW. В принципе, в БД хрянятся мемо-поля и джипеги, а моя задача - написать програмулину кидающую текст и картинки в CDRW. С Корелем все более-менее ясно, а вот с картинками.... Ну нет у меня возможности и желания переписывать Акцесс на Дельфи.


sniknik   (2004-05-03 16:51:00) [4]

ложи картинку в базу из дельфей аналогично как и читаеш (через DBImage1 к примеру) - DBImage1.LoadFromFile().

OLE поле это не совсем битмап, вернее там может быть что угодно,  обьект даже не относящийся к рисункам, если читаеш обьекты то должен уметь их различать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо