早晨,数据从 Microsoft Navision 被拉到 Excel ...
然后将这些数据复制到Access中,在其中将其用于生产计划等。将这些数据复制到Access中时,会添加一些额外的列以帮助进行计划和可追溯性,即剪切,折叠,完成。
我想做的是,如果我们再次运行Microsoft Navision报告,并说A3,A5和A12状态都已更改为已完成,将所有这些行粘贴到Access中,状态将根据Prod更改。与该状态相关的订单号。
答案 0 :(得分:1)
请考虑使用Access中的临时表来定期清除以前的表并导入当前的Excel输出。然后,使用条件IIF
逻辑对最终Access表运行一个更新内部联接查询。
下面是三个操作命令,您可以将它们保存为三个单独的查询,并在导入过程中使用DoCmd.OpenQuery
或CurrentDb.Execute
在VBA中一起运行它们。当然要调整为实际名称。
删除临时表中的所有数据
DELETE FROM ExcelTempTable;
附加到临时表
INSERT INTO ExcelTempTable
SELECT *
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\Workbook.xlsx].[SheetName$] AS t;
更新最终表
UPDATE AccessFinalTable a
INNER JOIN ExcelTempTable e ON a.[Production Number] = e.[ProdOrderNo]
SET a.Finished = IIF(e.Status = 'Finished', True, False),
a.Folded = IIF(e.Status = 'Folded', True, False),
a.Cut = IIF(e.Status = 'Cut', True, False);
追加最终表(仅追加新生产编号的记录)
INSERT INTO AccessFinalTable (Col1, Col2, Col3, ...)
SELECT e.Col1, e.Col2, e.Col3, ...
FROM ExcelTempTable e
LEFT JOIN AccessFinalTable a
ON e.[Production Number] = a.[ProdOrderNo]
WHERE a.[Production Number] IS NULL