Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > сохранить изображение в базу


Автор: Baha_Ahmed 11.4.2009, 08:23
Есть некое изображение, пробема сохранения ее в базу данных. Пишу игрушку типа тестирования для школьного учереждения, нужно сохранять картинки в базу данных. Помогите!!!! smile 

Автор: amt 22.4.2009, 13:02
А может достаточно сохранить в базе путь к картинке?

Автор: Baha_Ahmed 14.5.2009, 08:52
Цитата(amt @ 22.4.2009,  13:02)
сохранить в базе путь к картинке?

Не так не получается, пишу оболочку пустышку, учителя уже дальше сами ею будут пользоваться, а они как правило меняют часто папки, да и это учителя младших классов!!! Помогите!!! smile 

Автор: Akina 14.5.2009, 09:12
Цитата(Baha_Ahmed @  14.5.2009,  09:52 Найти цитируемый пост)
они как правило меняют часто папки

Решение простое - сделать инсталлятор приложения, в папке установки программы или профиля пользователя сделать подпапку для хранения присоединяемых файлов и копировать туда картинки.
Так что пусть они меняют и даже удаляют всё, что заблагорассудится. В папку установки программы или там в %USERPROFILE%\Application Data они точно не полезут. А если полезут - смерть данных будет уже на их совести, причём убиение будет явно сознательным. Кстати, и саму БД неплохо класть туда же - в папку установки, Common Files или в профиль пользователя.

Добавлено через 2 минуты и 24 секунды
Соответственно предусмотри режим очистки такого каталога - удаление файлов, на которые нет ссылок в БД. Можно этот процесс совместить с обслуживанием базы (CompactDatabase).

Автор: Baha_Ahmed 14.5.2009, 12:47
Цитата(Akina @ 14.5.2009,  09:12)
Так что пусть они меняют и даже удаляют всё, что заблагорассудится.

Понимаешь, проблема в том что тесты они сами составляют и естественно картинки тоже они загружают. А с твоим предложением я согласен, только вот в идеале нужно вот как я сказал.

Добавлено через 1 минуту и 47 секунд
Цитата(Baha_Ahmed @ 14.5.2009,  12:47)
Так что пусть они меняют и даже удаляют всё, что заблагорассудится.Понимаешь, проблема в том что тесты они сами составляют и естественно картинки тоже они загружают.

А мне не хочется каждый раз их консультировать как пользоваться прогой, когда все в базе пущай что хочют делают.

Автор: Akina 14.5.2009, 12:51
Цитата(Baha_Ahmed @  14.5.2009,  13:47 Найти цитируемый пост)
тесты они сами составляют и естественно картинки тоже они загружают

Да пожалуйста! Только пойми, что тест с картинками, который преп составляет и корректирует - это одно, а тест с картинками, который хранится в базе и показывается приложением - это совсем другое. То есть это два разных набора тестов с двумя разными наборами картинок. Пусть в большинстве и одинаковыми.

Автор: Baha_Ahmed 14.5.2009, 13:04
Цитата(Akina @ 14.5.2009,  12:51)
Да пожалуйста! Только пойми, что тест с картинками, который преп составляет и корректирует - это одно, а тест с картинками, который хранится в базе и показывается приложением - это совсем другое.

Объясни, пожалуйста что ты имел в виду. Я пишу оболочку-базу данных, в которой хранятся вопросы и картинки к этим вопросам, ну типа миллионер только с картинками, там много видов тестов: один из многих, с клавиатуры... ну и так далее, но вот нужно чтобы картинки хранились с вопросами в базе.

Добавлено через 3 минуты и 46 секунд
Цитата(Akina @ 14.5.2009,  12:51)
тест с картинками, ..... составляет и корректирует - это одно, а тест с картинками, который хранится в базе .... - это совсем другое.

Объясни пожалуйста что ты имел в виду!!!

Автор: Akina 14.5.2009, 13:57
Цитата(Baha_Ahmed @  14.5.2009,  14:04 Найти цитируемый пост)
Объясни пожалуйста что ты имел в виду

Написал ты приложение и инсталлер... назвал, скажем... ну Test. Отдаёшь юзеру. Юзер у себя запускает инсталлер, который создаёт папку "C:\Program Files\Test", записывает туда Test.EXE, создаёт скрипт деинсталляции, копирует и регистрирует необходимые компоненты, ключи реестра... и наконец создаёт каталог "C:\Program Files\Common Files\Test\Database" ("C:\Program Files\Test\Database", "C:\Documents and Settings\All Users\Application Data\Test\Database"), в который кладёт собсно MDB-файл.

