我有一个带有学生表的Access数据库。表中的前三个字段是studentID,ForeName和LastName。
该表已包含约35个学生记录。学生证的形式为AA0000。前两个字符由姓氏和名字的第一个字母组成。 0000是一个4位数字。
我创建了一个表格,用于将数据输入到学生表中。我希望根据以下规则自动生成学生ID
所以例如如果表中只有学生证的AA1256,BC1267和OK1288,我添加的下一个记录的编号应该是1289.
是否可以通过仅更改我创建的表单上的sutdentID文本框的控件来实现此目的。
我已经尝试将以下代码放在studentID的控件源中(虽然不起作用) =左(LastName,1)&左(forename,1)& (最大(右(studentID,4))+ 1)
感谢任何帮助。 感谢
答案 0 :(得分:1)
我认为原因是因为你的公式在字段名称周围没有方括号。
尝试:
Left([LastName],1) & left([forename],1) & (max(right([studentID],4))+1)
答案 1 :(得分:0)
控制源需要保持学习状态,应该被禁用或锁定。我将表单的“Before Insert”属性设置为“[Event Procedure]”并在自动创建的Form_BeforeInsert子中输入以下VBA代码:
studentid=left(LastName,1) & left(ForeName,1) & _
Right("0000" & CStr(CInt(Nz(DMax("right(studentid,4)","Student"),0))+1),4)
我看到一个问题,如果学生名称发生变化(如在添加后立即纠正),则需要更改ID。如果它是主键,则需要使用新密钥删除并重新添加记录。如果没有,您可以使用类似的代码更新“Before Insert”事件处理程序中的studentid。我也会留意学生名字中的空白。
答案 2 :(得分:0)
可能是"添加"字符串和数字1不起作用。
因此,尝试在数值上使用Max,添加1,并格式化为四位数:
=Left(LastName,1) & Left(ForeName,1) & Format(Max(Val(Right(studentID,4)))+1,"0000")
答案 3 :(得分:0)
实际上我认为这里真正的答案是不要打扰,只需计算ID并在任何需要的地方显示。毕竟你知道所涉及的所有价值。
将其他所有内容引用回唯一的PK,即数字StudentID。这样,如果有人更改了他们的名字,结婚等,唯一ID并没有改变您所显示的内容。