Vba 如何防止将重复文件导入access表

Vba 如何防止将重复文件导入access表,vba,ms-access,import,duplicates,Vba,Ms Access,Import,Duplicates,我有一个用于销售报告的access数据库。我正在每周自动从销售点导入销售交易记录。我想开发一种执行简单检查的方法,以验证导入的文件是否与前几周的文件不同 当我编写的宏运行时,文件将始终具有相同的文件名,并且位于access将查找的相同文件夹中 我建议的解决方案是创建一个用于将销售事务加载到的暂存表,并创建该暂存表的备份以进行比较。每周我都会备份临时表,其中包含上周的事务,然后将新文件加载到临时表中。为了验证加载的新文件是否与前一周不同,我将对备份表和暂存表的“total sell”列中的值求和,

我有一个用于销售报告的access数据库。我正在每周自动从销售点导入销售交易记录。我想开发一种执行简单检查的方法,以验证导入的文件是否与前几周的文件不同

当我编写的宏运行时,文件将始终具有相同的文件名,并且位于access将查找的相同文件夹中

我建议的解决方案是创建一个用于将销售事务加载到的暂存表,并创建该暂存表的备份以进行比较。每周我都会备份临时表,其中包含上周的事务,然后将新文件加载到临时表中。为了验证加载的新文件是否与前一周不同,我将对备份表和暂存表的“total sell”列中的值求和,并比较这些值

我需要帮助来创建代码/查询,以及如何将其插入到已生成的宏中。或者帮助提出其他解决方案

我在网上搜索了很多,但还没有找到解决这个问题的方法

这是指向示例数据的链接

每条记录都应该是DateTime“戳记”(您肯定会在记录结构中设计类似于[Transaction\u DateTime]字段的内容)。如果您导入的文件确实是“严格”每周导入的,那么您可以只检查一条记录,看看这是新文件还是旧文件。否则,请全部检查

编辑: 您不需要时间部分,日期就足够了。假设您将数据导入到记录集中,您将需要类似这样的东西(蛮力可以很好地工作,而且速度也很快:

rstX.MoveFirst
Do
    If rstX("Trans Date") <= Date - 7 Then
        MsgBox "Found a transaction less that 1 week old!"
        Exit Do
    End If
    rstX.MoveNext 
Loop Until rstX.EOF
If rstX.EOF Then
    MsgBox "All transactions are at least 1 week old!"
End IF
rstX.MoveFirst
做

如果rstX(“Trans-Date”)请阅读我对@Gene Skuratovsky solution的评论。我建议在那里创建另一个表(伪代码):

在开始导入文件之前,需要检查相应表中是否存在记录;)

您可以使用检查记录是否存在

Function FileHasBeenImported(ByVal sFullFileName As String) As Boolean
    FileHasBeenImported = (DLookup("[FilePath]", "ImportedFiles", "[FilePath] =" & sFullFileName )<>"")
End If
函数文件已被移植为布尔值(ByVal sFullFileName为字符串)
FileHasBeenImported=(DLookup(“[FilePath]”、“ImportedFiles”、“[FilePath]=”&sFullFileName)”)
如果结束

这似乎是一个困难的设计。如果这是重复的一周(为什么会发生这种情况?),那么接下来的一周你将测试什么?是否没有办法检查单个导入的记录是否重复,即某种唯一索引?我尝试提出一个唯一键来测试记录,但基于数据有困难。有一个发票ID,我打算将其与产品SKU代码相结合,但退货的发票ID与销售的发票ID相同,因此,如果在同一天发生,则发票ID不是唯一的。每个记录都应通过添加[transaction]字段进行时间戳?不我想说的是,每个记录都应该由UpdateID“标记”,UpdateID应该引用另一个表。每个销售事务通常都有一个唯一的ID,但总是有一个DateTime标记。不管有什么,他都可以用。那里没有“更新”,只是备份数据。。。我想。数据有一个事务日期,但没有附加时间,所以不可用。但这是另一个想法。我如何检查加载文件中的最新交易日期,并查看它是否大于今天-7天?这将确保包括上周的交易。
Function FileHasBeenImported(ByVal sFullFileName As String) As Boolean
    FileHasBeenImported = (DLookup("[FilePath]", "ImportedFiles", "[FilePath] =" & sFullFileName )<>"")
End If