MS Access,新记录有时会创建两条记录

时间:2016-04-18 04:34:57

标签: sql ms-access

我在子窗体中有查询结果,该子窗体通过子窗体外的按钮进行操作。

表格形象:

Image of the form

几乎所有“添加记录”按钮都运行INSERT语句并刷新表单/查询。 INSERT语句包含的信息与前一行中的信息大致相同;不会更改的信息,例如DLA_HOLDER_ID,DLA_TYPE_ID等。它会将大多数其他字段留空以便输入,并分别对Date()Time()使用DLA_CREATION_DATERECORD_DATE

添加行时,TEMP_STATUS为'N',保存后会变为'S',如果取消,则会运行UPDATE语句,删除满足查询结果的行TEMP_STATUS {{ 1}}。一切都很完美。

我的问题是,有时按“添加记录”时,会插入两行。它可能只发生在5%-10%的时间并随机发生。当添加两行时,它们完全相同,除了'N'相隔一秒。 I.e row1 = 2:06:24 PM,row2 = 2:06:25 PM。

有没有办法解决这个问题?我能想到这种情况的唯一方法是偶然处理INSERT查询所花费的时间,RECORD_TIME值可能会从2:06:24更改为2:06:25而不是选择一个插入都。 (是的,我理解不应该以这种方式工作,但这是我能想到的全部。)

修改 这是“添加记录”按钮的代码。按钮根本无法按两次,因为需要按“保存记录”或“取消”按钮才能重新启用“添加记录”按钮。

Time()

再次,请记住它是在完全随机的情况下发生的(再一次让我以为是Time()函数以某种方式进行此操作)。

1 个答案:

答案 0 :(得分:1)

您可以尝试将TOP 1添加到insert语句的select中:

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返回多条记录,这将会插入两行。

但是,您可能应该直接从文本框中的值插入记录,而不是从表中选择它们;这将使选择不必要。