Автор | Сообщение |
|
| |
Пост N: 6
Зарегистрирован: 08.07.06
|
|
Отправлено: 25.07.06 10:56. Заголовок: Clipper 5.2e + DBFNTX сохранение состояния БД
Вот какой вопрос у меня возник: в некоторых участках программы требуется сохранение состояния всех открытых таблиц (индексов, алиасов, relation, фильтров, RECNO() и тп) потом их полное восстановление. Реально ли это сделать или не заморачиваться ? Пока вижу такую реализацию: 1) просматриваем от 1 до 255 все рабочие области. 2) если область используется, сохраняем: AADD(aWorks, {ALIAS(), RECNO(), INDEXKEY(INDEXORD(1..NN)), DBFILTER(), DBRELATION(1...NN),....} ) после чего все закрываем (обычно именно это нужно), работаем с другими таблицами, закрываем их и по массиву aWorks восстанавливаем состояние. Начинаю уже подходить к реализации - довольно сложный в отладке процесс. Может кто сталкивался с граблями и поможет не наступить мне на них. Заранее спасибо уважаемым участникам конференции.
|
|
|
Новых ответов нет
[см. все]
|
|
|
| постоянный участник
|
Пост N: 182
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.07.06 11:29. Заголовок: Re:
Я вижу недостаток, относящийся к самому Clipper, а не к вашей идеи, состоящий в том, что Clipper не делает доступным спецификацию файла базы данных после ее открытия. Правда смещение в структуре, соответствующей объекту выбранной рабочей области, по которому хранится спецификация файла известен. Оттуда можно эту спецификацию выуживать, чтобы затем по ней заново открывать нужную базу данных.
|
|
|
|
| |
Пост N: 7
Зарегистрирован: 08.07.06
|
|
Отправлено: 25.07.06 13:08. Заголовок: как выудить ?
именно этот недостаток Clipper и привел к созданию данной ветки ;-) Подскажи пожалуйста, как выудить эту спецификацию, и что с ней после "рыбалки" делать. ;-D Спасибо.
|
|
|
|
| |
Пост N: 16
Зарегистрирован: 06.06.06
|
|
Отправлено: 25.07.06 20:25. Заголовок: Re:
Я сохраняю состояние баз в стеке, но при этом не закрываю их. Думаю, что этот код можно подправить под вашу задачу. Добавить еще индекс, фильтр и relation. // Длина стека базы данных #define LEN_DBF_STACK 11 // Стек базы данных STATIC cDbStack := "" /*** * dbSave() - сохраняет текущие установки базы данных: * рабочая область, * номер записи, * управляющий индекс, * значение SET SOFTSEEK * значение SET DELETED */ Function dbSave() cDbStack = Chr(Select())+; Str(RecNo(),7)+; Chr(IF(Used(),IndexOrd(),0))+; If(Set(_SET_SOFTSEEK),"T","F")+; If(Set(_SET_DELETED), "T","F")+; cDbStack RETURN NIL /*** * dbRest() - восстанавливает текущие установки базы данных: * рабочая область, * номер записи, * управляющий индекс, * значение SET SOFTSEEK * значение SET DELETED */ Function dbRest() Set(_SET_SOFTSEEK,IF(SubStr(cDbStack,10,1)=="T",.T.,.F.)) Set(_SET_DELETED, IF(SubStr(cDbStack,11,1)=="T",.T.,.F.)) Select(Asc(SubStr(cDbStack,1,1))) IF Used() dbGoto(Val(SubStr(cDbStack,2,7))) dbSetOrder(Asc(SubStr(cDbStack,9,1))) ENDIF // Коррекция стека cDbStack = SubStr(cDbStack, LEN_DBF_STACK+1) RETURN NIL
|
|
|
|
| |
Пост N: 3
Зарегистрирован: 11.09.05
|
|
Отправлено: 27.07.06 11:52. Заголовок: Re:
Я вот столкнулся с такой трудностью при реализации алгоритма, если есть несколько БД с set relation, то при восстановлении исходного состояния БД по очереди в цикле, происходит смещение записей, относительно сохраненных значений, некоторых зависимых БД, т.к. в Clipper установка set relation действует только в активной БД, а в пассивных она не работает..., плюнул на это дело... если кто реализовал полностью алгоритм поделитесь!
|
|
|
|
| |
Пост N: 8
Зарегистрирован: 08.07.06
|
|
Отправлено: 27.07.06 13:06. Заголовок: вот
именно Relation я и опасаюсь... а они у меня используются...
|
|
|
|
| постоянный участник
|
Пост N: 49
Зарегистрирован: 24.09.05
|
|
Отправлено: 16.08.06 18:28. Заголовок: Re:
Sergy пишет: цитата: | Вот какой вопрос у меня возник: в некоторых участках программы требуется сохранение состояния всех открытых таблиц (индексов, алиасов, relation, фильтров, RECNO() и тп) потом их полное восстановление. Реально ли это сделать или не заморачиваться ? |
| очень сложно, а в некоторых случаях (SIx) - АБСОЛЮТНО точное восстановление вообще невозможно. забей. отталкивайся от другого концепта - держи всегда файлы открытыми.
|
|
|
|