powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DefaultValue
21 сообщений из 46, страница 2 из 2
DefaultValue
    #32160654
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вовремя обсуждения, то согласен. А если: "Меня не интересует как в других. Хочу только так и не иначе?". Можно, конечно, сменить клиента... Но спорить с ним, почему ему так удобнее...
...
Рейтинг: 0 / 0
DefaultValue
    #32160906
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу только так и не иначе - то уж никуда не денишся. Можно как предложил Senin Viktor. Только в сети могут возникнуть проблемы - один пользователь считал значение, второй считал, первый записал, второй увы...
...
Рейтинг: 0 / 0
DefaultValue
    #32160915
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И при наличии уникального индекса один из пользователей будет послан и нажмет кнопку еще раз. Ничего страшного.
Или делать счетчик. Только не забыть, что от необходимости создания уникального индекса счетчик не избавляет.
...
Рейтинг: 0 / 0
DefaultValue
    #32160941
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Витал
"Закономерность так и не уловил - иногда возвращает значение без +1 (устанавливал +2, тогда нормально), а иногда с +1. Тогда если было установлено +2 - значение было на 2 больше максимального.
"

Дык Dmax по табличке ищет :). Т.ч. результат означает, что на момент поисков данное ("предыдущее") не сохранено - и плюсует к последнему сохраненному... А вот почему там бывает несохраненка - скорей всего, ежели вы принудительно не сохранялись, то и "значение по умолчанию" в форму проставилось, но в запись (так и не записанную) не попало, надо думать...
...
Рейтинг: 0 / 0
DefaultValue
    #32160966
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все может быть, все может статься... Закономерности и я не уловил. Может это глюк ХР? Бывает при открытии формы (еще ничего не делал) - значение по умолчанию DMax(), хотя в свойствах DMax()+1. Меняю на DMax()+2. При открытии получаю по умолчанию DMax()+1. Выбираю другую запись в субформе "Действие" - получаю в субформе "Операции" по полю № значение по умолчанию DMax()+2. Правда не помню ставил Recalc по этому полю в проце Form_Current?!!
...
Рейтинг: 0 / 0
DefaultValue
    #32160980
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нежелание сохранять - "глюк ХП", то "все может статься". :)
...
Рейтинг: 0 / 0
DefaultValue
    #32160981
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 V. Motchulsky

>. Только в сети могут возникнуть проблемы - один пользователь считал значение, второй считал, первый записал, второй увы...

Легко решаются эти "сетевые" проблемы. В случае возникновения ошибки, прога сама добавляет еще +1 и опять пытается сохранить. И так далее. Правда вставил ограничение не более 5 попыток (что-то побоялся в случае какой-либо заподлянки уйти в непрерывный цикл)

З.Ы.
Правда у меня не DMax работает - слишком, гад, меленный для сети - а его аналог, на основанный на DAO - работае в несколько раз быстрее.

З.Ы.Ы.
Хотя я и предлагал заказчику не использовать самодельный счетчик, а пользоваться встроенным, он отказался, сославшися, что пользователи должны сами управлять номерами документов, только после одной неразберихи (два юзера напеременяли так, что потом неделю разбирались), отказался - да поздно - убрать уже не получится - слишком много завязано ( бум. документов) на этот суррагатный счетчик. Заменить-то можно, я даже готов - только им почему-то моя цена не понравилась . так и живут...

Мораль: сами придумайте...
...
Рейтинг: 0 / 0
DefaultValue
    #32160996
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assa
Если нежелание сохранять - "глюк ХП", то "все может статься". :)

Что сохранять??? Еще ничего нового не вводил!!!
...
Рейтинг: 0 / 0
DefaultValue
    #32161010
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Витал
не думаю, что Recalc сохраняет запись...
...
Рейтинг: 0 / 0
DefaultValue
    #32161018
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин, развели
разговор
на целый бор
dmax ставьте не
на значение по умолчанию
а на "до обновления" формы
(причем событие должно
срабатывать тока
для новой записи)
вот тогда она
действительно вернет
последнее
даже если одновременно
2 юзверя будут
вводить новую строку
давно уже обсуждавшаяся
тема
всплывает через
какое-то время
с завидным постоянством
...
Рейтинг: 0 / 0
DefaultValue
    #32161029
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Сенин Виктор
Я тоже счетчики не люблю. Слишком уж они криво в аксесе реализованы.

