首页 > 解决方案 > VBA [Access DB] - 将多个表合并为一个表

问题描述

我有一个宏,可以扫描定义的 \Dir 中的文件夹。抓取每天生成的一堆 csv 文件。从这里我将每个 csv 文件作为新表导入我的 Access db,然后删除空表(系统生成文件,无论是否有任何生产)。这一切都很好(见下面的屏幕截图) 导入表列表截图

从这里我想将每个表合并到一个表中,然后我可以将其拉入 PowerBI 以开发一些所需的生产报告。注意:这将成为每天在设定时间执行的计划流程,因此我需要能够将导入的表添加到预先存在的表中。

在某些情况下:
我知道这似乎是一种获取所需数据的真正循环方式。基本上,这只是一个备用的临时解决方案。我们已经获得了供应商提供的直接数据馈送的访问权限,以构建我们自己的数据仓库。不幸的是,我们提供的当前数据与他们每天提供的 csv 转储完全不相符 - 所以我们认为我们正在等待澄清的数据发生了一些变化。与此同时,我们还有 1.5 周的时间来制作我们的第一份 Power BI 报告,因此我们需要一个解决方案来以防万一。

任何有关如何合并这些表的帮助,甚至是导入这些数据的更好方法都将不胜感激。

Private Function ProcessFile(filename As String, pName As String, sName As String, Optional rName As String = "NULL")
    'Get Actual File Name
    ActualName = TargetPath & Dir(TargetPath & filename)
    
'Set Placeholder Char (To Keep RoomName to x4 Chars)
Dim placeholderchar As String: placeholderchar = "x"
If Len(rName) < 4 Then
    For i = 1 To 4 - Len(rName)
        rName = rName & placeholderchar
    Next i
End If

'Define New Table Name for csv File
Dim tblName As String: tblName = UCase(Replace(TargetDate, "-", vbNullString) & Left(sName, 3) & pName) & rName

'Create New Table from csv File
Call DoCmd.TransferText(TransferType:=acLinkDelim, TableName:=tblName, _
filename:=ActualName, hasfieldnames:=True)

'If Table is Empty; Delete Table & Exit Function
If DCount("*", tblName) = 0 Then: Call DoCmd.DeleteObject(acTable, tblName): Debug.Print ("Table Deleted: " & tblName): Exit Function

Debug.Print ("Table Added:   " & tblName)
End Function

标签: sqlvbams-accessmerge

解决方案


这有效:

如果所有字段名称都相同,您可以简单地在最后做: CurrentDb.Execute "INSERT INTO MyWorkTable SELECT * FROM " & tblName – Andre 16 小时前

我现在正在努力添加我们需要能够报告数据的标识符,因为数据来自几个工厂和这些工厂内的几个不同的房间/部门


推荐阅读