![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 поле это не совсем битмап, вернее там может быть что угодно, обьект даже не относящийся к рисункам, если читаеш обьекты то должен уметь их различать.