Sql 在MS Access中,新记录有时会创建两个记录
我在子窗体中有查询结果,该子窗体通过子窗体外部的按钮进行操作 表格的图像: “添加记录”按钮所做的几乎就是运行一条INSERT语句并刷新表单/查询。INSERT语句包含的信息与前几行中的信息基本相同;不会更改的信息,如DLA\U持有者ID、DLA\U类型ID等。它将大多数其他字段留空以供输入,并分别使用Sql 在MS Access中,新记录有时会创建两个记录,sql,ms-access,Sql,Ms Access,我在子窗体中有查询结果,该子窗体通过子窗体外部的按钮进行操作 表格的图像: “添加记录”按钮所做的几乎就是运行一条INSERT语句并刷新表单/查询。INSERT语句包含的信息与前几行中的信息基本相同;不会更改的信息,如DLA\U持有者ID、DLA\U类型ID等。它将大多数其他字段留空以供输入,并分别使用Date()和Time()用于DLA\U创建日期和记录日期 添加行时,临时状态为'N',保存后将变为'S',如果取消,将运行更新语句删除满足临时状态的查询结果的行。这一切都很完美 我的问题是,有
Date()
和Time()
用于DLA\U创建日期
和记录日期
添加行时,临时状态为'N'
,保存后将变为'S'
,如果取消,将运行更新语句删除满足临时状态的查询结果的行。这一切都很完美
我的问题是,有时按“添加记录”时,会插入两行。它可能只发生在5%-10%的时间里,而且是随机发生的。添加这两行时,它们完全相同,只是RECORD\u TIME
相隔1秒。即第1排=下午2:06:24,第2排=下午2:06:25
有办法解决这个问题吗?我认为发生这种情况的唯一方法是处理INSERT查询所需的时间,即time()
值可能会从2:06:24更改为2:06:25,而不是选择一个,它会同时插入两个。(是的,我知道它不应该那样工作,但这是我所能想到的。)
编辑
这是“添加记录”按钮的代码。该按钮不能按两次,因为需要按“保存记录”或“取消”按钮才能重新启用“添加记录”按钮
Private Sub cmdNewRec_Click()
insert_query = "INSERT INTO DLA_RELATIONSHIP (DLA_HOLDER_ID, DLA_TYPE_ID, DLA_LOCATION_ID, DLA_PARAMETER_ID, DLA_TITLE, DLA_CREATION_DATE, TEMP_STATUS) SELECT DLA_HOLDER_ID, DLA_TYPE_ID, DLA_LOCATION_ID, DLA_PARAMETER_ID, DLA_TITLE, DLA_CREATION_DATE, ('N') AS TEMP_STATUS FROM DLA_RELATIONSHIP WHERE (((DLA_HOLDER_ID)= txt1) And ((DLA_TYPE_ID)= txt2) And ((DLA_LOCATION_ID)=txt6) and ((DLA_PARAMETER_ID)= txt3) And ((DLA_TITLE)=txt4) And ((DLA_CREATION_DATE)=txt5))"
DoCmd.SetWarnings False
DoCmd.RunSQL insert_query
DoCmd.SetWarnings True
Me.Form.refresh
lblNotice1.Caption = "New record present with unsaved changes"
cmdNewRec.Enabled = False
cmdSave.Enabled = True
cmdCancel.Enabled = True
End Sub
同样,请记住它是完全随机发生的(再次导致我认为它是时间()函数以某种方式参与的)。您可以尝试将TOP 1
添加到select on insert语句中:
INSERT INTO DLA_RELATIONSHIP (DLA_HOLDER_ID, DLA_TYPE_ID, DLA_LOCATION_ID, DLA_PARAMETER_ID, DLA_TITLE, DLA_CREATION_DATE, TEMP_STATUS)
SELECT TOP 1 DLA_HOLDER_ID, DLA_TYPE_ID, DLA_LOCATION_ID, DLA_PARAMETER_ID, DLA_TITLE, DLA_CREATION_DATE, ('N') AS TEMP_STATUS
FROM DLA_RELATIONSHIP
WHERE (((DLA_HOLDER_ID)= txt1) And ((DLA_TYPE_ID)= txt2) And ((DLA_LOCATION_ID)=txt6) and ((DLA_PARAMETER_ID)= txt3) And ((DLA_TITLE)=txt4) And ((DLA_CREATION_DATE)=txt5))
如果这解决了您的问题,那么where条件将为select返回多条记录,这将插入两行
但是,您可能应该直接从文本框中的值插入记录,而不是从表中选择它们;这将使选择变得不必要 一个人也可以用摇摇晃晃的鼠标键点击两次……是的,在这种情况下不是。要找到原因,你需要编辑你的帖子,并将“添加记录”代码添加到其中。但您可以在该过程开始时简单地检查是否已经存在“N”记录。是否可以在插入完成之前禁用按钮,以测试这是否可以解决问题?@Andre我已添加了代码。谢谢Kateract,非常简单!我感谢你的帮助。