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

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

Размещение изображения в таблице Access [D6]


leonidus ©   (2008-01-27 01:20:00) 

Есть таблица с 3-мя текстовыми полями и одним OLE в котором планирую хранить изображения. Доступ к базе реализую через ADO. На форме лежит 3 DBEdit и один DBImage соответственно. Вопрос в следующем, как добавить изображение в таблицу ? Т.е. я добавляю новую запись, заполняю все три текстовых поля через соответствующие DBEdit-контролы, но как заполнить OLE-поле? Пробовал обработать двойной клик по DBImage:

if OpenPictureDialog1.Execute then
begin
 ADODataSet1.Edit;
 DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;

однако картинка в базу не сохраняется. Как быть?


leonidus   (2008-01-28 18:16:00) [1]

Проблема решена, всем спасибо.


Плохиш   (2008-01-28 11:17:00) [2]


> leonidus   (27.01.08 14:12) [8]


> но теперь другая проблема, программа принимает только bmp,
>  и 10 картинок раздули файл БД до 5 Мб, как сделать поддержку
> JPG-файлов?

Надо отказаться от DBImage, сохранять в базе тип картинки и самостоятельно её отрисовывать.


leonidus   (2008-01-27 14:12:00) [3]

вопрос решен:

if OpenPictureDialog1.Execute then
begin
   str:=OpenPictureDialog1.FileName;
   DBImage1.Picture.LoadFromFile(str);
   ADODataSet1.Edit;
   TBlobField(ADODataSet1.FieldByName('picture')).LoadFromFile(str);
   ADODataSet1.Post;
end;

но теперь другая проблема, программа принимает только bmp, и 10 картинок раздули файл БД до 5 Мб, как сделать поддержку JPG-файлов?


sniknik   (2008-01-27 13:51:00) [4]

с bmp положенной самостоятельно работает? вот и делай так. однотипно. если задашься целью все сделать универсально - "утонешь в частностях". и плюс сделаешь неповоротливого монстра с которым невозможно работать... даже не имхо.


leonidus   (2008-01-27 13:35:00) [5]

так как же мне с наименьшем гемороем добавить возможность отображения в программе картинок и возможность добавляя записи заполнять не только текстовые поля но и добавлять в базу графику?


sniknik   (2008-01-27 13:25:00) [6]

потому что там ты добавляешь не файл, а обьект в котором кроме данных есть еще и инфа о том чем его открывать. dbimage ожидающий "чистый" bmp естественно его не понимает... (его поймет OLE контейнер, если ты считаешь из поля данные и положишь в него через стрим например.)
или можеш взять обработку и отображение на себя и обрезать ненужные префиксы в данных до отображения... (если конечно не хочеш взять на себя более глобальное написание универсального наследника от dbimage ;о)). пока вроде нет такого)


leonidus   (2008-01-27 12:25:00) [7]

Ок, тогда почему если в аксесе я принудительно добавляю bmp-файл в OLE-поле, то при запуске программы когда происходит связывание с mdb-файлом, я получаю исключение EInvalidGraphic и сообщение "Bitmap image is not valid" хотя bmp-файл абсолютно нормальный и корректно открывается паинтом?


sniknik   (2008-01-27 11:59:00) [8]

> тоже не катит...
значит ищи глюк в программе/данных... т.е. например у DBImage1 не определен источник данный (DataSource) на момент присвоения, и значит некуда сохранять, или загружается картинка в не в том формате, и значит "навеска" поддерживает отображение но конвертация не предусмотрена... (попробуй bmp).


leonidus   (2008-01-27 11:41:00) [9]

Да нет, с Post`ом я уже экспериментировал:

if OpenPictureDialog1.Execute then
begin
 ADODataSet1.Edit;
 DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
 ADODataSet1.Post;
end;

тоже не катит...


sniknik   (2008-01-27 01:44:00) [10]

Post; забыл.


Наверх

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