Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с CommitTrans... / 10 сообщений из 10, страница 1 из 1
15.10.2003, 21:44
    #32294666
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
Тут такое дело...
Необходимо было сделать поле-номер, альтернативу счетчику, но с возможностью правки. Т.е. при открытии некой формы дефаултом определенному полю давалось макс.значение по таблице. Но: Если до момента сохранения этой записи этим пользователем кто-то другой захочет ввести новую запись и откроет эту же форму у себя, макс.значение будет таким же как у пользователя 1.
Поэтому было реализовано следующее:
создана системная таблица, в кот. помещалась инфа о том, кто/что делает (например вводит новую запись), а остальным давался отлуп на это время.

Так вот: самое интересное, что при открытии вышеозначенной формы какбы первым пользователем (проверяется процедурой) производится запись в сист.таблицу, НО! Эта запись почему-то не сразу оказывается записаной физически! Примечание: клиентская часть (интерфейс - линки) + серверная (таблицы), все .mdb.
Пытался через CommitTrans с параметром dbFlushOSCacheWrites - ругается, не знает такой. (хотя в Хэлпе есть...). Я это к тому, что видимо в буфере, зараза, сидит, и не сразу на диск сбрасывается...

А проблема в том, что другой пользователь, даже после "регистрации" первого в теч. 1-2 сек. может тоже какбы "зарегистрироваться", не найдя физически в таблице отметку первого...

Как выйти мне из этой коллизии?
Помогите советом, пожалуйста!
Борис
...
Рейтинг: 0 / 0
15.10.2003, 22:18
    #32294673
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
dbFlushOSCacheWrites тебе не помогла даже если бы работала.\r
Смотри в недописаный пока еще фак. Там есть пример из Гетца как идентификаторы раздавать в многопользовательских системах.
...
Рейтинг: 0 / 0
15.10.2003, 22:25
    #32294675
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
1) Почему?
2) Так какой же вариант из предложенных выбрать? Гетца?
...
Рейтинг: 0 / 0
15.10.2003, 22:25
    #32294676
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
Честно скажу, с такой проблемой давно не встречался. А в акцессе стараюсь ее обходить, например, теми же счетчиками.

Но, кажется, в акцессе должно бы заработать так: открываем служебную таблицу (говорю про мдб), например, тем же openRecordset, или иначе, насильно заставляя сделать Refresh ( Метод Refresh немедленно обновляет записи в базовом источнике данных указанной формы в режиме формы или в режиме таблицы в соответствии с изменениями данных, внесенных текущим и другими пользователями в сети. - из справки), и читаем из нее новый значение твоего счетчика.
Причем счетчик в простейшем случае (не зря же он так сделан в самом акцессе) не должен обращать внимание на отмены и пр. ерундистику. Внесены изменения =(максимальное значение из имеющихся или "я") +1. Чем больше хочешь, тем больше фрикций надо отслеживать.
...
Рейтинг: 0 / 0
15.10.2003, 22:26
    #32294677
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
Ой, пока размечтался, забыл про фак...
...
Рейтинг: 0 / 0
15.10.2003, 22:42
    #32294681
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
Да нет, ну фак, фак... Среди предложенных решений отметил для себя 2: Гетца и Alter... Последний не понял...
А суть проблемы в следующем:
1) Открывается форма 1 пользователем;
2) Присваивается значение опред.полю (ака счетчик) = максимому по таблице (OnLoadForm);
3) Заполняются другие поля 1 пользователем;
а в это время... ;)
4) 2 пользователь открывает у себя эту же форму;
5) получает максимум по таблице - такой же как и 1, т.к. 1 еще не сохранил запись в саму таблицу и максимум, даже по встроенному счетчику, будет такой же...
6) конфликт...

Вот какие были у меня соображения...
...
Рейтинг: 0 / 0
15.10.2003, 22:43
    #32294682
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
2 borisb
Почему? Потому что
1. 1-й пользователь проверяет системную таблицу - видит что никто не добавляет новых записей
2. 2-й пользователь проверяет системную таблицу - видит что никто не добавляет новых записей
3. 1-й пользователь регистрится в системной таблице и начинает добавлять (высчитывает новый идентификатор)
4. 2-й пользователь регистрится в системной таблице и начинает добавлять. Высчитывает идентификатор - получает то же самое что и 1-й пользователь в п.3
Проглючит даже если все моментально записывается куда нужно.

Надо где-то что-то блокировать. Где и что - решай сам, если Гетцевый пример по каким-либо причинам не подходит.
...
Рейтинг: 0 / 0
15.10.2003, 22:49
    #32294686
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
Слегка апаздал
borisb писал:6) конфликт...
Ну и
7) Подсчитал новое значение идентификатора
8) Подставил новое значение идентификатора
9) Попытался опять сохранить. И так хоть до посинения.
...
Рейтинг: 0 / 0
15.10.2003, 22:59
    #32294690
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
Подскажите тогда как/где использовать Гетцовские ф-ции:
adhAssignID, adhGetNextAutoNumber... Там в комментах типа на ДоВставки надоть инструкцию вставлять... Не врубился пока, как это чудо работает ;). У меня есть:
1) поле Long, максимум по кот. мне и нужно вычислять;
2) форма, содержащая это самое поле. На Загрузку этой формы и поставлено у меня вычисление максимума и +1...

Как задействовать выщеописанные ф-ции?
...
Рейтинг: 0 / 0
15.10.2003, 23:02
    #32294695
borisb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с CommitTrans...
И что там за "Ch02Auto.Mdb"? Какова ее судьба/задачи?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с CommitTrans... / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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