Access фотографии в базе данных
От: .Mistery Беларусь  
Дата: 24.04.06 10:44
Оценка:
Привет всем!

Сабж:
База данных сотрудников, пример аля "БОРЕЙ", там есть фотография сотрудника. Она сохранена как путь на файл на диске, самая наверное разумная реализация.

Проблема:
Когда несколько юзеров работают с базой по сети, естественно фотки видит только тот у кого локально на машине расположена база, потому как в поле _фото_ запись типа:
d:\мои документы\база клиенты\фотки\сидоров.jpg


Возможное решение:
Я так пологаю, что нужно как то впихивать туда сетевые имена на файлы, аля:
\\Comp_1\second (d)\мои документы\база клиенты\фотки\сидоров.jpg

но шестое чувство подсказывает, что это СОВСЕМ не правильно, потому как, а что будет если изменится имя компа или сетевого диска или базу перенесут на другой комп, да мало ли что?!

Плиз, кто знает поделитесь методологией решения подобной задачи!

Спасибо всем!
Мы — маньяки, должны помогать друг другу!
Re: Access фотографии в базе данных
От: bastrakov Россия http://bastrakof.livejournal.com/
Дата: 24.04.06 12:04
Оценка:
Здравствуйте, .Mistery, Вы писали:

M>Сабж:

M>База данных сотрудников, пример аля "БОРЕЙ", там есть фотография сотрудника. Она сохранена как путь на файл на диске, самая наверное разумная реализация.

M>Проблема:

M>Когда несколько юзеров работают с базой по сети, естественно фотки видит только тот у кого локально на машине расположена база, потому как в поле _фото_ запись типа:
M>
M>d:\мои документы\база клиенты\фотки\сидоров.jpg
M>


M>Возможное решение:

M>Я так пологаю, что нужно как то впихивать туда сетевые имена на файлы, аля:
M>
M>\\Comp_1\second (d)\мои документы\база клиенты\фотки\сидоров.jpg
M>

M>но шестое чувство подсказывает, что это СОВСЕМ не правильно, потому как, а что будет если изменится имя компа или сетевого диска или базу перенесут на другой комп, да мало ли что?!

M>Плиз, кто знает поделитесь методологией решения подобной задачи!


я, как раз, сторонник хранения файлов в файловой системе. но это — вопрос архитектурного подхода.
...ну или философии, если угодно.

в конкретно указаном случае, можно хранить где-то в конфигах проекта:
d:\мои документы\база клиенты\фотки\
или
\\Comp_1\second (d)\мои документы\база клиенты\фотки\

и уже от указанного "рута" писать путь (или просто имя файла) до указаной фотки.

в качестве бонуса, пропишите альтернативный рут. и положите файлы сразу на двух сетевых серверах.
при ненахождении в одном месте — можно попробовать спросить в "альт".

p.s. а вот хранить файлы в базе мне не нравиться, сорри.
обьяснить могу, но к вопросу отношение не имеет.

во
Re[2]: Access фотографии в базе данных
От: Аноним  
Дата: 24.04.06 12:36
Оценка: +1
Здравствуйте, bastrakov, Вы писали:

B>p.s. а вот хранить файлы в базе мне не нравиться, сорри.

B>обьяснить могу, но к вопросу отношение не имеет.

Интересно услышать объяснение.
Re[3]: Access фотографии в базе данных
От: bastrakov Россия http://bastrakof.livejournal.com/
Дата: 24.04.06 13:32
Оценка: 4 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, bastrakov, Вы писали:


B>>p.s. а вот хранить файлы в базе мне не нравиться, сорри.

B>>обьяснить могу, но к вопросу отношение не имеет.

А>Интересно услышать объяснение.


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

во
Re[4]: Access фотографии в базе данных
От: .Mistery Беларусь  
Дата: 24.04.06 14:23
Оценка:
То есть я так понимаю, прописываем жестко в конфиге базы например два путя,сетевой и локальный и
по одному из них находим то что нужно. Соответственно если меняется имя машины или сетевого диска то нужно
покрайней мере сетевой адрес в конфиге подправить. Так я понял, да?
Мы — маньяки, должны помогать друг другу!
Re[5]: Access фотографии в базе данных
От: bastrakov Россия http://bastrakof.livejournal.com/
Дата: 24.04.06 14:26
Оценка:
Здравствуйте, .Mistery, Вы писали:

M>То есть я так понимаю, прописываем жестко в конфиге базы например два путя,сетевой и локальный и

M>по одному из них находим то что нужно. Соответственно если меняется имя машины или сетевого диска то нужно
M>покрайней мере сетевой адрес в конфиге подправить. Так я понял, да?

да. только я имел ввиду config-файл.
но не вижу проблемы, почему бы конфиги не хранить в базе.

во
Re: Access фотографии в базе данных
От: MatFiz Россия  
Дата: 30.04.06 08:54
Оценка: +1
Здравствуйте, .Mistery, Вы писали:

M>Плиз, кто знает поделитесь методологией решения подобной задачи!


