On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение





Пост 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 восстанавливаем состояние.

Начинаю уже подходить к реализации - довольно сложный в отладке процесс. Может кто сталкивался с граблями и поможет не наступить мне на них.

Заранее спасибо уважаемым участникам конференции.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 6 [только новые]


постоянный участник


Пост N: 182
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.07.06 11:29. Заголовок: Re:


Я вижу недостаток, относящийся к самому Clipper, а не к вашей идеи, состоящий в том, что Clipper не делает доступным спецификацию файла базы данных после ее открытия. Правда смещение в структуре, соответствующей объекту выбранной рабочей области, по которому хранится спецификация файла известен. Оттуда можно эту спецификацию выуживать, чтобы затем по ней заново открывать нужную базу данных.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 7
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.07.06 13:08. Заголовок: как выудить ?


именно этот недостаток Clipper и привел к созданию данной ветки ;-)

Подскажи пожалуйста, как выудить эту спецификацию, и что с ней после "рыбалки" делать. ;-D

Спасибо.



Спасибо: 0 
ПрофильЦитата Ответить





Пост 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


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 11.09.05
ссылка на сообщение  Отправлено: 27.07.06 11:52. Заголовок: Re:


Я вот столкнулся с такой трудностью при реализации алгоритма, если есть несколько БД с set relation, то при восстановлении исходного состояния БД по очереди в цикле, происходит смещение записей, относительно сохраненных значений, некоторых зависимых БД, т.к. в Clipper установка set relation действует только в активной БД, а в пассивных она не работает..., плюнул на это дело... если кто реализовал полностью алгоритм поделитесь!

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 8
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 27.07.06 13:06. Заголовок: вот


именно Relation я и опасаюсь... а они у меня используются...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 49
Зарегистрирован: 24.09.05
ссылка на сообщение  Отправлено: 16.08.06 18:28. Заголовок: Re:


Sergy пишет:

 цитата:
Вот какой вопрос у меня возник: в некоторых участках программы требуется сохранение состояния всех открытых таблиц (индексов, алиасов, relation, фильтров, RECNO() и тп) потом их полное восстановление. Реально ли это сделать или не заморачиваться ?



очень сложно, а в некоторых случаях (SIx) - АБСОЛЮТНО точное восстановление вообще невозможно. забей. отталкивайся от другого концепта - держи всегда файлы открытыми.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 99
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет