【发布时间】:2018-08-09 00:06:27
【问题描述】:
问题背景:
我有一个 Powershell 脚本,我可以从我的 Microsoft Access 表单中执行它扫描包含不同设施信息的文件夹,并生成一个类似于以下内容的 CSV:
SiteCode FacilityNumber DocumentType HyperlinkPath
DKFZ 10 DD1400 C:\FACILITIES DATABASE\path
DKFZ 10 FLRPLN C:\FACILITIES DATABASE\path
SMQL 17 P1 C:\FACILITIES DATABASE\path
SMQL 17 P2 C:\FACILITIES DATABASE\path
因此,每次将新文件添加到这些文件夹时,我都可以运行此脚本并生成我拥有的所有内容的更新列表:
C:\...\Output\scanResults.csv
我现在需要的是获取该 CSV 文件并更新(甚至覆盖)我在 Access 数据库中的一个表,该表与其他表有关系,并被数据库中的各种查询和表单使用。 CSV 列的命名和格式已与访问表相同。
我查看并尝试复制以下线程:
VBA procedure to import csv file into access
Access Data Project Importing CSV File In VBA
我找到的最接近的答案是:
Sub Import()
Dim conn as new ADODB.Connection
Dim rs as new ADODB.Recordset
Dim f as ADODB.field
conn.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ=c:\temp;"
rs.Open "SELECT * FROM [test.txt]", conn, adOpenStatic, adLockReadOnly, adCmdText
While Not rs.EOF
For Each f In rs.Fields
Debug.Print f.name & "=" & f.Value
Next
Wend
End Sub
但这显然不会将数据写入表中,我无法理解作者关于将 Select 更改为 Insert 的意思。
我还发现:
DoCmd.TransferText acImportDelim, "YourCustomSpecificationName", _
"tblImport", "C:\SomeFolder\DataFile.csv", False
由于这两个都是从 2010 年开始的,我想知道在 Access 2013 中是否没有更好的方法来实现这一点。虽然我可以手动完成这一切,但我想将它合并到我用来告诉 Powershell 生成 CSV,这样我就可以制作它然后立即上传。
非常感谢任何帮助或建议。总的来说,我对 Access、VBA 和 SQL 语句仍然很熟悉,所以这是一个“边走边学”的过程。
【问题讨论】:
-
作者建议类似:
INSERT INTO tablename([field1], [field2], [field3]) SELECT [field1], [field2], [field3] FROM [test.txt]。但是,使用此语句设置记录集对象和代码循环记录集对我来说毫无意义。您是否考虑过仅设置指向 CSV 文件的链接?只要更换同名和结构的文件,每次链接应该是稳定的。然后像使用任何其他表一样使用链接表,但不能编辑数据。 -
啊,好吧,现在更有意义了。所以这实际上是我尝试做的第一件事,为我的 CSV 创建一个可以在 Access 之外更新的链接表。不幸的是,我遇到了两个问题;在积极使用表单时,我的查询需要更长的时间才能运行,当表单第一次打开时,我收到几个“在此表单上指定的记录源......不存在”错误,这些错误似乎可以通过关闭表单然后解决重新打开它。
标签: csv ms-access vba ms-access-2013