powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ. Что мы знаем про каунтеры (aka счетчики)
25 сообщений из 176, страница 1 из 8
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223663
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
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.
Function Cou() As Long

    Dim ws As Workspace, db As Database
    Dim rsCounter As Recordset

    On Error GoTo errCou
    Set ws = DBEngine( 0 )
    Set db = ws( 0 )
 1 
    ws.BeginTrans
 2 
    Set rsCounter = db.OpenRecordset( "select * from dbcCounter" )
 3 
    rsCounter.AddNew
    Cou = rsCounter!nCounter
    'Close without update!'
    rsCounter.Close
 4 
    ws.CommitTrans
 5 
    Exit Function

errCou:
    Select Case Erl
        Case  3 
            rsCounter.Close
            Set rsCounter = Nothing
            ws.Rollback
            DBEngine.Idle DB_FREELOCKS
            Resume  1 
        Case  2 ,  4 
            ws.Rollback
            DBEngine.Idle DB_FREELOCKS
            Resume  1 
        Case Else
            Resume Next
    End Select

End Function


Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины?

A1: Добавить в таблицу со счетчиком при помощи инсерта запись, в которой полю счетчика дается значение на 1 меньше, чем надо. Потом удалить эту запись. Способ работает только при условии, что этот счетчик этого значения еще не выдавал.

A2: Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223714
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно

а чего забоиться?
событие "до обновления" формы
с условием, что эта запись newrecord
и конфликтов не будет
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223723
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дык два юзера получат одинаковый DMax и один из них упадет на нарушение ключа.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223727
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понял как "два юзера получат одинаковый DMax"
я же тебе сказал как
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223731
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ну так двое одновременно же!

1. Первый посчитал DMax, получил 10.
2. Второй посчитал DMax, получил 10.
3. Первый добавил запись.
4. Второй попытался добавить запись и упал.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223734
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не будет, Саныч, конфликтов.
Но а если перестраховаться - можно (нужно?) обработку ошибки в форму вставить.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223737
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Где я ошибаюсь в 13:40?
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223744
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Хам Трамвайный и Виктор Сенин
Видимо считается, что от момента До_Обновления (при условии что новая запись) до собственно обновления промежуток времени маленький и никто не успеет помешать. Поставьте точки останова и убедитесь в обратном.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223841
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика.
Код: plaintext
1.
2.
3.
    rsCounter.AddNew
    Cou = rsCounter!nCounter
    'Close without update!'
    rsCounter.Close

Внимание - файл, в котором сидит эта таблица, запрещено сжимать.

А если изначально в табличке сделать одну запись, а потом делать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
    rsCounter.AddNew
    Cou = rsCounter!nCounter
    rsCounter.Update
    rsCounter.MoveFirst
    rsCounter.Delete
    rsCounter.Close

Тогда файл можно спокойно жать.

Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины?
Мажно еще где-нибудь хранить смещение, которое и прибавлять/отнимать от новых значений счетчика.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223855
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только учти, что между MoveFirst и Delete запись уже может быть удалена другим пользователем
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223860
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что? Пусть удалена (при этом другой пользователь создал новую запись с очередным значением). После этого все равно в таблице остается одна запись с максимальным значением счетчика.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223872
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что? Пусть удалена (при этом другой пользователь создал новую запись с очередным значением)
Которая в таблице и останется
Может, вообще не удалять? Подумаешь - база чуть-чуть расти будет. Не страшо.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223881
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Которая в таблице и останется
Ну да. Зато после этого файл можно сжимать/восстанавливать.
Может, вообще не удалять? Подумаешь - база чуть-чуть расти будет. Не страшо.
Но счетчик нужен для создания записи в другой таблице. А то что там создаем записи - тоже страшно? 4 байта в таблице-счетчике против N байт в таблице с данными. По-моему, действительно не страшно.

Кроме того, лично для меня еще вопрос: если в таблице постоянно живет одна запись (удаляемая и создаваемая заново), то будет ли эта таблица постоянно заставлять пухнуть весь файл.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223890
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> ...то будет ли эта таблица постоянно заставлять пухнуть весь файл.

Будет. Стирание ведь не освобождает места.

Короче, из альтернативных вариантов остается только вариант без стирания. :^)
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223897
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, из альтернативных вариантов остается только вариант без стирания. :^)
Нет, со стиранием лучше, имхо. Веть база нет-нет а и поломаться может. Тогда восстановление можно делать без головной боли. Да еще и поменьше на величину до 4x(rsCounter!nCounter-1) байт может стать.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223907
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, а можно вас попросить приме DMax'а, а еще лучше описать немного эту функцию. А то я ее что-то не совсем понял. Что она делает?
В аксесе выдается такой код: DMax («expr»; «domain»; «criteria»)
Че там надо подставлять?
Допустим «expr» - это поле по которому ищем максимум, а вот остальное что???
Что за критерий??? Или это должен быть критерий в котором ищем максимум? Т.е., допустим, максимальное кол-во расхода по 2-й кассе???
Ну и что такое домен вообще не всосал?
P.S. Сорри за глупый вопрос.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223912
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ЛП и Санычу
>Поставьте точки останова и убедитесь в обратном.

М.б. возможно, никто не спорит. Поэтому я и написал про перестраховку и обработку ошибок. Я как-тона форуме описывал свою ситуацию: у меня в случае ошибки прибавлется 1 к значению и снова пытаемся сохраниться и так 5 раз - потом выдаю сообщение (юзеров в базе не более 5 - поэтому цифра "5", и вообще надо же когда-нибудь остановиться :) )

А если нужно что-то дргоу: у того же Гетца описан очень хорошо данный вопрос. Ну очень хорошо. Предлагаю взять его пример и юзать далее. А силы сберечь для вопроса почему у меня не работает Left
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223919
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, по варианту ВС база не растет.
Если создавать и удалять запись, 50 000 итераций - выросла на 700 кб.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223949
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Нет, со стиранием лучше, имхо.

Тогда это стирание тоже надо обставить всякими прибамбасами на случай конфликта двух юзеров. Нафиг, нафиг.

> Веть база нет-нет а и поломаться может. Тогда восстановление можно делать без головной боли.

Если в базе только эта таблица, то для восстановления надо только создать ее заново и задать счетчику то значение, на котором он остановился.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223956
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда это стирание тоже надо обставить всякими прибамбасами на случай конфликта двух юзеров.

Да в том то и дело, что не надо ничего обставлять - само будет работать.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223957
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
То было 2 Geo. А теперь 2 Senin Viktor:

> Поэтому я и написал про перестраховку и обработку ошибок.

И я написал: Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно.

О чем мы спорим? :^)
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223958
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то для восстановления надо только создать ее заново и задать счетчику то значение, на котором он остановился.
Тогда надо делать прибамбасы, каждый раз запоминающие это самое значение счетчика.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223959
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Geo:

Когда два юзера стирают одну запись, то конфликтов не будет?
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223961
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Тогда надо делать прибамбасы, каждый раз запоминающие это самое значение счетчика.

ЗАЧЕМ???
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32223962
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой. :(
...
Рейтинг: 0 / 0
25 сообщений из 176, страница 1 из 8
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ. Что мы знаем про каунтеры (aka счетчики)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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