powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проверить сумму полей на ленточной форме до апдейта
22 сообщений из 22, страница 1 из 1
Проверить сумму полей на ленточной форме до апдейта
    #39412518
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,
я в аксессе не очень от слова не очень, прошу не пинать, если путаюсь в терминологии.
В общем существует небольшое приложение - т.е. ленточная форма для обработки/добавления для ручного ввода разных тех.данных
Код товара - название -...- квота.
Квоту пользователь вбивает вручную, задача среди прочего состоит в том, чтобы проверить сумму квот для позиций. Если юзер введет квоту, которая доведет сумму квот по этой позиции до > 100, надо выдать сообщение об ошибке и откатить изменения.

Я наивно думал создать на форме скрытое поле с содержанием Сумма("квота"), и создавать ошибку, когда сумма превысит 100, но оно конечно так не работает.
можно это как-то по дзену решить? буду благодарен за ссылки
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412526
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Heisenberg,

проверять на событии BeforeUpdate, если не устраивает - отменять: Cansel = true
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412582
а так?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в конструкторе таблицы:
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412604
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Heisenberg,
гурД
проверять на событии BeforeUpdate, если не устраивает - отменять: Cansel = true
не работает к сожалению

авторв конструкторе таблицы:
у меня нет аксессовской таблицы, увы, это доступ к оракловской инстанции через passthrough ODBC

я пробовал прицепить на скрытое поле суммы ValidationRule, все равно вызывается только после апдейта
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412632
HeisenbergЕсли юзер введет квоту, которая доведет сумму квот по этой позиции до > 100, надо выдать сообщение об ошибке и откатить изменения.
Дополню совет гурД . Проверить можно так:
Код: vbnet
1.
TotalLimit = NZ(DSum("[квота]", "[Таблица-источник формы]", Условие),0) - NZ(Me![квота].OldValue,0) + NZ(Me![квота],0)


HeisenbergЕсли юзер введет квоту, которая доведет сумму квот по этой позиции до > 100, надо выдать сообщение об ошибке и откатить изменения. Если объясните про "сумму квот" - поможем с Условие -м.
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412652
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HeisenbergHeisenberg,
гурДпроверять на событии BeforeUpdate, если не устраивает - отменять: Cansel = true
не работает к сожалению
Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub квота_BeforeUpdate(Cancel As Integer)
 If <условие> Then
  квота.Undo
  Cancel = True
 End If
End Sub
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412655
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дополню Гурд: Вам толкуют о событии "до обновления" поля, а не записи (записи в таблице еще нет)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub ctl_BeforeUpdate(Cancel As Integer)
Dim mysum
mysum = DSum("ctl", "tbl")
If mysum + Me.ctl > 100 Then
MsgBox "число должно быть <=" & 100 - mysum
Me.Undo
Cancel = True
End If
End Sub
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412669
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku... (записи в таблице еще нет)...Кто сказал?
Совсем вроде не обязательно.Heisenbergленточная форма для обработки/добавления для ручного ввода
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412690
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев )Если объясните про "сумму квот" - поможем с Условие -м.

в общем есть оракловая таблица, к ней в аксессе прилеплена такая ленточная форма

"зоопарк номер 6 - список животных"

н зверь квота

1 - Слон - 25
2 - Бегемот - 25
3 - Крокодил - 40

тут юзер такой вводит

"4 - Жираф - 30"

и тянется к кнопке "сохранить животных".
самое позднее при нажатии кнопки требуется выдать сообщение об ошибке "общая квота в зоопарке сейчас превысит 100 (в сумме будет 120), попробуйте еще раз" и стереть запись про жирафа
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412715
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Item_Quote_BeforeUpdate(Cancel As Integer)
   Dim mySum As Integer
   mySum = DSum("Item_Quote", "tbl1")
   
   Debug.Print "mySum = " & mySum
   Debug.Print "Item_Quote_BeforeUpdate = " & Item_Quote.Value
   
   If mySum + Item_Quote.Value > 100 Then
      MsgBox "Item_Quote.Value > 100!"
      Cancel = True
      Me.Undo
   Else
       Debug.Print "ok"
   End If
   
