Проблема. база данных и рисунок через Dao 3.6

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
hludens
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 16.05.2005 (Пн) 0:36
Откуда: BRYANSK

Проблема. база данных и рисунок через Dao 3.6

Сообщение hludens » 16.05.2005 (Пн) 8:09

Есть програма (уже готовая и переписывать не хочется)
Вся работа с БД в ней сделана через DAO 3.6
Задача которую сделать не удалось - выдрать картинку из базы и сохранить ее на диск.
Вариант data + image+SavePicture не подходит... :(
В ХП отказывается работать.
Есть какое либо решение стандартными функциями? без АПИ и лишних контролов?



пример.
Код: Выделить всё

Set rs = db.OpenRecordset("SELECT image from table")
Do While Not rs.EOF
a=rs.fields(0)

ЧТО сдесь делать чтобы выдрать картинку и сохранить ее в файл?

rs.MoveNext
loop




З.Ы. В поиске уже искал, но вразумительного ответа на ТАКОЙ вопрос не нашел... Если он там естьь - ткните носом плиз. Зарание благодарен.

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

Сообщение hludens » 16.05.2005 (Пн) 11:00

Продолжаю творческий поиск :?
Нашел частично подходящий код, попробывал вставить в свою программу.
Есть проблемы.
Может ктото подскажет? ХЕЛП!!!!!!!!!!!! :!:



Код: Выделить всё
Dim dba As ADODB.Connection
dba.ConnectionString = "Driver=Microsoft Access Driver (*.mdb);DBQ='" + bn + "';" ---Здесь выдает 91 ошибку (object variable or With... )

dba.Open
Dim smPicture As New ADODB.Stream
Dim rsAction As New ADODB.Recordset
rsAction.Open "select image, idImage from image", dba


Do While Not rsAction.EOF
With smPicture
     .Type = adTypeBinary
     .Open
     .Write = rsAction.Fields(0).Value '----------------  Выдает ОШИБКУ    Argument not optional
     .SaveToFile (fn + ".files\" + Trim(Str(rsAction.Fields(1).Value)) & ".bmp")
     .Close
End With
rsAction.MoveNext
Loop
rsAction.Close
Set smPicture = Nothing

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.05.2005 (Пн) 11:02

Для извлечения бинарных и больших MEMO-полей используются GetChunk.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение hludens » 16.05.2005 (Пн) 12:31

Если можно чуть подробнее (с кусочком кода) или пошлите на исходник...
С данной командой слабо знаком (хелп по ней прочел-непомогло)
Как ее применить в данном случае?
Почему возникают ошибки во втором примере? что не так?

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

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

Я таки поборол проблему!
Спасибо за участие. Помогла смесь двух ответов
Насколько я понимаю в конце файла остались пара лишних нулей но на изображение это не влияет
Код: Выделить всё
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 раза меньше чем надо.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

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


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

Сообщение hludens » 16.05.2005 (Пн) 22:46

Спасибо. Помогло.


Вернуться в Базы данных

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

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

    TopList  
cron