2 Зам Трамвайный
И с какой же стати на событии до обновления гарантировано вернет разные значения для двух юзеров? Те же яйца и получатся - два юзера одновременно выполнят один и тот же запрос, получат одинаковые значения и один обломается. Другое дело что вероятность этого уменьшается, т.к. длительность глюкоопасного куска мала.
...
Рейтинг: 0 / 0
DefaultValue
    #32161046
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Хаму трамвайному
"Ударим трамваем по бездорожью!!!" Если тема все время всплывает "...с завидным постоянством" значит она ... то, что не тонет... в молоке и завидовать ей не стоит. Совет про BeforeUpdate с удовольствием принимается. Так что просьба хамить дальше, больше, круче и чаще.

>assa
Для синхронизации субформ на событие Current формы подвешена процедурка SubForm.Requery, а Recalc - как сейчас думаю мог бы помочь (или не мог бы) обновить значение по умолчанию (пересчитать) в поле по аналогии со списками. И вообще-то не блокировал я сохранение записи при переходе к следующей.
...
Рейтинг: 0 / 0
DefaultValue
    #32161199
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему тут две проблемы
1 если использовать Dmax (mdb, база ~20-50m, слабые клиенты fsb=66Mz)
то есть вероятность что два клиента начнут искать максимум с небольшим промежутком времени и не известно который из них наудет первым и успеет записать измененный номер первым. и запишет новый и попадет ли новый в поиск другого. случаи редкие тно в практике встречались при 2 клиентах примерно раз в полгода при ~20 записях в день на двоих.
для бухгалтерии это сами понимаете...
2 пусть будет Dmax - отработал нормальна. первый клиент увеличил номер.
к нему (к ней ) приблизил() особь противоположного пола минут на 5. разговор за жизнь. в это время второй клиент ищет мах и находит такой-же номер увеличивает и бысто записывает. потом записывает 1 клиент.
опять 2 одинаковых.

надо искать бысто и сразу производить запись, что бы "застолбить новый номер" , а потом редактировать остальные поля в этой записи. а на время поиска мах и его записи блокировать табл.
...
Рейтинг: 0 / 0
DefaultValue
    #32161209
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Для тех, кто не против счетчиков в принципе, а только против поля типа счетчик в данной таблице, - предлагаю вашему вниманию:

1. Заводим таблицу с одним полем типа счетчик и без записей, назовем ее Cou. Ее надо поместить в отдельном mdb и никогда его не сжимать (а его размер увеличиваться и не будет).

2. В той таблице, которую мы заполняем, даем полю значение по умолчанию MyCou() и запираем его от редактирования.

3. И вот сама функция:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Function MyCou() As Long
With CurrentDB.OpenRecordset( "Cou" )
    .AddNew
    MyCou = .Fields( 0 )
    ' главное, что тут никакого Update не нужно
    .Close
End With
End Function
...
Рейтинг: 0 / 0
DefaultValue
    #32161214
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Владимир Саныч
механизм вот этого
' главное, что тут никакого Update не нужно
.Close
почему? поподробнее плииззз.
...
Рейтинг: 0 / 0
DefaultValue
    #32161219
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Механизм следующий: при каждом AddNew увеличивается на единицу то значение, которое будет возвращено, однако благодаря отсутствию Update размер таблицы не растет. А файл запрещено сжимать потому, что при сжатии это очередное готовое к выдаче значение счетчика обнулится.
...
Рейтинг: 0 / 0
DefaultValue
    #32161237
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, мороки в этих MDB, в ADP все проще. Все равно как лучь света в темном царстве.
...
Рейтинг: 0 / 0
DefaultValue
    #32162196
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V. Motchulsky
ну раз сказал....
так предложи вариант. все знют - проще...
а раз начал, так скажи почему проще.
раз разговор идет - значит грабли еще не убрали...
...
Рейтинг: 0 / 0
DefaultValue
    #32162244
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В ADP написал процедурку которая ведет счетчики и вызывай когда надо, где то я ее уже писал. Если надо еще раз напишу. Только тут разговор про ADP не идет.
...
Рейтинг: 0 / 0
DefaultValue
    #32162380
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2V. Motchulsky
ADP not ADP
все равно все начинают косить глаза в сторону ADP
так что выкладывай (не скромничай )
...
Рейтинг: 0 / 0
DefaultValue
    #32162571
V. Motchulsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну тут нефиг скромничать, тут не я придумал, из сайта М$
ALTER proc GetNextIdentity @ForTable sysname, @Value int OUTPUT
AS
set nocount on
begin tran
/* if this is the first value generated for this table, start with zero */
if not exists (select * from IdentityTable where ForTable = @ForTable)
insert IdentityTable (ForTable, Value) values (@ForTable, 0)
/* update must be before select to issue a lock and prevent duplicates */
update IdentityTable
set Value = Value + 1
where ForTable = @ForTable
select @Value = Value from IdentityTable
where ForTable = @ForTable
commit tran
return @value
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DefaultValue
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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