VBA ADO SQL参数太少

VBA ADO SQL参数太少,sql,vba,excel-2010,Sql,Vba,Excel 2010,我以前问过这个问题,但我仍然无法将参数放入SQL查询中 Public Function testInsert(tableName作为字符串,dType作为字符串,role作为字符串, 财政(如字符串) Dim cmd作为ADODB.Command Dim conn作为ADODB连接 作为ADODB.参数的Dim prm Dim connectionString作为字符串 将SQL设置为字符串 Set conn=新ADODB.connection Set cmd=New ADODB.Command

我以前问过这个问题,但我仍然无法将参数放入SQL查询中

Public Function testInsert(tableName作为字符串,dType作为字符串,role作为字符串,
财政(如字符串)
Dim cmd作为ADODB.Command
Dim conn作为ADODB连接
作为ADODB.参数的Dim prm
Dim connectionString作为字符串
将SQL设置为字符串
Set conn=新ADODB.connection
Set cmd=New ADODB.Command
DBPath=“path\to\file.xlsm”
connectionString=“Provider=MSDASQL.1;DSN=Excel文件;DBQ=“&DBPath&”HDR=Yes'”
SQL=“插入[”&tableName&“$”([Year]、[Type]、[role])值(p1、p2、p3)”
“开放连接
连接开放连接字符串
'设置命令文本
cmd.CommandText=SQL
cmd.CommandType=adCmdText
'设置连接
cmd.ActiveConnection=conn
'在SQL查询中设置参数
设置prm=cmd.CreateParameter(“p1”,adInteger,adParamInput)
cmd.Parameters.Append prm
命令参数(“p1”)。值=1
设置prm=cmd.CreateParameter(“p2”,adInteger,adParamInput)
cmd.Parameters.Append prm
命令参数(“p2”)。值=2
设置prm=cmd.CreateParameter(“p3”,adInteger,adParamInput)
cmd.Parameters.Append prm
命令参数(“p3”)。值=3
cmd.Execute
关闭连接
端函数
我在excel-2010内部使用VBA,我正在对计算机上的外部excel文件运行查询。我得到的参数太少,预计会有三个错误


请注意,如果值是字符串文字,则此代码有效,因此问题在于参数。

将参数命名为以@开头的参数,如@p1

Public Function testInsert(tableName作为字符串,dType作为字符串,role作为字符串,
财政(如字符串)
Dim cmd作为ADODB.Command
Dim conn作为ADODB连接
作为ADODB.参数的Dim prm
Dim connectionString作为字符串
将SQL设置为字符串
Set conn=新ADODB.connection
Set cmd=New ADODB.Command
DBPath=“path\to\file.xlsm”
connectionString=“Provider=MSDASQL.1;DSN=Excel文件;DBQ=“&DBPath&”HDR=Yes'”
SQL=“插入[”&tableName&“$”([Year],[Type],[role])值(@p1,@p2,@p3)”
“开放连接
连接开放连接字符串
'设置命令文本
cmd.CommandText=SQL
cmd.CommandType=adCmdText
'设置连接
cmd.ActiveConnection=conn
'在SQL查询中设置参数
设置prm=cmd.CreateParameter(“@p1”,adInteger,adParamInput)
cmd.Parameters.Append prm
命令参数(“@p1”)。值=1
设置prm=cmd.CreateParameter(“@p2”,adInteger,adParamInput)
cmd.Parameters.Append prm
cmd.参数(“@p2”)。值=2
设置prm=cmd.CreateParameter(“@p3”,adInteger,adParamInput)
cmd.Parameters.Append prm
命令参数(“@p3”)。值=3
cmd.Execute
关闭连接
端函数

您没有遵循昨天的回复:(您不需要Prm变量,但是如果您使用它,那么您应该使用一个参数

Public Function testInsert(tableName作为字符串,dType作为字符串,role作为字符串,
财政(如字符串)
Dim cmd作为ADODB.Command
Dim conn作为ADODB连接
作为ADODB.参数的Dim prm1
作为ADODB.参数的Dim prm2
作为ADODB.参数的Dim prm3
Dim connectionString作为字符串
将SQL设置为字符串
Set conn=新ADODB.connection
Set cmd=New ADODB.Command
DBPath=“path\to\file.xlsm”
connectionString=“Provider=MSDASQL.1;DSN=Excel文件;DBQ=“&DBPath&”HDR=Yes'”
SQL=“插入[”&tableName&“$”([Year],[Type],[role])值(?,,?)
“开放连接
连接开放连接字符串
'设置命令文本
cmd.CommandText=SQL
cmd.CommandType=adCmdText
'设置连接
cmd.ActiveConnection=conn
'在SQL查询中设置参数
设置prm1=cmd.CreateParameter(“@p1”,adInteger,adParamInput)
cmd.Parameters.Append prm1
命令参数(“@p1”)。值=1
设置prm2=cmd.CreateParameter(“@p2”,adInteger,adParamInput)
cmd.Parameters.Append prm2
cmd.参数(“@p2”)。值=2
设置prm3=cmd.CreateParameter(@p3),adInteger,adParamInput)
cmd.Parameters.Append prm3
命令参数(“@p3”)。值=3
您根本不需要这些prm1、prm2、prm3:

“在SQL查询中设置参数”
cmd.Parameters.Append cmd.CreateParameter(“@p1”,adInteger,adParamInput)
cmd.Parameters.Append cmd.CreateParameter(“@p2”,adInteger,adParamInput)
cmd.Parameters.Append cmd.CreateParameter(“@p3”,adInteger,adParamInput)
命令参数(“@p1”)。值=1
cmd.参数(“@p2”)。值=2
命令参数(“@p3”)。值=3

Ok,但不是说期望三个参数的参数太少。给每个参数指定不同的名称,如prm1、prm2、PRM3。这正是我所做的,我得到了相同的错误,期望三个参数。但是我不能使用真实数据,如果可以的话,必须在明天的个人计算机上进行?@User,不,这周六不会工作。但是如果你你喜欢我能在今天(美国东部时间下午3点到7点)之间完成。让我们一起来吧。