VBA [Access DB] - 将多个表合并为一个表

问题描述 投票:0回答:2

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

从这里我想将每个表合并为一个表,然后将其拉入 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
sql vba ms-access merge
2个回答
0
投票

这有效:

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

我现在正在努力解决的是添加我们需要能够报告数据的标识符,如上所述,数据来自多个工厂以及这些工厂内的几个不同的房间/部门


0
投票

我遇到了同样的问题,我已经尝试过你的代码,我是 VB 新手,你可以给我提供最终的代码吗

© www.soinside.com 2019 - 2024. All rights reserved.