Онлайн кредиты займы Казахстан онлайн кредиты усть-каманеногорск кредиты онлайн алматы взять онлайн займ в Казахстане гта5 играть на компьютере Pole Dance алматы играть онлайн форсаж 8 pokemon go играть вот ссылка гороскоп совместимости любовный гороскоп на 2017 рак девушка сексуальный гороскоп он телец она рыбы гороскопы близнецов любовный одиночные любовный любовный гороскоп гороскоп совместимости совместимость знаков в любви любовный гороскоп для рыб на сегодня и на завтра любовный гороскоп знака водолей гороскоп совместимости парень козерог девушка весы гороскоп совместимость гороскоп на месяц любовный рак основываясь на этих данных гороскоп женщина рыба мужчина весы совместимость гороскоп совместимости смотрите подробнее гороскоп на эту неделю стрелец любовный гороскоп дева любовный на сегодня и завтра гороскоп любви весы на завтра вот ссылка сексуальный гороскоп девы и овна гороскоп на совместимость телец и рыбы рак на сегодня гороскоп любовь гороскоп весы гороскоп совместимости для рыб на 2017 гороскоп семейный и любовный на сегодня гороскоп рак любовный совместимость по гороскопу женщина телец мужчина рак совместимость гороскоп секс гороскоп совместимости гороскоп телец мужчина женщина скорпион совместимость гороскоп любовный гороскоп любовный узнать больше перейти гороскоп совместимости любовный гороскоп двух львов гороскоп на неделю телец любовный гороскоп стрелец женщина и весы мужчина совместимость в браке гороскоп совместимости весы жен овен муж гороскоп совместимости сексуальный гороскоп совместимости гороскоп сегодня совместимость гороскопу источник статьи гороскоп козы ссылка на страницу гороскоп весы и лев любовный гороскоп совместимость совместимость по гороскопу рыба и дева гороскоп для женщины рак на сегодня любовь читать больше гороскоп пифагора совместимости знаков зодиака совместимость овен и лев по гороскопу подробнее на этой странице гороскоп гороскоп сексуальный любовный гороскоп ссылка совместимость свиньи и петуха по восточному гороскопу гороскоп совместимости гороскоп совместимости гороскоп на совместимость женщина телец любовный гороскоп гороскоп дева совместимость гороскопов лев скорпион гороскоп гороскоп гороскоп совместимости рыба тигр любовный гороскоп женщина козерог 2017 любовный гороскоп козерог на сегодня женщина любовный гороскоп для девы на сегодня и завтра гороскоп стрелец гороскоп на тельца на совместимость гороскоп на сегодня дева на оракул любовный гороскоп совместимости по знакам зодиака овен и водолей
Rambler's Top100
Российский фонд помощи
Навигация
Главная
MS ACCESS
VB
ASP
PHP
Наши друзья
Поиск
Форум
Лента новостей
Новый сайт

Online
Сейчас на сайте находятся:
1 гость
Рассылки Subscribe.Ru
Работа с MS Access
Подписаться письмом
Реклама на сайте
 
Главная arrow MS ACCESS arrow Советы для пользователей. Вычисляемые поля
Советы для пользователей. Вычисляемые поля Печать E-mail
Автор Sator Arepo   
28.11.2011 г.

Автор: Allen Browne, ноябрь 2003 г. Обновление апрель 2010 г.

Перевод с английского Александр Артамонов, октябрь 2011 г.

Оригинал http://allenbrowne.com/casu-14.html

Другие переводы: http://alx-artamonov.narod2.ru

 

Как заставить Аксесс хранить результат вычислений?

Например, если у вас есть поля Количество и ЦенаЗаЕдиницу, как заставить Аксесс записать Количество * ЦенаЗаЕдиницу в поле Стоимость?

Лучший ответ: "Не делайте этого!"

Место вычисляемых полей ― в запросах, а не в таблицах.

 

Вычисляемые столбцы являются необъемлемой частью электронных таблиц типа Excel и ему подобных, но им не место в таблице базы данных. Никогда не храните значение, которое зависит от других полей: это базовое правило нормализации. Нарушьте это правило ― и сразу появится забота, как поддерживать корректность вычисления во всех возможных ситуациях.