Пусть все картинки лежат в некоторой папке (назовем ее корневой папкой изображений) и подпапках на одном компьютере.
В базе храни относительные пути (назовем колонку с путями RelativeImagePath).
В конфиге приложения заведи переменную ImagesRootFolder.
Тогда.
В базе будет что-то вроде

Image1.jpg
Image2.jpg
MoreImages/Image3.jpg
MoreImages/Image4.jpg

Картинки могут лежать даже не на той машине, на которой база твоя лежит (пусть это будет комп с именем ImagesServer).
Расшариваешь на этом компе корневую папку изображений под некоторым именем (пусть это будет Images).
В настройках клиентов прописываешь в конфиге

ImagesRootFolder = "\\ImagesServer\Images"

При работе с картинками в клиенте должен быть примерно такой код:
string relativeImagePath;
// Получить из базы relativeImagePath из колонки RelativeImagePath
string imagePath = Path.Combine(Settings.ImagesRootFolder, relativeImagePath);
//теперь в переменной imagePath абсолютный путь к картинке. Делай с ним чего хочешь.
How are YOU doin'?
Re: Access фотографии в базе данных
От: Аноним  
Дата: 02.05.06 08:40
Оценка:
Здравствуйте, .Mistery, Вы писали:

M>Привет всем!


M>Сабж:

M>База данных сотрудников, пример аля "БОРЕЙ", там есть фотография сотрудника. Она сохранена как путь на файл на диске, самая наверное разумная реализация.

А почему бы не хранить фотки в blob , тогда не будет таких проблем. Да и менять их будем в транзакциях
Re[2]: Access фотографии в базе данных
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.05.06 10:22
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>А почему бы не хранить фотки в blob , тогда не будет таких проблем. Да и менять их будем в транзакциях

Тогда база очень быстро умрет. У Аксесса принципиальные проблемы при работе с файлами БД большого размера (то ли два, то ли четыре гига для него вообще предел возможностей).
Я вообще считаю, что в базе хранить нужно всё, но для аксесса это не всегда возможно.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Access фотографии в базе данных
От: Sheridan Россия  
Дата: 02.05.06 10:48
Оценка:
Здравствуйте, MatFiz, Вы писали:
Все верно...

MF>
MF>string relativeImagePath;
MF>// Получить из базы relativeImagePath из колонки RelativeImagePath
MF>string imagePath = Path.Combine(Settings.ImagesRootFolder, relativeImagePath);
MF>//теперь в переменной imagePath абсолютный путь к картинке. Делай с ним чего хочешь.
MF>


Только писать надо так?
std::string relativeImagePath;
std::string imagePath = Settings.ImagesRootFolder + relativeImagePath;

[RSDN@Home][1.2.0][alpha][648]
[Лучший способ защититься — не уподобляться. [Марк Аврелий]]
Matrix has you...
Re[3]: Access фотографии в базе данных
От: MatFiz Россия  
Дата: 03.05.06 14:07
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Только писать надо так?

S>
S>std::string relativeImagePath;
S>std::string imagePath = Settings.ImagesRootFolder + relativeImagePath;
S>


Это был кусок кода
Кода на шарпе.
How are YOU doin'?
Re[4]: Access фотографии в базе данных
От: Sheridan Россия  
Дата: 04.05.06 03:01
Оценка:
Здравствуйте, MatFiz, Вы писали:

MF>Это был кусок кода

Знаю.

MF>Кода на шарпе.

Знаю.

[RSDN@Home][1.2.0][alpha][648]
[3нание — в действии. [Эразм Роттердамский]]
Matrix has you...
Re[5]: Access фотографии в базе данных
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.05.06 03:03
Оценка:
Здравствуйте, Sheridan, Вы писали:
S>Знаю.
Тогда зачем ты предлагаешь заменить Path.Combine (который еще и добавляет разделитель пути, если надо) на строковую конкатенацию?
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Эх... Расслабляет дотнет всех чтоли...
От: Sheridan Россия  
Дата: 06.05.06 03:22
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>Знаю.

S>Тогда зачем ты предлагаешь заменить Path.Combine (который еще и добавляет разделитель пути, если надо) на строковую конкатенацию?
Если все верно написано, то добавлять разделитель пути не надо, а в этом случае конкатенация быстрее будет.
Почему я так думаю? А потому что гляди: одна строка совсем статична — проверку на символ пути можно провести в момент инициализации переменой (1 раз за время работы приложения, при чтении настроек), 2я строка берется из БД. Проверку на правильность 2й строки надо проводить перед вносом ее в БД. Тоесть например мы заранее делаем чтобы первая строка заканчивалась разделителем пути, а вторая начиналась с имени каталога после разделителя.
Settings.ImagesRootFolder: 
"c:\data\something\"

relativeImagePath:
"first\first.jpg"
"somebody.jpg"
"first\woo.jpg"
"second\foo.jpg"

