Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание формулы использующую логические поля, Как сделать 
:(
    Опции темы
Dr1Pepper
Дата 19.3.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



Привет. У меня такой вопрос: Существует таблица в ней поля "Срочность", "ВО", "ДНД", "Цена" и "Итого"

Так вот мне нужно чтобы в поле "Итого" получалось выражение: "Итого"=  ("Срочность" + "ВО" + "ДНД" + 1) * "Цена" 
Но есть условие, что "Срочность", "ВО", "ДНД" - это логический тип данных. И любое из этих полей может быть включено (стоять галочка), а может и выключено. 

"Срочность", "ВО", "ДНД" - этим полям соответствуют неизменные значения. Например: "Срочность" = 0,2; "ВО" = 0,1; "ДНД" = 0,3. В итоге должно считать так:
1600 =  (0,2 + 0,1 + 0,3 + 1) * 1000

Заранее благодарен.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  BD.rar 8,85 Kb
PM MAIL   Вверх
ТоляМБА
Дата 19.3.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Цитата(Dr1Pepper @  19.3.2009,  21:32 Найти цитируемый пост)
этим полям соответствуют неизменные значения
Неизменные значения в программировании называются константами, и нет необходимости вносить их в поля баз данных.

Если существует условие в запросе, то кури функцию IIF
Код
SELECT IIf(Field1="0",true,false) AS Выражение1
FROM Table1;


Добавлено через 14 минут и 27 секунд
Цитата(ТоляМБА @  19.3.2009,  22:14 Найти цитируемый пост)
в поля баз данных.
Сории конечно - в поля ТАБЛИЦ баз данных, ну или в таблицы баз данных.
PM   Вверх
bopoha
Дата 19.3.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Dr1Pepper, лучше создайте функцию, и там все посчитайте.
PM MAIL WWW ICQ Skype GTalk   Вверх
Dr1Pepper
Дата 20.3.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



Цитата

Если существует условие в запросе, то кури функцию IIF


Да, но как быть если мне нужно, что бы результат этого выражения сохранялся и в последующей работе мне прийдётся обращаться именно к результату? Да и запроса у меня нет.
PM MAIL   Вверх
bopoha
Дата 20.3.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(Dr1Pepper @  20.3.2009,  18:26 Найти цитируемый пост)
результат этого выражения сохранялся

Куда?
PM MAIL WWW ICQ Skype GTalk   Вверх
Dr1Pepper
Дата 20.3.2009, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



Цитата

Цитата(Dr1Pepper @  20.3.2009,  18:26 )
результат этого выражения сохранялся


Куда?


В таблицу, в поле "Итого"
PM MAIL   Вверх
Akina
Дата 20.3.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Dr1Pepper @  20.3.2009,  19:26 Найти цитируемый пост)
мне нужно, что бы результат этого выражения сохранялся 

Цитата(Dr1Pepper @  20.3.2009,  20:08 Найти цитируемый пост)
В таблицу, в поле "Итого" 

Хранение в таблицах вычисляемых данных называется "переопределённые данные" и является потенциальным источником ошибок. Не советую.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Dr1Pepper
Дата 20.3.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



Цитата

Хранение в таблицах вычисляемых данных называется "переопределённые данные" и является потенциальным источником ошибок. Не советую.



Ну, а если всё же нужно так сделать, не смотря на "потенциальный источник ошибок". Есть предложения?
PM MAIL   Вверх
ТоляМБА
Дата 20.3.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Dr1Pepper, молодой человек, если Вы не слушаете советов, которые Вам дают на Ваши вопросы, смысл задавать вопросы?
PM   Вверх
Akina
Дата 20.3.2009, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Дайте серьёзное обоснование такой надобности, перевешивающее потенциальное рассогласование данных - тогда будет разговор. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Dr1Pepper
Дата 20.3.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



Цитата(ТоляМБА @ 20.3.2009,  20:37)
Dr1Pepper, молодой человек, если Вы не слушаете советов, которые Вам дают на Ваши вопросы, смысл задавать вопросы?

