Текущий архив: 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.45 MB
Время: 0.038 c