powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / .idx и DataSession
12 сообщений из 12, страница 1 из 1
.idx и DataSession
    #35224439
DinaF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одна таблица открывается в двух разных сессиях (DS1 и DS2). В DS1 для нее создается локальный индекс (idx) с выражением вида seek(…,cTmpAlias,…). Этот самый cTmpAlias не виден во второй сессии (DS2), поэтому попытка перевести таблицу в пессимистическую буферизацию выдает ошибку «Alias not found». Как открыть таблицу в DS2 без локального индекса, создаваемого в DS1? Как сделать этот индекс невидимым для DS2? Есть ли другой выход из этой ситуации?
...
Рейтинг: 0 / 0
.idx и DataSession
    #35224487
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индекс создается только если таблица открыта в монопольном режиме (EXCLUSIVE), поэтому в другой DataSession таблицу открыть невозможно.
Создавать индексы для рабочих таблиц в процессе работы - это ошибка проектирования.

Но если очень надо, то после создания индекса закрывать таблицу и открывать заново в сетевом режиме (SHARED)
...
Рейтинг: 0 / 0
.idx и DataSession
    #35228716
DinaF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TИндекс создается только если таблица открыта в монопольном режиме (EXCLUSIVE),
Попробуйте:
CREATE TABLE tablitsa (pole I)
USE tablitsa SHARED
INDEX ON pole TO c:\temp\ind
и увидите чудо!

Только мне это не поможет :(
...
Рейтинг: 0 / 0
.idx и DataSession
    #35228836
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DinaF Dima TИндекс создается только если таблица открыта в монопольном режиме (EXCLUSIVE),
Попробуйте:
CREATE TABLE tablitsa (pole I)
USE tablitsa SHARED
INDEX ON pole TO c:\temp\ind
и увидите чудо!

Только мне это не поможет :(
Странно конечно, но это даже хорошо что не поможет. Если бы такая конструкция работала, то стоит только во второй DS изменить таблицу как твой индекс перестанет ей соответствовать в первой.
Это неправильное решение изначально. Не могу понять зачем такое вообще может быть нужно.

Если это временная таблица - делай выборку в курсор (или создавай курсор и наполняй) и работай с курсором, а два одноименных курсора в разных DS допустимы.
Если нужен именно индекс - создай постоянный и им пользуйся.
...
Рейтинг: 0 / 0
.idx и DataSession
    #35229663
DinaF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TСтранно конечно, но это даже хорошо что не поможет. Если бы такая конструкция работала, то стоит только во второй DS изменить таблицу как твой индекс перестанет ей соответствовать в первой.
Это неправильное решение изначально. Не могу понять зачем такое вообще может быть нужно.

Очевидно все так и работает, и мне тоже это не нравится.

Dima TЕсли это временная таблица - делай выборку в курсор (или создавай курсор и наполняй) и работай с курсором, а два одноименных курсора в разных DS допустимы.
Если нужен именно индекс - создай постоянный и им пользуйся.
Таблица постоянная. Во второй DS индекс этот вообще не нужен, но все равно виден и все портит. Как избавиться от него? Удалить - так он же в первой DS нужен. Замкнутый круг получается.
...
Рейтинг: 0 / 0
.idx и DataSession
    #35229698
DinaFВо второй DS индекс этот вообще не нужен, но все равно виден и все портит. Как избавиться от него? Удалить - так он же в первой DS нужен. Замкнутый круг получается.
И чем он мешает даже если не нужен? Почему надо избавиться?
...
Рейтинг: 0 / 0
.idx и DataSession
    #35229989
DinaF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мешает тем, что выдает ошибку (см. мое первое сообшение)
...
Рейтинг: 0 / 0
.idx и DataSession
    #35231289
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DinaFТаблица постоянная. Во второй DS индекс этот вообще не нужен, но все равно виден и все портит. Как избавиться от него? Удалить - так он же в первой DS нужен. Замкнутый круг получается.
Переписать первую форму чтобы он и там был не нужен. Это ошибка разработчика, ее надо исправлять. Ничего замкнутого.

Есть только один общий совет как обойти ошибки проектирования - исправить эту ошибку переписав неправильно спроектированный код. Это в итоге получается дешевле, чем потом изобретать обходные пути. В итоге все-равно доработки зайдут в тупик и все-равно прийдется переписывать, только гораздо больше.

Философствовать дальше бесполезно. Хочешь советов как обойти - показывай код и описывай задачу которую дорабатываешь. По твоему первому посту понятно только что замена временного индекса на постоянный все решит, а почему нельзя заменить непонятно.
...
Рейтинг: 0 / 0
.idx и DataSession
    #35231300
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDX файл одной сесии не может мешать открытию таблицы в другой сесии. Иначе нельзя было ваще работать в многопользовательском режиме. Ищите ошибки в вашем индексном файле.

В DS1 для нее создается локальный индекс (idx) с выражением вида seek(…,cTmpAlias,…).
В смысле у вас в индексном выражении используется фунция Seek() причем по той же самой таблице?!!!! Аригинально.....

Давайте структуру таблицы, точное индексное выражение и что имено Вам нужн искать на самом деле
...
Рейтинг: 0 / 0
.idx и DataSession
    #35231597
DinaF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BurnВ смысле у вас в индексном выражении используется фунция Seek() причем по той же самой таблице?!!!! Аригинально.....

Дело именно в выражении seek, только cTmpAlias - другая, временная таблица (по этому ее и не видно в другой DS). Нужно все это для наложения сложных фильтров в первой DS, где просматривается таблица. Индекс формируется динамически и не всегда содержит выражение seek. Ошибка во второй DS возникает только при задании определенных параметров в форме поиска в первой DS (когда у индекса получается выражение с cTmpAlias).
cTmpAlias - выборка идентификаторов из основной таблицы содержащая только идентификаторы записей удовлетворяющие сложному условию фильтра. Т.е. фильтр содержит поля которых нет самой таблице (они есть в связанных с ней таблицах).
...
Рейтинг: 0 / 0
.idx и DataSession
    #35231734
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DinaF BurnВ смысле у вас в индексном выражении используется фунция Seek() причем по той же самой таблице?!!!! Аригинально.....

Дело именно в выражении seek, только cTmpAlias - другая, временная таблица (по этому ее и не видно в другой DS). Нужно все это для наложения сложных фильтров в первой DS, где просматривается таблица. Индекс формируется динамически и не всегда содержит выражение seek. Ошибка во второй DS возникает только при задании определенных параметров в форме поиска в первой DS (когда у индекса получается выражение с cTmpAlias).
cTmpAlias - выборка идентификаторов из основной таблицы содержащая только идентификаторы записей удовлетворяющие сложному условию фильтра. Т.е. фильтр содержит поля которых нет самой таблице (они есть в связанных с ней таблицах).
Опять общие фразы. Не хочешь детально описывать с кодом что у тебя там происходит, тогда сделай простой пример: отдельный проект, база из пары табличек, пару форм, выложи сюда с описанием что нажать чтобы ошибку увидеть. И как хочется чтобы работало.
...
Рейтинг: 0 / 0
.idx и DataSession
    #35232673
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно ничего не понятно.
Но похоже нужно иметь одну и туже таблицу открытую с разными индексами и фильтрам и т.п.
В этом случае разные датасесии ненужны - нкжно всего навсего открыть таблицу повторно в другой области. Для этого в команде USE есть модификатор AGAIN
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / .idx и DataSession
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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