我的ProjectNum column
包含string data type
。通常数字为X1234...
,但如果没有分配编号,则必须自动生成一个编号,具体取决于分配给项目的优先级,取决于它是否以C or F
开头。因此,自动生成的数字必须以C or F
开头,后跟六位数字并自动递增。所以这是我的查询...
SELECT MAX(CINT(RIGHT(ProjectNum, 6))) AS LastDigits
FROM project_master_query
WHERE ((ProjectNum LIKE (IIF([@priorityDefID] = 4, "C*", "F*"))));
这允许我获取最后一个自动递增的数字,然后我可以通过添加1来自动生成代码中的数字。问题是,当我发送@priorityDefID of 4
时(目前没有以“C”开头的数据库,我收到错误"This expression is typed incorrectly, or it is too complex to be evaluated.
例如,数字表达式可能包含太多复杂的元素。尝试通过将表达式的一部分分配给变量来简化表达式。“
不太确定为什么这会导致我传递4,但是1,2或3工作正常并返回正确的值。我想的不是写MAX
而只是抓住所有以C或F开头的东西然后抓住正确的6位数,按顺序下降并抓住前1位?
答案 0 :(得分:1)
那个查询有很多问题,我不清楚一切都在发生,所以我不知道从哪里开始。但是,我可以警告您使用带有6位数的CInt()
的危险。 CInt("999999")
抛出溢出错误,因为最大整数值为32,767。使用CLng
会更安全,因为最大长整数值是2,147,483,647 ...所以一个长整数将容纳所有可能的6位数值。
尽管该问题可能不会导致当前ProjectNum
值出现问题,但是当您存储更多ProjectNum
值时,这可能会让您感到厌烦。
关于“[错误消息]出现我传递4,但是1或2或3工作正常并返回正确的值”,此时您还说“数据库中没有以“C”开头的。这意味着查询在该情况下不返回任何行。我怀疑这会导致RIGHT(ProjectNum, 6)
出现问题,因为Right(Null, 6)
会触发无效使用Null 错误。
在添加以“C”开头的ProjectNum
的行后,请检查错误是否消失。