Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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
Sql 访问VBA:添加';文件名';导入多个文件时的字段_Sql_Ms Access_Vba - Fatal编程技术网

Sql 访问VBA:添加';文件名';导入多个文件时的字段

Sql 访问VBA:添加';文件名';导入多个文件时的字段,sql,ms-access,vba,Sql,Ms Access,Vba,我有一些工作代码,它在一个装满Excel文件的文件夹中循环,并从每个文件夹中导入一个表到Access表中。我所要做的就是在表的末尾添加一个名为FileName的字段,该字段具有源Excel文件的名称 我通过谷歌搜索找到了以下解决方案: 我曾尝试将解决方案合并到我的代码中,但当我到达execute语句时,我得到: 运行时错误“3061”参数太少。预期2 我认为问题在于strSQL语句和/或我在最后执行它的方式 Public子命令0\u Click() 作为字符串“文件名”的Dim strFile

我有一些工作代码,它在一个装满Excel文件的文件夹中循环,并从每个文件夹中导入一个表到Access表中。我所要做的就是在表的末尾添加一个名为FileName的字段,该字段具有源Excel文件的名称

我通过谷歌搜索找到了以下解决方案:

我曾尝试将解决方案合并到我的代码中,但当我到达execute语句时,我得到:

运行时错误“3061”参数太少。预期2

我认为问题在于strSQL语句和/或我在最后执行它的方式

Public子命令0\u Click()
作为字符串“文件名”的Dim strFile
Dim strFileList()作为字符串文件数组
Dim intFile作为“整数”文件号
将文件名设置为字符串
将路径设置为字符串
将qdf设置为DAO.QueryDef
Set db=CurrentDb()
'将更新设置为参数查询。。。
strSQL=“更新测试集文件名=[pFileName],其中文件名为Null或
文件名=“”
设置qdf=db.createQueryDF(vbNullString,strSQL)
path=“C:\Users\u005984\Desktop\Test\”
'循环浏览文件夹和生成文件列表
strFile=Dir(路径和“*.xlsx”)
而strFile“”
'将文件添加到列表中
intFile=intFile+1
ReDim保留strFileList(1到intFile)
strFileList(intFile)=strFile
strFile=Dir()
温德
'查看是否找到任何文件
如果intFile=0,则
MsgBox“未找到任何文件”
出口接头
如果结束
'循环浏览文件列表
对于intFile=1到UBound(strFileList)
filename=路径和strFileList(intFile)
DoCmd.TransferSpreadsheet导入,9,“测试”,文件名,True
'添加文件名字段
qdf.Parameters(“pFileName”).Value=strFileList(intFile)
qdf.executedbfailonerror
下一个intFile
端接头

我是访问VBA和SQL的新手,不明白为什么它需要两个参数。感谢您的帮助。

调整您的SQL查询,您的查询不包含参数

strSQL = "PARAMETERS pfilename Text ( 255 ); UPDATE Test SET FileName=[pFileName] WHERE FileName Is Null OR FileName='';"
添加文件名字段与更新其值明显不同。因此,您需要两个SQL操作查询:
ALTER
UPDATE
语句

具体来说,查询需要两个引擎未知的组件:FileName列和[pFileName]参数值。最可能的情况是,Excel工作表中没有要导入到测试表中的文件名列

考虑以下在循环中使用
ALTER
语句的设置(仅在第一次迭代时,因为所有工作表都附加到同一个表中):

添加文件名字段 对于intFile=1到UBound(strFileList) filename=路径和strFileList(intFile) DoCmd.TransferSpreadsheet导入,9,“测试”,文件名,True 如果intFile=1,则 “换桌子 CurrentDb.Execute“ALTER TABLE[Test]ADD COLUMN[FileName]TEXT(255)”,dbFailOnError 如果结束 '更新表(传递参数值) qdf.Parameters(“pFileName”).Value=strFileList(intFile) qdf.executedbfailonerror 下一个intFile
在我的头顶上,尝试删除strSQL查询末尾的分号。除此之外,我想知道在执行之前,
qdf.Parameters.Count
是什么。