|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Q: Как создать свой счетчик (чтобы поле было не типа счетчик)? A1: Nz(DMax(...),0)+1 Так можно нумеровать записи даже внутри группы, а не только насквозь через всю таблицу. Для этого надо правильно задать параметры DMax. Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. A2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Внимание - файл, в котором сидит эта таблица, запрещено сжимать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? A1: Добавить в таблицу со счетчиком при помощи инсерта запись, в которой полю счетчика дается значение на 1 меньше, чем надо. Потом удалить эту запись. Способ работает только при условии, что этот счетчик этого значения еще не выдавал. A2: Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:12 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно а чего забоиться? событие "до обновления" формы с условием, что эта запись newrecord и конфликтов не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:33 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Дык два юзера получат одинаковый DMax и один из них упадет на нарушение ключа. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:35 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
не понял как "два юзера получат одинаковый DMax" я же тебе сказал как ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:37 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну так двое одновременно же! 1. Первый посчитал DMax, получил 10. 2. Второй посчитал DMax, получил 10. 3. Первый добавил запись. 4. Второй попытался добавить запись и упал. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:40 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Не будет, Саныч, конфликтов. Но а если перестраховаться - можно (нужно?) обработку ошибки в форму вставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:42 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Где я ошибаюсь в 13:40? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:42 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Хам Трамвайный и Виктор Сенин Видимо считается, что от момента До_Обновления (при условии что новая запись) до собственно обновления промежуток времени маленький и никто не успеет помешать. Поставьте точки останова и убедитесь в обратном. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:46 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
A2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Код: plaintext 1. 2. 3.
Внимание - файл, в котором сидит эта таблица, запрещено сжимать. А если изначально в табличке сделать одну запись, а потом делать так: Код: plaintext 1. 2. 3. 4. 5. 6.
Тогда файл можно спокойно жать. Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? Мажно еще где-нибудь хранить смещение, которое и прибавлять/отнимать от новых значений счетчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:30 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Только учти, что между MoveFirst и Delete запись уже может быть удалена другим пользователем ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:36 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну и что? Пусть удалена (при этом другой пользователь создал новую запись с очередным значением). После этого все равно в таблице остается одна запись с максимальным значением счетчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:38 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну и что? Пусть удалена (при этом другой пользователь создал новую запись с очередным значением) Которая в таблице и останется Может, вообще не удалять? Подумаешь - база чуть-чуть расти будет. Не страшо. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:45 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Которая в таблице и останется Ну да. Зато после этого файл можно сжимать/восстанавливать. Может, вообще не удалять? Подумаешь - база чуть-чуть расти будет. Не страшо. Но счетчик нужен для создания записи в другой таблице. А то что там создаем записи - тоже страшно? 4 байта в таблице-счетчике против N байт в таблице с данными. По-моему, действительно не страшно. Кроме того, лично для меня еще вопрос: если в таблице постоянно живет одна запись (удаляемая и создаваемая заново), то будет ли эта таблица постоянно заставлять пухнуть весь файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:50 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
> ...то будет ли эта таблица постоянно заставлять пухнуть весь файл. Будет. Стирание ведь не освобождает места. Короче, из альтернативных вариантов остается только вариант без стирания. :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:53 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Короче, из альтернативных вариантов остается только вариант без стирания. :^) Нет, со стиранием лучше, имхо. Веть база нет-нет а и поломаться может. Тогда восстановление можно делать без головной боли. Да еще и поменьше на величину до 4x(rsCounter!nCounter-1) байт может стать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:57 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ребята, а можно вас попросить приме DMax'а, а еще лучше описать немного эту функцию. А то я ее что-то не совсем понял. Что она делает? В аксесе выдается такой код: DMax («expr»; «domain»; «criteria») Че там надо подставлять? Допустим «expr» - это поле по которому ищем максимум, а вот остальное что??? Что за критерий??? Или это должен быть критерий в котором ищем максимум? Т.е., допустим, максимальное кол-во расхода по 2-й кассе??? Ну и что такое домен вообще не всосал? P.S. Сорри за глупый вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:03 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2ЛП и Санычу >Поставьте точки останова и убедитесь в обратном. М.б. возможно, никто не спорит. Поэтому я и написал про перестраховку и обработку ошибок. Я как-тона форуме описывал свою ситуацию: у меня в случае ошибки прибавлется 1 к значению и снова пытаемся сохраниться и так 5 раз - потом выдаю сообщение (юзеров в базе не более 5 - поэтому цифра "5", и вообще надо же когда-нибудь остановиться :) ) А если нужно что-то дргоу: у того же Гетца описан очень хорошо данный вопрос. Ну очень хорошо. Предлагаю взять его пример и юзать далее. А силы сберечь для вопроса почему у меня не работает Left ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:06 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Действительно, по варианту ВС база не растет. Если создавать и удалять запись, 50 000 итераций - выросла на 700 кб. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:08 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
> Нет, со стиранием лучше, имхо. Тогда это стирание тоже надо обставить всякими прибамбасами на случай конфликта двух юзеров. Нафиг, нафиг. > Веть база нет-нет а и поломаться может. Тогда восстановление можно делать без головной боли. Если в базе только эта таблица, то для восстановления надо только создать ее заново и задать счетчику то значение, на котором он остановился. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:20 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Тогда это стирание тоже надо обставить всякими прибамбасами на случай конфликта двух юзеров. Да в том то и дело, что не надо ничего обставлять - само будет работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:21 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
То было 2 Geo. А теперь 2 Senin Viktor: > Поэтому я и написал про перестраховку и обработку ошибок. И я написал: Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. О чем мы спорим? :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:22 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
то для восстановления надо только создать ее заново и задать счетчику то значение, на котором он остановился. Тогда надо делать прибамбасы, каждый раз запоминающие это самое значение счетчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:22 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Geo: Когда два юзера стирают одну запись, то конфликтов не будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:23 |
|
|
start [/forum/topic.php?fid=45&tid=1654065]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
117ms |
get tp. blocked users: |
2ms |
others: | 253ms |
total: | 453ms |
0 / 0 |