我在子窗体中有查询结果,该子窗体通过子窗体外的按钮进行操作。
表格形象:
几乎所有“添加记录”按钮都运行INSERT语句并刷新表单/查询。 INSERT语句包含的信息与前一行中的信息大致相同;不会更改的信息,例如DLA_HOLDER_ID,DLA_TYPE_ID等。它会将大多数其他字段留空以便输入,并分别对Date()
和Time()
使用DLA_CREATION_DATE
和RECORD_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()函数以某种方式进行此操作)。
答案 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返回多条记录,这将会插入两行。
但是,您可能应该直接从文本框中的值插入记录,而不是从表中选择它们;这将使选择不必要。