Далее. Юзер притаскивает флешку с составленными тестами (или делает их на этом же компе в "C:\Documents and Settings\Вася пупкин\Мои документы\Тесты"). Сделав тест, стартует программу. Она говорит - тыкни мне пальцем файл с вопросом и ответами к нему. Он тычет (ну или вводит их руками в форме ввода). Затем прога говорит - а теперь тыкни мне в рисунки, которые надо показывать к этому вопросу (или юзер нажимает кнопку добавления рисунка). Вываливается окно выбора файла, юзер тычет в файл картинки (на флешке или в каталоге своих документов). Наконец вопрос создан, юзер жмёт "Сохранить". Программа при этом: 1) записывает в БД текст вопроса, варианты ответов, номер верного варианта; 2) копирует файл с рисунком в каталог с базой данных 3) записывает путь к только что созданной копиирисунка в соотв. поле БД. Всё, вопрос готов. Юзер может вынуть флешку, удалить или изменить файл с рисунком в своих документах - на то, что покажет программа, это не окажет ровным счётом никакого влияния.

Автор: Baha_Ahmed 15.5.2009, 11:11
Цитата(Akina @ 14.5.2009,  13:57)
Программа при этом: 1) записывает в БД текст вопроса, варианты ответов, номер верного варианта; 2) копирует файл с рисунком в каталог с базой данных 3) записывает путь к только что созданной копиирисунка в соотв. поле БД. Всё, вопрос готов. Юзер может вынуть флешку, удалить или изменить файл с рисунком в своих документах - на то, что покажет программа, это не окажет ровным счётом никакого влияния.

Да, все правильно. Спасибо!!! Я так и хочу сделать, если не найду запись в mdb изображения. То есть прога создает автономные файлы с изображениями, называет их как хочет,  при этом ссылка хранится в строке базы с вопросами. Ты знаешь, вот как удалять эти изображения? при удалении вопроса это одно, и второе- когда база создана на одном компе, ее просто копируешь на флешку и она будет работать и на другом, хотя как ты говоришь можно и эту папку скопировать вместе с базой. Просто я однажды скопировал тут один пример как записывать изображение, но пользоваться не смог им. smile 

Автор: Akina 15.5.2009, 11:20
Цитата(Baha_Ahmed @  15.5.2009,  12:11 Найти цитируемый пост)
как удалять эти изображения?

Код
filename$ = rs.fields("Имя файла картинки").value
kill filename$


Цитата(Baha_Ahmed @  15.5.2009,  12:11 Найти цитируемый пост)
когда база создана на одном компе, ее просто копируешь на флешку и она будет работать и на другом, хотя как ты говоришь можно и эту папку скопировать вместе с базой.

Конечно, и сама MDB, и зарегистрированные в ней картинки должны быть в одном каталоге (т.е. картинки, конечно, в подкаталоге, или даже в дереве подкаталогов) - и копировать надо всё сразу. И не забыть, что пути к картинкам БД должны быть относительными.

Автор: Baha_Ahmed 15.5.2009, 12:07
Цитата(Akina @ 15.5.2009,  11:20)
И не забыть, что пути к картинкам БД должны быть относительными.

то есть App.Path\ и путь к рабочим папкам с базой и картинками. Спасибо большое!!!!

Автор: Akina 15.5.2009, 12:19
Цитата(Baha_Ahmed @  15.5.2009,  13:07 Найти цитируемый пост)
то есть App.Path\ и путь к рабочим папкам с базой и картинками

Это если ты будешь делать папку для БД и картинок в каталоге установки программы. Но я бы всё-таки предусмотрел режим выбора базы данных (открыть БД) - это позволит иметь несколько БД (одни тесты, другие тесты, рабочая база, пробная база и т.п.)...

Автор: Dexx 15.5.2009, 15:13
Картинку или формулу или еще чего в RTF.
В access поле типа Memo.

И примерно так.
Код

Dim con As New ADODB.Connection
Dim Rec As New Recordset
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb;Persist Security Info=False"
con.Open
Rec.Open "table1", con, adOpenDynamic, adLockOptimistic
Rec.MoveFirst
Rec.Fields(1).Value = RichTextBox1.TextRTF
Rec.Update


Автор: Baha_Ahmed 16.5.2009, 11:25
Цитата(Dexx @ 15.5.2009,  15:13)
Картинку или формулу или еще чего в RTF.
В access поле типа Memo.
Rec.Fields(1).Value = RichTextBox1.TextRTF

Я не работал с RichTextBox, он что может отобразить картинку? и вообще то вопрос стоит как туды записывать и вытаскивать, а в чем отобразить этого нам VB вдоволь предоставил

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)