А помоему Вы заблуждаетесь, говоря о том, что я не слушаю. Просто удовлетворительного ответа я пока не увидел, хотя то что было написано выше весьма информативно. 
Вот попробую объяснить систуацию по другому: К примеру, другая БД будет использовать поле "Итого" (из нашей БД) - скажем для отчётности. Другими словами - обязательно нужно, чтобы выполнялся просчет. 
Выше было написано, что:
Цитата

Хранение в таблицах вычисляемых данных называется "переопределённые данные" и является потенциальным источником ошибок. Не советую.

Но при этом ни кто не говорит, что это невозможно. 
Я допускаю, что могут вылезти какие-нибуть ошибки (обратите внимание я слушаю что говорят другие), но тем не менее ни кто не дал ответа на поставленный вопрос. Поэтому смысл задовать вопросы всёже есть...

Добавлено через 6 минут и 7 секунд
Цитата(Akina @ 20.3.2009,  22:05)
Дайте серьёзное обоснование такой надобности, перевешивающее потенциальное рассогласование данных - тогда будет разговор.

Цитата

К примеру, другая БД будет использовать поле "Итого" (из нашей БД) - скажем для отчётности. Другими словами - обязательно нужно, чтобы выполнялся просчет. 

PM MAIL   Вверх
Akina
Дата 20.3.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Dr1Pepper @  20.3.2009,  23:20 Найти цитируемый пост)
К примеру, другая БД будет использовать поле "Итого" (из нашей БД) - скажем для отчётности. 

Если одна БД может посчитать итоги на основе исходных данных, то и вторая может сделать то же самое на основе данных из первой БД. Обойдётся без готовеннького, пусть работает.
Или, если нужны срезы на определённое время, заведите для данных  и итогов, потребляемых второй БД, отдельные таблицы именно во второй БД, и заполняйте их из первой БД. Или заведите для этого третью. Но ни в коем случае не смешивайте всё в одну кучу.

Но вообще эти ваши "хочу" и "так надо" - это всё, извините за грубость, детский сад. Пора бы уже вырасти...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Dr1Pepper
Дата 21.3.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



Спасибо за советы. Наверно действительно детский сад. Вообщем, вот что я сделал.

Только и тут у меня вопрос: Если в форме я ставлю к примеру две галочки, число в итоге увеличивается правильно. А если после этого я убираю одну - то число сбрасывается.
И оно понятно почему
    b = 200
    s = Итог.Value - Цена.Value
    Итог.Value = IIf(ВО.Value, Цена.Value + b + s, Цена.Value)
из-за Цена.Value в конце, там нужно что-то дописать. Только вот что именно?
Есть предложения?

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  BD.rar 14,15 Kb
PM MAIL   Вверх
bopoha
Дата 23.3.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Dr1Pepper, ваша реализация несет опасность. Переделайте лучше так:
Код

Public Function MyCalc(ByVal bSrochnost as Boolean, ByVal bVo as Boolean, ByVal bDnd as Boolean, ByVal bCena as Boolean) As Double
'-- имя функции нужно поменять.

Dim dSrochnost as Double
Dim dVo as Double
Dim dDnd as Double

If bSrochnost Then  dSrochnost = 0.2
If bVo Then  dVo = 0.1
If bCena Then  dDnd = 0.3

MyCalc =  (dSrochnost  + dVo  + dDnd + 1) * bCena 
End Function

Эту функцию можно разместить отдельно от формы в модуле.
В результате функцию использвоать удобно где угодно, в запросе на форме и еще где.

Чтобы расчитать поле Итого в таблице, достаточно использовать запрос на обновление:
Код

UPDATE ... SET Itogo = MyCalc( Srochnost, Vo, Dnd, Cena )


По поводу хранение результатов вычислений.
От любого правила можно отойти, если на то есть основания. Программа потребитель не должна знать о том, как расчитываются эти данные. Так будет проще сопровождать. Идея насчет отдельной таблицы с подготовленными данными для другой программы, хорошая идея. Тоже улучшает сопровождаемость. 

Я постоянно пользуюсь хранением расчитанных данных, это мне жизнь облегчает. Естественно расчитываются эти данные только в одном месте. Это правило!
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.