Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 导入csv文件时将文件名添加到access表_Ms Access_Vba - Fatal编程技术网

Ms access 导入csv文件时将文件名添加到access表

Ms access 导入csv文件时将文件名添加到access表,ms-access,vba,Ms Access,Vba,我在多个文件夹中有多个csv文件,都在驱动器C:上的一个主文件夹中。有些文件每天更新。如果文件有更新,我需要将新的每日数据加载到包含文件名的访问表中。到目前为止,该脚本将从所有csv文件导入所有数据。然后将文件名添加到新记录中。我需要将文件名添加到所有记录中 任何帮助都将不胜感激 脚本: 子导入\u多个\u csv\u文件() Const strPath As String=“C:\text1\”目录路径 作为字符串“文件名”的Dim strFile Dim strFileList()作为字符串

我在多个文件夹中有多个csv文件,都在驱动器C:上的一个主文件夹中。有些文件每天更新。如果文件有更新,我需要将新的每日数据加载到包含文件名的访问表中。到目前为止,该脚本将从所有csv文件导入所有数据。然后将文件名添加到新记录中。我需要将文件名添加到所有记录中

任何帮助都将不胜感激

脚本:

子导入\u多个\u csv\u文件()

Const strPath As String=“C:\text1\”目录路径
作为字符串“文件名”的Dim strFile
Dim strFileList()作为字符串文件数组
Dim intFile作为“整数”文件号
Dim rs作为DAO.Recordset
'循环浏览文件夹和生成文件列表
strFile=Dir(strPath&“*.csv”)
而strFile“”
'将文件添加到列表中
intFile=intFile+1
ReDim保留strFileList(1到intFile)
strFileList(intFile)=strFile
strFile=Dir()
温德
'查看是否找到任何文件
如果intFile=0,则
MsgBox“未找到任何文件”
出口接头
如果结束
'循环浏览文件列表并导入以访问
'创建名为MyTable的新表
对于intFile=1到UBound(strFileList)
DoCmd.TransferText acImportDelimi_
“测试”、strPath和strFileList(intFile)
'将文件名添加到记录
Set rs=CurrentDb.OpenRecordset(“测试”)
艾德纽卢比
rs.Fields(“Com”).Value=Dir(strPath&“*”)
rs.更新
rs.Close
设置rs=无
下一个
MsgBox UBound(strFileList)和“文件已导入”

End Sub

我不能100%确定问题是什么,但是如果您试图更新刚刚导入的记录中的文件名,您可以使用一个简单的更新语句:

UPDATE Test SET Com='MyFileName' WHERE Com IS NULL OR Com=''
这里我假设字段为null或空字符串,但如果不正确,您可以用自己的条件替换它。你可以用它来做这件事


如果我误解了问题,请更新您的问题以使其更清楚。

您好,谢谢您的建议。在fro循环中,开始“For intFile=1 To UBound(strFileList)”,因为每个记录都放在access表中,所以我希望将文件名放在表列“com”中。您的建议在此循环中有效吗?是的,您希望文件名与每个导入的记录一起保存。TransferText将一次性加载整个文件(因此有多条记录)。然后需要使用文件名更新这些记录。在循环中调用UPDATE语句,并确保WHERE子句只拾取最新记录,否则您也将更新以前的记录。使用您使用的记录集代码,您正在添加另一个新记录,而不是更新现有记录。您可以在记录集中执行您想要的操作,但是单行DoCmd.RunSQL语句会更简单。
CurrentDB.Execute SQLString,DBFailOneError
将跳过使用
DoCmd.RunSQL
得到的警告,如果您首先将CurrentDB分配给数据库对象,并使用该语句,则可以使
记录受到影响,这可能很有用。
@Remou,很好的观点和更好的解决方案。希德-照他说的做。嗨,进步。。。脚本现在加载列“com”中的所有字段,其中包含文本“myfile”。如何将数据来自的文件名输入到字段中?我尝试了带引号和不带引号的strFile,但都不起作用。很多TK都是事先准备好的。
UPDATE Test SET Com='MyFileName' WHERE Com IS NULL OR Com=''