Розміщення зображення в таблиці Access
Є таблиця з 3-ма текстовими полями і одним OLE в якому планую зберігати зображення. Доступ до бази реалізую через ADO. На формі лежить 3 DBEdit і один DBImage відповідно. Питання в наступному, як додати зображення в таблицю. Тобто я додаю новий запис, заповнюю всі три текстових поля через відповідні DBEdit-контроли, але як заповнити OLE-поле? Пробував обробити подвійний клік по DBImage:
if OpenPictureDialog1.Execute then
begin
# XA0; ADODataSet1.Edit;
# XA0; DBImage1.Picture.LoadFromFile (OpenPictureDialog1.FileName);
end;
проте картинка в базу не зберігається. Як бути?
Та ні, з Post`ом я вже експериментував:
if OpenPictureDialog1.Execute then
begin
# XA0; ADODataSet1.Edit;
# XA0; DBImage1.Picture.LoadFromFile (OpenPictureDialog1.FileName);
# XA0; ADODataSet1.Post;
end;
> Теж не котить.
значить шукай глюк в програмі / даних. тобто наприклад у DBImage1 не визначений джерело даний (DataSource) на момент присвоєння, і значить нема куди зберегти, або завантажується картинка в не в тому форматі, і значить "навішування" підтримує відображення але конвертація не передбачена. (Спробуй bmp).
Ок, тоді чому якщо в АКСЕС я примусово додаю bmp-файл в OLE-поле, то при запуску програми коли відбувається зв'язування з mdb-файлом, я отримую виняток EInvalidGraphic і повідомлення "Bitmap image is not valid" хоча bmp-файл абсолютно нормальний і коректно відкривається паинт?
тому що там ти додаєш не файл, а об'єкт в якому крім даних є ще й інформація про те чим його відкривати. dbimage очікує "чистий" bmp природно його не розуміє. (Його зрозуміє OLE контейнер, якщо ти вважаєш з поля дані і покладеш в нього через стрім наприклад.)
або можеш взяти обробку і відображення на себе і обрізати непотрібні префікси в даних до відображення. (Якщо звичайно не хочеш взяти на себе більш глобальне написання універсального спадкоємця від dbimage; о)). поки начебто немає такого)
так як же мені з найменшому гумором додати можливість відображення в програмі картинок і можливість додаючи записи заповнювати не тільки текстові поля але і додавати в базу графіку?
з bmp покладеної самостійно працює? ось і роби так. однотипно. якщо задашься метою все зробити універсально - "потонеш в деталях". і плюс зробиш неповороткого монстра з яким неможливо працювати. навіть не имхо.
if OpenPictureDialog1.Execute then
begin
# XA0; # XA0; str: = OpenPictureDialog1.FileName;
# XA0; # XA0; DBImage1.Picture.LoadFromFile (str);
# XA0; # XA0; ADODataSet1.Edit;
# XA0; # XA0; TBlobField (ADODataSet1.FieldByName ( "picture")). LoadFromFile (str);
# XA0; # XA0; ADODataSet1.Post;
end;
але тепер інша проблема, програма приймає тільки bmp, і 10 картинок роздули файл БД до 5 Мб, як зробити підтримку JPG-файлів?
> leonidus # XA0; (27.01.08 14:12) [8]
> Але тепер інша проблема, програма приймає тільки bmp,
> # XA0; і 10 картинок роздули файл БД до 5 Мб, як зробити підтримку
> JPG-файлів?
Треба відмовитися від DBImage, зберігати в базі тип картинки і самостійно її малювати.
Проблема вирішена, всім спасибі.