我相当新,想知道解决这个问题的“最佳”方法。
我有多个自动创建的 CSV 文件,并以此格式命名:(R_Data_2022_01_01) csv 文件由 7 个“列”和 100000 多行数据组成。
RowID;Date ;Type ;Lot ;Part ;Test1;Test2
10256;22-2-2022;type 4;24051000;100001;OK ;NOK
10257;22-2-2022;type 4;24051000;100001;NOK ;-
我可以完全忽略 RowID 和 Type 列,但我想在表中为每个唯一的日期、批次、零件集创建一行。 (如果这 3 个更改中的任何一个发生变化,它应该开始一个新行,其中计算 csv 文件中 test1 = NOK、test2 = NOK 的行数,以及匹配相同日期;批次;部分的所有行的总数)
示例输出:
Date:21-2-2022
Lot:24051000
Part:100001
Test1:34
Test2:33
Total:4203
Date:21-2-2022
Lot:24051009
Part:100001
Test1:56
Test2:45
Total:12004
我曾经在 Excel 中执行此操作,但很快发现这不可能维持一年以上(行限制等)
编辑: 我需要每隔一段时间用新数据更新此表(没有设定时间表),因为 CSV 文件是由机器自动创建的,并且此表需要由任何人更新。
编辑2: 我喜欢在由宏(或按钮)调用的 VBA 模块中完成这一切,但我坚持将文件导入到单独的表中。 (老实说,我不知道如何计算测试以及如何将其整齐地放入一条记录中)。
我将链接或导入文件,请参见此处:将 csv 文件导入到 access 的 VBA 过程
然后运行这样的查询(根据您的数据调整测试标准):
SELECT [Date], [Lot], [Part], COUNT(*) AS Num
FROM MyLinkedCsv
WHERE Test1='Pass' AND Test2='Pass'
GROUP BY [Date], [Lot], [Part]
对于 100k 行的链接 CSV,这可能会非常慢。
然后将数据导入临时表 (
DoCmd.TransferText TransferType:=acImportDelim
),运行查询,然后从临时表中删除 *。
一旦按预期工作,请将 SELECT 查询更改为 INSERT 查询。
使用 FileSystemObject 对象 逐行读取文件。
根据需要解析这些数据,并且对于每个完整的数据集,将这些数据作为记录附加到目标表。