Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / структурный индекс / 4 сообщений из 4, страница 1 из 1
23.03.2005, 11:14
    #32975591
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
структурный индекс
Есть дбф файл в базе данных с индексами по некоторым полям...

Есть проверка базы данных на корректность дбф файлов и индексов...
Если индекс не корректен, или по-каким либо причинам отсутствует *.cdx файл, то на use возникает ошибка.

В обработчике ошибок копируется с запаса этот файл (.сdx)...
Но есть один глюк...
При use .dbf файл отказывается от .cdx и говорит че у него нет индексных полей...
Соответственно в программе начинаются одни сбои...
Как это обойти???

И все те-же вопросы про иконку на форме и MS Agent-а
http://www.sql.ru/forum/actualthread.aspx?tid=168444
...
Рейтинг: 0 / 0
23.03.2005, 11:55
    #32975739
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
структурный индекс
IgorProgrammerПри use .dbf файл отказывается от .cdx и говорит че у него нет индексных полей...
Соответственно в программе начинаются одни сбои...
Как это обойти???
Не надо открывать таблицу в режиме EXCLUSIVE! Открывай с опцией SHARED.

Если это не помогает, то придется вручную выставлять 1 бит в 28 байте заголовка таблицы (первый байт имеет порядковый номер 0). Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
LOCAL lnFH,lcBait
lnFH = FOPEN("MyTable.dbf", 2 )
* Считываю содержимое  28  байта
=FSEEK(m.lnFH, 28 )
lcBait = FREAD(m.lnFH, 1 )
* Выставляю  1  в первом бите
lcBait = CHR(BITOR(ASC(m.lnBait), 1 ))
* Записываю обратно исправленное значение
=FSEEK(m.lnFH, 28 )
=FWRITE(m.lnFH,m.lcBait)
=FCLOSE(m.lnFH)

Разумеется, это всего-лишь схема. Здесь нужно еще куча дополнительных проверок.
...
Рейтинг: 0 / 0
23.03.2005, 12:31
    #32975869
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
структурный индекс
У меня и открывается shared...

Есть проблема...
База то находится на сервере...
При воходе пользователя идет проверка...
Если ошибка с индексом то просится запустить администратора...
Но индекса уже нет... и как понять что он там нужен...
А если другой пользователь запустит... то прога запуститься...
И начнет валится...
...
Рейтинг: 0 / 0
23.03.2005, 13:41
    #32976104
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
структурный индекс
Свободные таблицы что-ли? Тогда проверяй факт наличия файла с тем же именем, что и таблица, но с расширением CDX и проверяй факт использования структурного индексного файла

Код: plaintext
1.
2.
3.
4.
USE MyTable
IF USED("MyTable") AND FILE("MyTable.CDX") AND EMPTY(CDX( 1 ,"MyTable"))
* Таблица открыта, есть структурный индексный файл,
* но он не открыт вместе с таблицей
ENDIF

Хотя, все это "баловство". Когда полезут ошибки, пользователи и так поймут, что какие-то проблемы и требуется вмешательство администратора. А перехватить все возможные ошибки в момент открытия таблиц в принципе нереально, поскольку есть ряд команд автоматически открывающие таблицы, если это необходимо.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / структурный индекс / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]