Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

TDBImage не показывает картинки из БД через ADO   Найти похожие ветки 

 
Hound_Dog ©   (2004-05-03 14:56) [0]

Итак, есть БД Акцеес 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-03 16:51) [1]

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

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


 
Hound_Dog ©   (2004-05-05 08:48) [2]

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


 
Andriy Tysh ©   (2004-05-05 10:18) [3]


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

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


 
sniknik ©   (2004-05-05 11:09) [4]

> Дело же в следующем: БД наполняется не из дельфи-клиента
вот с этого надо было начинать, что наполняется не из дельфей
ты формат знаеш? там префикс в данных (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;



Страницы: 1 вся ветка

Текущий архив: 2004.05.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
3-1084254203
Fishka
2004-05-11 09:43
2004.05.30
Количество полей или количество записей


4-1082097782
Zyb
2004-04-16 10:43
2004.05.30
Минимизация окна


14-1084337157
SVM (Perm)
2004-05-12 08:45
2004.05.30
Delphi 7 Update Pack


7-1082383492
Super-Mario
2004-04-19 18:04
2004.05.30
Инжектор, ЭБУ


14-1084332023
Medic
2004-05-12 07:20
2004.05.30
ресурсы И-нета по ООП.