显然,计算字段是复杂的方法。谁能建议一个更好的方法来完成我想要做的事情?
目标:在“强度字段”中输入的值确定计算字段中显示的值。在此先感谢您的帮助!
[强度]数字字段 [StrMod]计算字段
下面是我试图构建的表达式,以支持[StrMod]计算字段。
IIf([Strength]=1,-5,
IIf([Strength]>=2 And [Strength]<=3,-4,
IIf([Strength]>=4 And [Strength]<=5,-3,
IIf([Strength]>=6 And [Strength]<=7,-2,
IIf([Strength]>=8 And [Strength]<=9,-1,
IIf([Strength]>=10 And [Strength]<=11,0,
IIf([Strength]>=12 And [Strength]<=13,1,
IIf([Strength]>=14 And [Strength]<=15,2,
IIf([Strength]>=16 And [Strength]<=17,3,
IIf([Strength]>=18 And [Strength]<=19,4,
IIf([Strength]>=20 And [Strength]<=21,5,
IIf([Strength]>=22 And [Strength]<=23,6,
IIf([Strength]>=24 And [Strength]<=25,7,
IIf([Strength]>=26 And [Strength]<=27,8,
IIf([Strength]>=28 And [Strength]<=29,9,
IIf([Strength]=30,10,Null)
答案 0 :(得分:1)
以下是一些使用非计算数据字段类型的建议。
更新查询w / LOOKUP表
将计算的字段类型替换为[StrMod]的常规数字字段。创建一个强度查找表:
StrengthValue | StrengthCategory
1 -5
2 -4
3 -4
4 -3
5 -3
6 -2
... ...
然后使用此表创建以下更新查询,以便在主表的AfterUpdate
和AfterInsert
数据宏或主表格形式的相同事件中运行。
UPDATE maintableName INNER JOIN StrengthLookUp
ON maintableName.Strength = StrengthLookup.StrengthValue
SET maintableName.StrMod = StrengthLookUp.StrengthCategory
更新查询没有查看表
将计算的字段类型替换为[StrMod]的常规数字字段,只需在AfterUpdate
和AfterEvent
个事件中使用更新查询:
UPDATE maintableName
SET maintableName.StrMod =
IIf([Strength]=1,-5,
IIf([Strength]>=2 And [Strength]<=3,-4,
IIf([Strength]>=4 And [Strength]<=5,-3,
IIf([Strength]>=6 And [Strength]<=7,-2,
IIf([Strength]>=8 And [Strength]<=9,-1,
IIf([Strength]>=10 And [Strength]<=11,0,
IIf([Strength]>=12 And [Strength]<=13,1,
IIf([Strength]>=14 And [Strength]<=15,2,
IIf([Strength]>=16 And [Strength]<=17,3,
IIf([Strength]>=18 And [Strength]<=19,4,
IIf([Strength]>=20 And [Strength]<=21,5,
IIf([Strength]>=22 And [Strength]<=23,6,
IIf([Strength]>=24 And [Strength]<=25,7,
IIf([Strength]>=26 And [Strength]<=27,8,
IIf([Strength]>=28 And [Strength]<=29,9,
IIf([Strength]=30,10,Null))))))))))))))))
VBA LOGIC
将计算的字段类型替换为[StrMod]的常规数字字段。然后,使用主表格SELECT CASE
和AfterInsert
事件中的AfterUpdate
语句:
SELECT CASE Me.Strength
Case 1
Me.StrMod = -5
Case 2 To 3
Me.StrMod = -4
Case 4 To 5
Me.StrMod = -3
Case 6 To 7
Me.StrMod = -3
Case 8 To 9
Me.StrMod = -1
Case 10 To 11
Me.StrMod = 0
Case 12 To 13
Me.StrMod = 1
...
END SELECT
严格来说我的偏好,但我从不使用计算字段以防数据库兼容性(即MS Access 2007 accdb用户)和使用编程语言(PHP,Python,VB ODBC连接)和其他RDMS(SQL Server, MySQL的)。
答案 1 :(得分:0)
我无法检查,但你会明白这个想法:
iif(strength/2 >= 15, null, -5 + INT(strength/2))
您想要简化还是复杂化?如果您只想更新一次表,那么您不需要任何查找表...
update table
set StrMode = iif(strength/2 >= 15, null, -5 + INT(strength/2))
但是如果记录不时添加到表中,您还需要运行更新。