Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.18;
Скачать: CL | DM;

Вниз

Хранилище документов   Найти похожие ветки 

 
Андре ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
1-57369
Priz_Datiy
2002-03-04 11:43
2002.03.18
Проблеммы с StrToInt


3-57315
AndrewK
2002-02-19 08:35
2002.03.18
Как заставить программу подключаться к MS SQL Server через NT-вые логины?


3-57338
vicsoft
2002-02-08 20:29
2002.03.18
МАСТЕРА, ПОМОГИТЕ!!! Как изменить тип поля


1-57375
BlackDiamond
2002-03-01 14:34
2002.03.18
Народ Помоги пожалуйста очень надо некогда не занимался и приспичело а времени нету :(


3-57275
grab
2002-02-16 18:49
2002.03.18
сохранение данных в .dbf файл