Проблема: База данных и картинки...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
hludens
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.05.2005 (Пн) 0:36
Откуда: BRYANSK

Проблема: База данных и картинки...

Сообщение hludens » 16.05.2005 (Пн) 0:48

Дано:
База данных (старый формат) mdb
в ней таблица с картинками. Необходимо эти картинки сохранить как файлы...

Легко вывести через стандартные объекты data + image+SavePicture
НО!
Вообще у меня для всех остальных операций програ использует DAO 3.6 (а объект дата норовит юзать 3.5)
При попытке инсталировать это все на ХП (делал на 2000) был послан нафиг... говорит ошибка доступа :(

Собственно вопрос.

КАК избавится от 3.5? Как выдрать картинки и сохранить их через DAO 3.6 не используя стандартый data+image

т.е. пример.

Код: Выделить всё
Set rs = db.OpenRecordset("SELECT image from table")
Do While Not rs.EOF
a=rs.fields(0)
ЧТО сдесь делать чтобы выдрать картинку и сохранить ее в файл?
rs.MoveNext
loop




P.S. Догадываюсь что вопрос а\поднимался неоднократно, но Поиском не нашел прямого ответа на него. Есть сохранение через массив из DATA... И то не понял...

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 16.05.2005 (Пн) 1:18

Можно использовать ADO Data Control вместо Data

hludens
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.05.2005 (Пн) 0:36
Откуда: BRYANSK

Сообщение hludens » 16.05.2005 (Пн) 6:34

А без контролов можно сделать?
Собственно вся программа у меня написана так как показано в примере, так что плодить интерфейсы неохота :(.
Можно ли поместить рисунок из базы данных в image при помощи DAO 3.6 ? Или вообще минуя image сохранить его на диск? :roll: Должен же существовать такой способ? :?

Лёха_Virus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 24.03.2003 (Пн) 17:13
Откуда: Анграск

Сообщение Лёха_Virus » 16.05.2005 (Пн) 14:17

Загоняешь сначала в байтовый массив и сохраняешь его на диск.

Set rs = db.OpenRecordset("SELECT image from table")
Do While Not rs.EOF
Dim barr() As Byte
barr = rs.Fields(0)
Open "C:\pictemp.bmp" For Binary As #1
Put #1, , barr
Close #1
rs.MoveNext
loop

hludens
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.05.2005 (Пн) 0:36
Откуда: BRYANSK

Сообщение hludens » 16.05.2005 (Пн) 17:51

ХМ...
Я примерно так и пытался, вот только
получается при этом
Вот это.
Код: Выделить всё
lt  Ц\  BMЦ\      6   (   џ            \                  юоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬюоЬю

Вместо вот этого
Код: Выделить всё
BM¬"Q     6   (     w            u
  u
          ¢ú£ÿáÖàìåÖíÜ╛┼╛ÜíÜgngmtmvztswqprlikejjdvvpïïࣥöäê}rwhfiZaeR_bLfkPêèm¬¡ìÑúäñúüñóÇÑúü¼ñå░¿è▓¬ì╢¼Ä│ºà┤¿


Так что чегото в этом примере нехватает...

hludens
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.05.2005 (Пн) 0:36
Откуда: BRYANSK

Сообщение hludens » 16.05.2005 (Пн) 18:15

Я таки поборол проблему!
Спасибо за участие. Помогла смесь двух ответов в разных ветках.
Насколько я понимаю в конце файла остались пара лишних нулей но на изображение это не влияет
Код: Выделить всё
Set db = DAO.OpenDatabase(bn)

Set rs = db.OpenRecordset("select image, id from image")
Do While Not rs.EOF
Dim barr() As Byte
barr = rs.Fields(0).GetChunk(8, 999000)
Open  Trim(Str(rs.Fields(1))) & ".bmp" For Binary As #1
Put #1, , barr
Close #1
rs.MoveNext
Loop



И последний вопрос (чисто в целях улучшения кода, все уже и так работает)
Эта цифра 999000 взята от балды, а вернее из наблюдения что больше метра там картинок нету... А как по умному поставить? Функция LEN неожиданно подвела :( дав значение в 2 раза меньше чем надо.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 16.05.2005 (Пн) 18:50

Может быть, использовать LenB?
Моду создают модоки, а распространяют модозвоны.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 83

    TopList  
cron