FireBird и база на USB-FLASH
Вопрос : как это сделать ?
Ведь FireBird по идее держит файл базы.
Можно :
1. Запарковать файл. Есть nbackup -L, но это для бэкапа, не подходит. Нужно будет работать с базой, а файл забэкапили. :(
2. Остановить FireBird и таким образом он оставит базу в покое. Но как сделать это из своего пиложения?
3. Может есть ещё НЕЧТО ?
3. Может есть ещё НЕЧТО ?
Извиняюсь, что немного не в тему, но НЕЧТО действительно есть: у Flash ограниченное количество циклов перезаписи (чтения -- сколько угодно). Боюсь, флэшка умрёт быстро. Лучше купить ноутбучный винт гиг на 40 (желательно с большим кэшем и низкооборотистый, если найдёшь) и USB-контейнер.
Сейчас у клиента работает приложение (программа написана в Access и база соответственно), которое я переделываю.
Так вот это приложение работает на flash-ке (64M) около 2 лет. Работают они в нём если не каждый день , то в краёнем случае через день.:mad: Меня тоже это смутило. Но, факт.
Так вот это приложение работает на flash-ке (64M) около 2 лет. Работают они в нём если не каждый день , то в краёнем случае через день.:mad: Меня тоже это смутило. Но, факт.
Что ж, значит, с флэшкой повезло. На кубанском форуме по одному эсу одно время бурно обсуждалась работа с информационными базами 1С на флэшке. Было описано довольно много случаев полной потери данных на флэшках.
Опять же, работа работе рознь. Если в Вашем случае в основном идут выборки данных, а изменения или добавления данных сравнительно редки, то, соответственно, и флэшка проживёт долго.
2. Остановить FireBird и таким образом он оставит базу в покое. Но как сделать это из своего пиложения?
вот этот вариант можно сделать следующим образом, если твоё приложение будет стоять на той же машине где и Firebird:
запости ФайрБёрду windows_message wm_Close... [просто попросит его закрыться]... проканает, если идёт просто завершение работы приложения без всяких вопросов и диалогов... вот... отмонтировать влёшку я думаю можно какими-нибудь WinAPI функциями (просто не пробовал).
ну или если FireBird висит как служба (не разу не пользовал), то службу остановить )
просто идея, ведь нужны просто идеи? ;)
не знаю насколько подойдет тебе такой вариант, но в принципе, я думаю это приемлемо... как бы вот так.
запости ФайрБёрду windows_message wm_Close... [просто попросит его закрыться]... проканает, если идёт просто завершение работы приложения без всяких вопросов и диалогов... вот... отмонтировать влёшку я думаю можно какими-нибудь WinAPI функциями (просто не пробовал).
ну или если FireBird висит как служба (не разу не пользовал), то службу остановить )
просто идея, ведь нужны просто идеи? ;)
не знаю насколько подойдет тебе такой вариант, но в принципе, я думаю это приемлемо... как бы вот так.
Идея как и ранее проста - нужно, выйдя из приложения и выдернув flash не повредить базу. Отмонтируют-то они её штатными средствами. Меня беспокоит вот что. Когда юзер покидает приложение (FireBird запущен и работает). Находится ли база в коннекте, и можно ли её отсоединить ?
Я воспользовался мониторингом обращения к файлу базы. FireBird его теребит как на входе так и выходе, но не обращается, к ней если окно приложения с базой не активны. В момент работы приложения ясно , что flash нельзя вынимать хотя обращений к ней нет. А вот после дисконнекта ? Значит ли что FireBird после этого скинул все свои буфферы на диск ?
Другими словами не хочется нагружать юзеров, чтоб они еще в апплете FireBird тушили.
Я воспользовался мониторингом обращения к файлу базы. FireBird его теребит как на входе так и выходе, но не обращается, к ней если окно приложения с базой не активны. В момент работы приложения ясно , что flash нельзя вынимать хотя обращений к ней нет. А вот после дисконнекта ? Значит ли что FireBird после этого скинул все свои буфферы на диск ?
Другими словами не хочется нагружать юзеров, чтоб они еще в апплете FireBird тушили.[/quote]
ну значит нужно проверить:
создать какую-нить левую БД записать также на Flash и протестить, будет потеря данных или нет... ну а как еще?.. я лично другого способа не вижу... ну как минимум потому, что никогда не работал с FireBird
1. Если база локальная - пользуй embedded server - он точно по закрытию базы буфера флушит.
2. Сходи сюда и полистай маны - об этом что-то было.
3. см. OpenService, ControlService