2015-07-26 2 views
1

Я пытаюсь решить эту проблему с полем поля в течение примерно 30 минут, похоже, что в явном виде, как [точки] и [contrib], я правильно использовал условия поля, ([points] + [contrib]) не соответствует требованию, которое задает поле правильному типу элемента, поэтому, когда они добавлены, он возвращает некоторый другой тип элемента как основной. Могу ли я использовать между оператором с добавленными полями ...? Я попробовал, но есть некоторая композиционная ошибка. Таким образом, если у вас есть 45 очков, он устанавливает базовый, только именованный в поле точек, если у вас есть вкладка 45, вы, как и ожидалось, установите на базовое поле в поле, но если оно равно 50 + 50, установка на базовую, когда она должна быть «лучшей» меткой участника. В противном случае это простое утверждение должно показаться правильным, но компьютер не читает его при добавлении. Он не должен распознавать комбинированное значение по какой-либо причине, а поля calc не имеют функции sum(). Фокус здесь: (([точка] + [Contrib])> = 45 А ([точка] + [Contrib]) < 100), "Basic",Поле доступа MS Access с комбинированными полями

IIf(([points] >=45 And [points]<100) Or ([Contrib] >=45 And [Contrib] <100) Or (([points]+[Contrib]) > = 45 And ([points]+[contrib] < 100),"Basic", 
IIf(([points] >=100 And [points] <250) Or ([Contrib] >=100 And [Contrib] <250) Or ((([points]+[Contrib]) >=100) And (([points]+[Contrib])<250)),"Better", 
IIf(([points] >=250 And [points]<500) Or ([Contrib] >=250 And [Contrib] <500) Or ((([points]+[Contrib]) >=250) And (([points]+[Contrib])<500)),"Great", 
IIf(([points] >=500) Or ([Contrib] >=500) Or (([points]+[Contrib]) >=500),"Best","Non-member")))) 
+0

Это трудно понять, но есть ли определенное сообщение об ошибке? Обратите внимание, что последние выражения (после «Фокус здесь:») не эквивалентны. Между включительно, поэтому включает 44 и 100 (50 + 50). –

+0

Вместо этого сложного выражения я бы установил небольшой стол и просмотрел статус участника. Это должно быть возможным, совпадающие точки и Contrib, где они попадают между определенными границами. –

+0

Пожалуйста, проигнорируйте первую часть, в которой используется промежуточный, это был эксперимент. Диапазон должен быть> = 45 до <100.Однако компилятор не использует сумму двух полей, он читает только по одному, поэтому это так сложно. Я посмотрел на стол и где эти границы. Он работает до добавления, и я не уверен, почему. Я отредактирую. – safron6

ответ

2

Вот пример данных из таблицы Access 2010, которая включает вычисляемое поле имени MEMBER_TYPE:

id points Contrib member_type 
-- ------ ------- ---------- 
1  1  1 Non-member 
2  50  1 Basic 
3 200  1 Better 
4 300  1 Great 
5 600  1 Best 

Если это то, что вы хотите для вашего вычисляемого поля, вот выражение, которое я использовал для MEMBER_TYPE:

IIf([points]+[Contrib]>=45 And [points]+[Contrib]<100,'Basic',IIf([points]+[Contrib]>=100 And [points]+[Contrib]<250,'Better',IIf([points]+[Contrib]>=250 And [points]+[Contrib]<500,'Great',IIf([points]+[Contrib]>=500,'Best','Non-member')))) 

В случае, если я не получил это точно правильно, вот что такое же выражение отформатирован, так что вы можете лучше видеть, где нужны изменения:

IIf([points]+[Contrib]>=45 And [points]+[Contrib]<100,'Basic', 
IIf([points]+[Contrib]>=100 And [points]+[Contrib]<250,'Better', 
IIf([points]+[Contrib]>=250 And [points]+[Contrib]<500,'Great', 
IIf([points]+[Contrib]>=500,'Best','Non-member' 
)))) 

Примечание, если либо точки или CONTRIB является Null, member_type будет отображать "Non-member". Если это не то поведение, которое вы хотите, вам понадобится более сложное выражение. Так как выражение вычисляемого поля не может использовать Nz(), вам придется заменить что-то вроде IIf([points] Is Null,0,[points]) для каждого вхождения [points] и IIf([Contrib] Is Null,0,[Contrib]) для [Contrib]

Было бы проще запретить Null для этих полей (установить их необходимого свойства Да) и установить Значение по умолчанию до нуля.

+0

Отличная работа, но мы еще не совсем там. Если в одном поле есть нули, оно не будет добавляться, и поэтому вам нужно делать то, что я делал раньше, отдельное выражение для этого поля, которое должно было где-то запутать. – safron6

+0

Я думаю, что мое решение состоит в том, чтобы делать то, что у вас есть, но запрашивать, чтобы заполнить нулями как 0, чтобы заставить его вычислять что-то вместо ничего, когда оно добавляется. – safron6

0

Оператор BETWEEN оператора возвращает TRUE, если значение вы тестируете> = или < = пределы, которые у вас есть для МЕЖДУ.

Если вы ищете 50 + 50, то общая сумма = 100, а вы между 44 и 100. Это приведет к ответу «Базовый». Измените диапазон для ([points] + [Contrib]) между 44 и 100), чтобы быть ([указывает] + [Contrib]) между 44 и 99)

+0

Да, я пробовал это, и он не прочитает код ... не знаю, почему. Может быть, из-за сочетания синтаксисов? Это не имеет значения. – safron6

+0

Я просто пробовал это, и он работает: zz: IIf ((([points] + [Contrib])> = 45) И (([points] + [contrib]) <80), «Да», «Нет») , Это добавление очков + вклад просто отлично. Будьте осторожны с вашей скобкой. – dev1998

+0

Вы пытались оценить еще один вложенный, чтобы проверить, будет ли это сделано? Это не повлияло бы на отдельные и комбинированные, поэтому я добавил их. Попробуйте, чтобы он скомпилировался. Может быть, есть скопированная скобка, где-то путают шаги. – safron6

Смежные вопросы