| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Открыть blob поле в соответствующим ему приложении |
| Автор: Gella7 22.9.2009, 09:47 | ||||
| Я загружаю файл в blob. Файлы могут быть разнве - текстовые, архивы, jpg, pdf.... к примеру файл с расширением djvu
Нужно сделать так, чтобы, допустим при щелчке на кнопку (не важно) файл открывался в соответствующем ему приложении. Я пока только сделала пересохранение, тоесть берем файл и сохраняем с соответствующим расширением:
Но это очень не удобно - сохранять а потом запускать... не могу никак придумать, что делать |
| Автор: Gella7 22.9.2009, 10:23 | ||||||
Висеть то, это да... Я об этом думала, но имена файлов наверняка могут быть одинаковыми. Как то их пометить что-ли какими-нибудь индексами... Да и все равно, как их запускать-то программно - они ведь все разные, и суть проблемы не меняется.
Я так понимаю, надо будет к каждому приложению код писать для открытия... ну это ладно. я просто не знаю как. Если с word, excel или текстовый я как-то еще разберусь, например ворд
и так далее. или это просто сделать? |
| Автор: former 22.9.2009, 10:27 | ||||||
Присваивай уникальное имя при внесении в БД (переименовывай, переноси в хранилище - отдельную папку).
Используй ShellExecute. Другими словами, у тебя файлы будут открываться программами, с которыми ассоциировано то, или иное расширение в Windows. Храни расширение отдельным столбцом. |
| Автор: Gella7 22.9.2009, 10:29 |
| Ну вот как? Лежит допустим какой-нибудь файл с *.ххх расширением, как его взять и запустить программно, независимо от расширения? Не могу никак докопаться Добавлено через 1 минуту и 41 секунду О, значит есть такое... пошла копать |
| Автор: former 22.9.2009, 10:32 | ||
Читай про ShellExecute. |
| Автор: Gella7 22.9.2009, 11:34 | ||||||
| Тот вариант, над которым я изначально работала, кажится все-таки в топку летит потому что не могу в эту прекрасную функцию
засунуть этот файл из blob, потому что не могу его от туда вытащить вот так как-то... вариант
пользователь хочет прицепить файл. Показывает через OpenDialog хде он там у него файл программно копируется на сервер, при этом запоминается имя, расширение... ну наверное к имени номер его прикрепляется. Пользователь хочет открыть документ - ShellExecute и все. и третий извращенный сохраняется он все-таки в blob. а достается так - в зависимости от расширения создается пустой файл туда за писывается из blob
открывается через ShellExecute потом когда пользователь его закрывает, этот временный файлик удаляется (тоже поди не сложно) по моему я переработала |
| Автор: Keeper89 22.9.2009, 11:45 |
| Вариант 1 Вариант former'а с внешним хранением файлов мне нравится, и это можно попробовать реализовать как копирование файлов на сервер с добавлением получившего местоположения в БД. Вариант 2 1) Загружаем файл в BLOB и записываем расширение. 2) При выборе - создаем временный файл из BLOB'а и открываем ShellExecute, а после закрытия удаляем. |
| Автор: dvamaster 22.9.2009, 13:31 | ||
| мдя, а вот как запустив через shellexecute отследить закрытие запущеной программы? Поэтому поводу из MSDN
возвращаемый результат не HINSTANCE, а код ошибки |
| Автор: former 22.9.2009, 16:29 | ||||
Необходимо еще учитывать то, что клиентская программа может быть закрыта раньше, viewer-а. Года 4-е назад делал электронную библиотеку. Файлы хранил отдельно. Экземпляр файла копировал в Temp-папку на клиенте. При запуске клиента и выходе из него очищал временную папку. Хранить файлы отдельно считаю лучше, т.к.: - скорость в работе с БД; - переносимость БД; - малые затраты на резервное копирование. Позже хотел сделать собственный viewer (что бы файлы не копировали), но так руки и не дошли. Конечно это не панацея. P.S. Точно сказать не могу, но вроде есть способ узнать, каким приложением файл открыт. |
| Автор: Akella 22.9.2009, 16:50 | ||
Не знаю, отвечали здесь или нет
Сохраняешь файл во временную папку с правильным расширением. А затем ShellExecute() |
| Автор: former 22.9.2009, 16:55 |
| Akella, чуть http://forum.vingrad.ru/forum/topic-273743/kw-blob-%D1%84%D0%B0%D0%B9%D0%BB.html#. |
| Автор: Gella7 23.9.2009, 04:32 | ||||
| К слову, вдруг кому понадобится создание каталога
удаление каталога со всем содержимым
Это ко второму способу. Всем большое спасибо!!! |
| Автор: Gella7 23.9.2009, 07:59 | ||
Может кто-нибудь подскажет что тут не так:
ругается на предпоследнюю строчку и говорит что not enough actual parameters |
| Автор: Frees 23.9.2009, 08:19 | ||
лучше наверно ForceDirectories() тк CreateDir требует что бы путь по которому создаешь папку существовал Добавлено через 2 минуты и 33 секунды
|
| Автор: Gella7 23.9.2009, 08:36 | ||
вроде так и должно быть....
а он говорит что ftBlob неизвестный идентификатор |
| Автор: Akella 23.9.2009, 09:15 |
| Gella7, |
| Автор: former 23.9.2009, 09:32 |
А модуль DB подключен? |
| Автор: Gella7 23.9.2009, 10:06 |
| О, спасибо former, модуль подключила ругаться перестал. Вроде все работает!!! Akella, поймешь если выше перечитаешь вариант №2 создание временных файлов чтоб кидать туда файлы из blob Еще раз всем спасибо!!! |
| Автор: former 23.9.2009, 10:20 |
Gella7, тогда внизу поставь галочку, что вопрос решен. |
| Автор: Gella7 23.9.2009, 10:32 | ||||||
| Еще не решен теперь не могу вытащить файл от туда. с таблицами было
все работало.
не хочет никак... говорит "invalid variant operation" Добавлено через 6 минут и 36 секунд Все! вот так сделала
|
| Автор: former 23.9.2009, 10:44 |
Эту http://forum.vingrad.ru/forum/topic-38246.html почитай. |