Форум: "Базы";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
ВнизХранилище документов Найти похожие ветки
← →
Андре (2002-02-18 17:33) [0]Подскажите пожалуйста как лучше реализовать такую вещь.
База данных, например Access, в которой в поле типа OleObject хранятся различные документы, например Word, Excel, jpg...
Работая с базой данных пользователь должен:
а) Просматривать документы - вроде нет проблем
б) Открывать документы - тоже все нормально - выгружаю документ из базы на диск во временную папку и оттуда его открываю
в) После окончания работы пользователя с документом, он сохраняет документ - при этом он сохраняется все в той же временной папке, в которую мы его извлекли и закрывает приложение, например. А вот здесь мне бы хотелось, чтобы этот документ перенесся обратно в базу данных. То есть все изменения которые пользователь сделал в документе, за последний сеанс работы, сохранились и в том документе который находится в БД.
Так как лучше всего реализовать пункт в). Можно при открытии документа получать ссылку на окно приложения, работающего с ним, и переодически проверять, не закрылось ли оно. В случае закрытия окна, считывать файл обратно в базу, а затем удалять его копию на диске.
А может все таки есть лучший способ ?
← →
wicked (2002-02-18 20:34) [1]есть... при выгрузке документа на диск ты запускаешь приложение для его обработки... запустить его можно с помощью api"шной функции CreateProcess, которая вернёт тебе handle созданного процесса.... другой api"шной функцией, WaitForSingleObject, можно проверять, не закрылось ли то твоё приложение... если реализовать это с помощью thread"ов (не переводится :), то задача по периодической проверке отпадает сама по себе....
детали по функциям можно узнать в справке...
← →
Slava (2002-02-19 09:29) [2]> wicked
Здесь есть подводные камни.
Например у нас открыт документ в Word"е (Word2000). Из базы
мы вытягиваем свой файл и запускаем Word еще раз с нашим
документом. Теперь мы хотим подождать, когда пользователь
закончит редактировать наш документ, чтобы залить его обратно
в базу...
Фиг вам!
Эта вторая копия Word"а (повторяю, я пробовал только с Word2000)
передает управление и наш документ первой копии и благополучно
завершается. А мы-то думаем, что пользователь закончил работу и
закрыл документ, а он как ни в чем не бывало продолжает
редактировать дальше.
Я не нашел способ как это побороть. Можно, конечно, еще
попробовать открыть файл монопольно и если получилось, то
считаем, что с ним никто не работает и после этого сохранять.
Но не все редакторы держат файл открытым (открыли-прочитали-
закрыли-отредактировали-открыли-сохранили-закрыли).
С OLE-объектами такого не происходит, но далеко не все
редакторы являются OLE-серверами, да и заголовок у окна не очень-то :о)
Может кто решил эту проблему?
← →
wicked (2002-02-19 09:40) [3]2 Slava ©
а если совместить два способа?.... то есть использовать WaitForSingleObject, а после возврата из него пробовать монопольно открывать файл?... если не получилось открыть - каждые полсекунды - секунду пробовать опять... хоть и коряво, но проблему решить можно...
также можно подумать насчёт заголовка окна - у нас ведь есть handle процесса...
← →
Slava (2002-02-19 09:51) [4]> wicked
Вобщем я про это и говорил :о))
← →
Slava (2002-02-19 09:57) [5]Заголовок нехороший, когда через OLEContainer,
например "TR645.txt" вместо "Список.txt" или "Документ в OLEContainer1 - Microsoft Word" вместо "Список - Microsoft Word"
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c