End Sub


вот так на тестовой табличке работает, спасибо

теперь только понять, как мне из оракловой таблицы вытащить DSum для зоопарка номер 6?
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412722
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michellesdku... (записи в таблице еще нет)...Кто сказал?Не знаю кто сказал. Так она ж еще не сохранена-как она запишется в таблицу?
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412728
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а, все, понял, всем спасибо :)
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412737
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, не совсем разобрался.
как сообщить функции , что я ищу сумму квот именно для этого зоопарка?
я попробовал
Код: vbnet
1.
DSum("Item_Quote", "OracleTableAnimals", [ZOO_ID] = Me.Parent!ZOO_ID)



вижу правильное значение Me.Parent!ZOO_ID в дебаге, но DSum выдает сумму квот по всем зоопаркам
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412749
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku__Michelleпропущено...
Кто сказал?Не знаю кто сказал. Так она ж еще не сохранена-как она запишется в таблицу?Могут редактировать значение квоты в уже существующей записи.
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412800
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,
Редактировать сохраненные записи-за нахрена такая БД?
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412803
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

Да мало ли... А что такого?

Что написано пером, то не вырубишь топором?)))
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412804
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HeisenbergНе, не совсем разобрался.
как сообщить функции , что я ищу сумму квот именно для этого зоопарка?
я попробовал
Код: vbnet
1.
DSum("Item_Quote", "OracleTableAnimals", [ZOO_ID] = Me.Parent!ZOO_ID)



вижу правильное значение Me.Parent!ZOO_ID в дебаге, но DSum выдает сумму квот по всем зоопаркам
-третий аргумент функции Dsum-стинг и синтаксис должен быть таким: ..,"ZOO_ID=" & me.ZOO-ID). В HELPе все написано
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412823
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku__Michelle,
Редактировать сохраненные записи-за нахрена такая БД?
Записи постоянно и произвольно редактируются, главное чтобы сумма не превышала 100
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412824
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku-третий аргумент функции Dsum-стинг и синтаксис должен быть таким: ..,"ZOO_ID=" & me.ZOO-ID). В HELPе все написано
Спасибо, завтра попробую.
Пока временное решение нашел - скрытое поле с DSum (item_quote), с ним сравниваю, пока работает )
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412835
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HeisenbergЗаписи постоянно и произвольно редактируются, главное чтобы сумма не превышала 100Если Вас не интересует что было с жирафами до последнего редактирования-флаг Вам в руки (редактируя существующие записи Вы лишаетесь истории)
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39412878
Heisenberg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuHeisenbergЗаписи постоянно и произвольно редактируются, главное чтобы сумма не превышала 100Если Вас не интересует что было с жирафами до последнего редактирования-флаг Вам в руки (редактируя существующие записи Вы лишаетесь истории)
У нас имеется оракловский триггер на табличке, который записывает все апдейты и дилиты в историческую таблицу, в общем там вся бизнес-логика в оракле, эта форма - костыль для 2,5 маркетологов, которые знают вес жирафа )
...
Рейтинг: 0 / 0
Проверить сумму полей на ленточной форме до апдейта
    #39413343
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Heisenbergsdkuпропущено...
Если Вас не интересует что было с жирафами до последнего редактирования-флаг Вам в руки (редактируя существующие записи Вы лишаетесь истории)
У нас имеется оракловский триггер на табличке, который записывает все апдейты и дилиты в историческую таблицу, в общем там вся бизнес-логика в оракле, эта форма - костыль для 2,5 маркетологов, которые знают вес жирафа )
Так и напишите: там всего неск строчек будет. И логгируйте, где хотите и как хотите, хоть по емэйл..

Забыл вчера сказать. Если критично именно мнение не одного жирафа, и не все только его и ждут, а имеется некий конвенциальный, накопительный и т.п. порядок внесения в базу этих пропорций - см в сторону транзакций (есть в объектной модели Аксесса, есть в ADO...)
Смысл в том, что запросы\комманды, обёрнутые в транзакцию, либо исполняются все пакетно, либо идёт откат всех, если таким программным образом "не удалось договориться"...
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проверить сумму полей на ленточной форме до апдейта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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