Спросите себя: "Если в этом поле окажется значение, отличное от вычисленного, будет ли это ошибкой?" Если ответ «Да», вам не стоит заводить это поле. Если разница будет нести определенный смысл, тогда вам это поле действительно нужно.

Итак, как же получить вычисленное поле, если его нельзя хранить в таблице? Используйте запрос:

  1. Создайте запрос, основанный на этой таблице.
  2. Запишите выражение в строке конструктора запроса:
        Стоимость: [Количество] * [ЦенаЗаЕдиницу]

Это создаст поле с именем Стоимость. Любая форма или отчет, основанные на этом запросе, воспримут это вычисленное поле как любое другое, так что вы легко сможете просуммировать результат. Это просто, эффективно и надежно.

Ну... Почти надежно. Остается вероятность неверной интерпретации вычисляемых полей.

 

Вы все еще хотите хранить вычисляемые поля?

 

Есть обстоятельства, когда хранение вычисленного результата имеет смысл ― типичный случай, когда нужна возможность иногда хранить отличное от вычисленного значение.

Скажем, плата за монтаж составляет дополнительные 10%, но чтобы выиграть тендер вы хотите отменить эту плату. Вычисляемое поле не сработает. В этом случае вполне разумно иметь запись с платой 0% вместо 10%, так что вам придется хранить это как поле в таблице.

Чтобы получить это, используйте событие AfterUpdate контрола на вашей форме, чтобы автоматически посчитать плату:

  1. Выставьте значение свойства AfterUpdate текстового поля Количество на [Обработка события].
  2. Нажмите кнопку построителя (...). Аксесс откроет окно редактора кода
  3. Введите эту строку между строками Private Sub... и End Sub:
  4. Private Sub Количество_AfterUpdate()
           Me.Плата = Round(Me.Количество * Me.ЦенаЗаЕдиницу * 0.1, 2)
       End Sub
  5. Установите свойство After Update текстового поля ЦенаЗаЕдиницу на [Обработка события], и нажмите кнопку построителя.
  6. Введите следующую строчку:
    Private Sub ЦенаЗаЕдиницу_AfterUpdate()
         Call Количество_AfterUpdate
       End Sub

Теперь, каждый раз, когда меняется Количество или ЦенаЗаЕдиницу, Аксесс автоматически пересчитает новую плату, но пользователь может перезаписать вычисление и ввести другое число, если потребуется.

Если у вас возник вопрос, как бы помочь пользователю с вычислением с помощью описанного приема, см. Enter text in calculated controls.

 

А как насчет вычисляемых полей в Аксессе 2010?

 

Аксесс 2010 позволяет создать вычисляемое поле в таблице вот таким образом:

 

  

Просто выберите «Вычисляемый» из типов данных и ниже появится строка «Выражение». Впишите выражение. Аксесс будет пересчитывать его каждый раз, когда вы вводите запись.

Это может показаться простым решением, но оно создает больше проблем, чем решает. Вы быстро столкнетесь с тем, что выражения весьма ограничены. Также это сделает базу данных бесполезной для тех, кто будет использовать ее в Аксессе 2007. Вместо того, чтобы прочитать данные, они увидят вот такое сообщение:

Диалоговое сообщение о несовместимости

 

Хуже того, результаты вычислений ненадежны. Если вы поменяете формулу выражения после того, как данные были внесены в таблицу, существующие результаты не будут правильно обновлены (хотя для новых записей редактирование обновит результаты). Так что на результаты вычислений полагаться нельзя. Сжатие/восстановление не производит пересчет, так что нет очевидного пути исправить неверные результаты.

 

Поскольку нельзя проиндексировать вычисляемые поля, вы не получите выигрыша в производительности, используя их. Вы нарушите фундаментальное правило нормализации, не получив ничего взамен. Мы рекомендуем использовать запросы для вычисляемых полей ― как и в предыдущих версиях.


Просмотров: 10084

  Коментарии (1)
 1 Написал(а) Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script , в 00:09 05.12.2011
Haahhhaa. I'm not too bright today. Great post!

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code

 
Реклама на сайте
HiProg.com - Технологии программирования
Rambler's Top100 TopList