|
|
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
Одна таблица открывается в двух разных сессиях (DS1 и DS2). В DS1 для нее создается локальный индекс (idx) с выражением вида seek(…,cTmpAlias,…). Этот самый cTmpAlias не виден во второй сессии (DS2), поэтому попытка перевести таблицу в пессимистическую буферизацию выдает ошибку «Alias not found». Как открыть таблицу в DS2 без локального индекса, создаваемого в DS1? Как сделать этот индекс невидимым для DS2? Есть ли другой выход из этой ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 14:05 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
Индекс создается только если таблица открыта в монопольном режиме (EXCLUSIVE), поэтому в другой DataSession таблицу открыть невозможно. Создавать индексы для рабочих таблиц в процессе работы - это ошибка проектирования. Но если очень надо, то после создания индекса закрывать таблицу и открывать заново в сетевом режиме (SHARED) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2008, 14:18 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
Dima TИндекс создается только если таблица открыта в монопольном режиме (EXCLUSIVE), Попробуйте: CREATE TABLE tablitsa (pole I) USE tablitsa SHARED INDEX ON pole TO c:\temp\ind и увидите чудо! Только мне это не поможет :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 07:28 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
DinaF Dima TИндекс создается только если таблица открыта в монопольном режиме (EXCLUSIVE), Попробуйте: CREATE TABLE tablitsa (pole I) USE tablitsa SHARED INDEX ON pole TO c:\temp\ind и увидите чудо! Только мне это не поможет :( Странно конечно, но это даже хорошо что не поможет. Если бы такая конструкция работала, то стоит только во второй DS изменить таблицу как твой индекс перестанет ей соответствовать в первой. Это неправильное решение изначально. Не могу понять зачем такое вообще может быть нужно. Если это временная таблица - делай выборку в курсор (или создавай курсор и наполняй) и работай с курсором, а два одноименных курсора в разных DS допустимы. Если нужен именно индекс - создай постоянный и им пользуйся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 09:13 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
Dima TСтранно конечно, но это даже хорошо что не поможет. Если бы такая конструкция работала, то стоит только во второй DS изменить таблицу как твой индекс перестанет ей соответствовать в первой. Это неправильное решение изначально. Не могу понять зачем такое вообще может быть нужно. Очевидно все так и работает, и мне тоже это не нравится. Dima TЕсли это временная таблица - делай выборку в курсор (или создавай курсор и наполняй) и работай с курсором, а два одноименных курсора в разных DS допустимы. Если нужен именно индекс - создай постоянный и им пользуйся. Таблица постоянная. Во второй DS индекс этот вообще не нужен, но все равно виден и все портит. Как избавиться от него? Удалить - так он же в первой DS нужен. Замкнутый круг получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 13:09 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
DinaFВо второй DS индекс этот вообще не нужен, но все равно виден и все портит. Как избавиться от него? Удалить - так он же в первой DS нужен. Замкнутый круг получается. И чем он мешает даже если не нужен? Почему надо избавиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 13:17 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
мешает тем, что выдает ошибку (см. мое первое сообшение) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 14:35 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
DinaFТаблица постоянная. Во второй DS индекс этот вообще не нужен, но все равно виден и все портит. Как избавиться от него? Удалить - так он же в первой DS нужен. Замкнутый круг получается. Переписать первую форму чтобы он и там был не нужен. Это ошибка разработчика, ее надо исправлять. Ничего замкнутого. Есть только один общий совет как обойти ошибки проектирования - исправить эту ошибку переписав неправильно спроектированный код. Это в итоге получается дешевле, чем потом изобретать обходные пути. В итоге все-равно доработки зайдут в тупик и все-равно прийдется переписывать, только гораздо больше. Философствовать дальше бесполезно. Хочешь советов как обойти - показывай код и описывай задачу которую дорабатываешь. По твоему первому посту понятно только что замена временного индекса на постоянный все решит, а почему нельзя заменить непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 21:23 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
IDX файл одной сесии не может мешать открытию таблицы в другой сесии. Иначе нельзя было ваще работать в многопользовательском режиме. Ищите ошибки в вашем индексном файле. В DS1 для нее создается локальный индекс (idx) с выражением вида seek(…,cTmpAlias,…). В смысле у вас в индексном выражении используется фунция Seek() причем по той же самой таблице?!!!! Аригинально..... Давайте структуру таблицы, точное индексное выражение и что имено Вам нужн искать на самом деле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2008, 21:30 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
BurnВ смысле у вас в индексном выражении используется фунция Seek() причем по той же самой таблице?!!!! Аригинально..... Дело именно в выражении seek, только cTmpAlias - другая, временная таблица (по этому ее и не видно в другой DS). Нужно все это для наложения сложных фильтров в первой DS, где просматривается таблица. Индекс формируется динамически и не всегда содержит выражение seek. Ошибка во второй DS возникает только при задании определенных параметров в форме поиска в первой DS (когда у индекса получается выражение с cTmpAlias). cTmpAlias - выборка идентификаторов из основной таблицы содержащая только идентификаторы записей удовлетворяющие сложному условию фильтра. Т.е. фильтр содержит поля которых нет самой таблице (они есть в связанных с ней таблицах). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 07:54 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
DinaF BurnВ смысле у вас в индексном выражении используется фунция Seek() причем по той же самой таблице?!!!! Аригинально..... Дело именно в выражении seek, только cTmpAlias - другая, временная таблица (по этому ее и не видно в другой DS). Нужно все это для наложения сложных фильтров в первой DS, где просматривается таблица. Индекс формируется динамически и не всегда содержит выражение seek. Ошибка во второй DS возникает только при задании определенных параметров в форме поиска в первой DS (когда у индекса получается выражение с cTmpAlias). cTmpAlias - выборка идентификаторов из основной таблицы содержащая только идентификаторы записей удовлетворяющие сложному условию фильтра. Т.е. фильтр содержит поля которых нет самой таблице (они есть в связанных с ней таблицах). Опять общие фразы. Не хочешь детально описывать с кодом что у тебя там происходит, тогда сделай простой пример: отдельный проект, база из пары табличек, пару форм, выложи сюда с описанием что нажать чтобы ошибку увидеть. И как хочется чтобы работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 09:22 |
|
||
|
.idx и DataSession
|
|||
|---|---|---|---|
|
#18+
Все равно ничего не понятно. Но похоже нужно иметь одну и туже таблицу открытую с разными индексами и фильтрам и т.п. В этом случае разные датасесии ненужны - нкжно всего навсего открыть таблицу повторно в другой области. Для этого в команде USE есть модификатор AGAIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2008, 13:04 |
|
||
|
|

start [/forum/topic.php?fid=41&gotonew=1&tid=1587941]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 343ms |

| 0 / 0 |