В итоге при выборке из БД мы имеем уже подготовленные строки и проверки не нужны. А если данных большое количество? И на каждом Path.Combine помимо сращивания строк будут идти еще и разные проверки? Это господа тормоза получаются. Так писать не надо.

[RSDN@Home][1.2.0][alpha][648]
[Hе удивление, а недоумение и печаль суть начало философии. [А. Шопенгауэр]]
Matrix has you...
Re: Эх... Расслабляет дотнет всех чтоли...
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.05.06 04:27
Оценка: +1 :)
Здравствуйте, Sheridan, Вы писали:
S>В итоге при выборке из БД мы имеем уже подготовленные строки и проверки не нужны. А если данных большое количество? И на каждом Path.Combine помимо сращивания строк будут идти еще и разные проверки? Это господа тормоза получаются. Так писать не надо.
Гм. Во-первых, доставание картинок из базы как правило в массовом порядке не бывает.
Во-вторых, конкатенация, я тебя уверяю, работает бесконечно быстрее фетчинга из аксесса. Поэтому эффект ты и в микроскоп не заметишь.
Попытки выиграть пару сотен тактов за счет устойчивости приложения и облегчения поддержки — не рулят. Так писать не надо. Надо профилировать.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Эх... Расслабляет дотнет всех чтоли...
От: Sheridan Россия  
Дата: 06.05.06 05:05
Оценка: +3 -3 :)
Здравствуйте, Sinclair, Вы писали:

S>Гм. Во-первых, доставание картинок из базы как правило в массовом порядке не бывает.

S>Во-вторых, конкатенация, я тебя уверяю, работает бесконечно быстрее фетчинга из аксесса. Поэтому эффект ты и в микроскоп не заметишь.
Знаю что быстрее, но это не повод забивать на качество и скорость работы кода.
Делая себе поблажки в малом рискуеш споткнуться на чемто важном. Это я уже по своему опыту.

S>Попытки выиграть пару сотен тактов за счет устойчивости приложения и облегчения поддержки — не рулят.

Устойчивости? При чем тут устойчивость? Нет, ну конечно если к своему коду доверия нет то да, согласен...

S>Так писать не надо.

Надо. Надо учить себя писать быстрый и качественный код. На каждом шагу проверки делать это никаких компов не хватит потом обработать.

S>Надо профилировать.

Да, профилировать тоже надо. Одно но. Профилировать надо языки типа С++. Шарп профилируй не профилируй бейсик он бейсиком и останется, можно не заморачиваться...

[RSDN@Home][1.2.0][alpha][648]
[Если можешь, будь умнее других, но не показывай этого. [Ф. Честерфилд]]
Matrix has you...
Re[3]: Эх... Расслабляет дотнет всех чтоли...
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.05.06 06:27
Оценка:
Здравствуйте, Sheridan, Вы писали:
S>Надо. Надо учить себя писать быстрый и качественный код. На каждом шагу проверки делать это никаких компов не хватит потом обработать.
Надо учить себя писать хорошо читаемый код. Даже если Path.Combine внутри себя делает банальную конкатенацию, его использование позволяет с первого взгляда понять, о чем идет речь. Не нужно бегать глазами вверх по коду, чтобы разобраться кто с кем склеивается и зачем.
S>>Надо профилировать.
S>Да, профилировать тоже надо. Одно но. Профилировать надо языки типа С++. Шарп профилируй не профилируй бейсик он бейсиком и останется, можно не заморачиваться...
О, еще один спец. Мне даже неохота начинать все сначала. Вкратце: твои интуитивные представления о производительности современного софта безнадежно отстали от жизни. Крайне рекомендую начать их развеивать.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Эх... Расслабляет дотнет всех чтоли...
От: Demiurg  
Дата: 06.05.06 17:26
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>Да, профилировать тоже надо. Одно но. Профилировать надо языки типа С++. Шарп профилируй не профилируй бейсик он бейсиком и останется, можно не заморачиваться...

S>О, еще один спец. Мне даже неохота начинать все сначала. Вкратце: твои интуитивные представления о производительности современного софта безнадежно отстали от жизни. Крайне рекомендую начать их развеивать.

Как работает "современный софт" я знаю, думаю и Шеридан тоже. Твой ответ некрасивый. Я понимаю, что Шеридан снова перешел на "бейсики" и все такое Это тоже некрасиво, вернее неправильно. Тем не менее.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Эх... Расслабляет дотнет всех чтоли...
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.05.06 01:13
Оценка: +1
Здравствуйте, Demiurg, Вы писали:

D> Как работает "современный софт" я знаю, думаю и Шеридан тоже.

По его ответу этого не видно.
D> Твой ответ некрасивый.
Меня утомляет писать одно и то же в седьмой раз. У меня нет желания объяснять Шеридану, что к чему. У меня есть желание предостеречь новичков от принятия его слов за чистую монету.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Access фотографии в базе данных
От: Аноним  
Дата: 17.05.06 18:33
Оценка:
Используй поле "Поле объекта ОЛЕ" и храни там фотки....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.