提问人:MKB2013 提问时间:11/16/2023 最后编辑:June7MKB2013 更新时间:11/16/2023 访问量:23
如何使用字母序列更新 MS Access 表,具体取决于其他记录字段显示的实例数
How to update MS Access table with a letter sequence dependent on the number of instances other record fields appear
问:
我正在MS Access中开发一个工具数据库,工具编号约定是一些区号,后跟装配字母(在表中写为装配编号)。区号和组装字母的组合为每条记录创建密钥。从本质上讲,我想要发生的是,每次重复一个区号时,都会将另一个字母永久分配给装配字母字段。例如,如果我有一个区号“7474”,并且它是表中 7474 的第一个实例,则会为其分配字母“A”,组合键为“7474 A”。如果我输入“7474”的第二个实例,则“B”将填充第二个记录的汇编字母字段。如果我随后输入新的区号“6852”,则“A”应填充其组装字母字段。我一次只添加一条记录,因此我使用占位符“-”来指示这是需要更新的记录。我目前正在运行一个更新查询,只要记录中有一个区号,它就会起作用,只要我添加另一个区号,我就会出现关键违规。出于同样的原因,我无法手动添加“A”,尽管组合是唯一的。它的作用就好像组装字母是记录的主键一样。
当我运行下面的代码时,它将正确计算每个区号的实例,并为每个区号输出生成的下一个可用字母。如果生成的字母已经出现在其他地方,它就不会将结果分配给区号。
这是我使用的 SQL 代码:
UPDATE [Tool Table]
SET [Tool Table].[ASSEMBLY NUMBER] = CalculateAssemblyNumber([AREA CODE])
WHERE ((([Tool Table].[ASSEMBLY NUMBER]) Is Null Or ([Tool Table].[ASSEMBLY NUMBER])='-'));
这是我使用的VBA代码:
Function CalculateAssemblyNumber(AreaCode As Variant) As String
Dim countMatch As Integer
Debug.Print "AreaCode: " & AreaCode
countMatch = DCount("*", "[Tool Table]", "[AREA CODE] = '" & AreaCode & "'")
Debug.Print "CountMatch: " & countMatch
CalculateAssemblyNumber = Chr(64 + countMatch)
Debug.Print "Result: " & CalculateAssemblyNumber
End Function
答:
0赞
Zen
11/22/2023
#1
我猜你的问题是程序集字段被设置为唯一。当您从两个字段构建记录键时,没有一个字段必须是唯一的,只有键本身。检查这一点,您的问题应该得到解决。 另一个问题是如何处理您已经拥有组装字母“Z”的情况。那你会怎么做?
评论