VBA ADO SQL 参数太少
VBA ADO SQL too few parameters
我之前问过这个问题,但我仍然卡住了,无法将参数放入 SQL 查询中。
Public Function testInsert(tableName As String, dType As String, role As String,
FiscalYear As String)
Dim cmd As ADODB.Command
Dim conn As ADODB.connection
Dim prm As ADODB.Parameter
Dim connectionString As String
Dim SQL As String
Set conn = New ADODB.connection
Set cmd = New ADODB.Command
DBPath = "path\to\file.xlsm"
connectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath &";HDR=Yes';"
SQL = "INSERT INTO [" & tableName & "$] ([Year], [Type], [role]) VALUES (p1, p2, p3)"
'Open connection
conn.Open connectionString
'Set command text
cmd.CommandText = SQL
cmd.CommandType = adCmdText
'Set connection
cmd.ActiveConnection = conn
'Set paramters in SQL query
Set prm = cmd.CreateParameter("p1", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("p1").Value = 1
Set prm = cmd.CreateParameter("p2", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("p2").Value = 2
Set prm = cmd.CreateParameter("p3", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("p3").Value = 3
cmd.Execute
conn.Close
End Function
我在 excel-2010 中使用 VBA 并且我 运行 查询我计算机上的外部 excel 文件。我得到的参数太少,期望出现三个错误。
请注意,如果值是字符串文字,则此代码有效,因此问题出在参数上。
名称参数以'@'开头,如@p1
Public Function testInsert(tableName As String, dType As String, role As String,
FiscalYear As String)
Dim cmd As ADODB.Command
Dim conn As ADODB.connection
Dim prm As ADODB.Parameter
Dim connectionString As String
Dim SQL As String
Set conn = New ADODB.connection
Set cmd = New ADODB.Command
DBPath = "path\to\file.xlsm"
connectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath &";HDR=Yes';"
SQL = "INSERT INTO [" & tableName & "$] ([Year], [Type], [role]) VALUES (@p1, @p2, @p3)"
'Open connection
conn.Open connectionString
'Set command text
cmd.CommandText = SQL
cmd.CommandType = adCmdText
'Set connection
cmd.ActiveConnection = conn
'Set paramters in SQL query
Set prm = cmd.CreateParameter("@p1", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("@p1").Value = 1
Set prm = cmd.CreateParameter("@p2", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("@p2").Value = 2
Set prm = cmd.CreateParameter("@p3", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("@p3").Value = 3
cmd.Execute
conn.Close
End Function
你没有按照昨天的回复:(你不需要那个 Prm 变量,但如果你使用它,那么你应该使用一个作为参数。
Public Function testInsert(tableName As String, dType As String, role As String,
FiscalYear As String)
Dim cmd As ADODB.Command
Dim conn As ADODB.connection
Dim prm1 As ADODB.Parameter
Dim prm2 As ADODB.Parameter
Dim prm3 As ADODB.Parameter
Dim connectionString As String
Dim SQL As String
Set conn = New ADODB.connection
Set cmd = New ADODB.Command
DBPath = "path\to\file.xlsm"
connectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath &";HDR=Yes';"
SQL = "INSERT INTO [" & tableName & "$] ([Year], [Type], [role]) VALUES (?, ?, ?)"
'Open connection
conn.Open connectionString
'Set command text
cmd.CommandText = SQL
cmd.CommandType = adCmdText
'Set connection
cmd.ActiveConnection = conn
'Set paramters in SQL query
Set prm1 = cmd.CreateParameter("@p1", adInteger, adParamInput)
cmd.Parameters.Append prm1
cmd.Parameters("@p1").Value = 1
Set prm2 = cmd.CreateParameter("@p2", adInteger, adParamInput)
cmd.Parameters.Append prm2
cmd.Parameters("@p2").Value = 2
Set prm3 = cmd.CreateParameter("@p3", adInteger, adParamInput)
cmd.Parameters.Append prm3
cmd.Parameters("@p3").Value = 3
您根本不需要那些 prm1、prm2、prm3:
'Set paramters in SQL query
cmd.Parameters.Append cmd.CreateParameter("@p1", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("@p2", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("@p3", adInteger, adParamInput)
cmd.Parameters("@p1").Value = 1
cmd.Parameters("@p2").Value = 2
cmd.Parameters("@p3").Value = 3
我之前问过这个问题,但我仍然卡住了,无法将参数放入 SQL 查询中。
Public Function testInsert(tableName As String, dType As String, role As String,
FiscalYear As String)
Dim cmd As ADODB.Command
Dim conn As ADODB.connection
Dim prm As ADODB.Parameter
Dim connectionString As String
Dim SQL As String
Set conn = New ADODB.connection
Set cmd = New ADODB.Command
DBPath = "path\to\file.xlsm"
connectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath &";HDR=Yes';"
SQL = "INSERT INTO [" & tableName & "$] ([Year], [Type], [role]) VALUES (p1, p2, p3)"
'Open connection
conn.Open connectionString
'Set command text
cmd.CommandText = SQL
cmd.CommandType = adCmdText
'Set connection
cmd.ActiveConnection = conn
'Set paramters in SQL query
Set prm = cmd.CreateParameter("p1", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("p1").Value = 1
Set prm = cmd.CreateParameter("p2", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("p2").Value = 2
Set prm = cmd.CreateParameter("p3", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("p3").Value = 3
cmd.Execute
conn.Close
End Function
我在 excel-2010 中使用 VBA 并且我 运行 查询我计算机上的外部 excel 文件。我得到的参数太少,期望出现三个错误。
请注意,如果值是字符串文字,则此代码有效,因此问题出在参数上。
名称参数以'@'开头,如@p1
Public Function testInsert(tableName As String, dType As String, role As String,
FiscalYear As String)
Dim cmd As ADODB.Command
Dim conn As ADODB.connection
Dim prm As ADODB.Parameter
Dim connectionString As String
Dim SQL As String
Set conn = New ADODB.connection
Set cmd = New ADODB.Command
DBPath = "path\to\file.xlsm"
connectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath &";HDR=Yes';"
SQL = "INSERT INTO [" & tableName & "$] ([Year], [Type], [role]) VALUES (@p1, @p2, @p3)"
'Open connection
conn.Open connectionString
'Set command text
cmd.CommandText = SQL
cmd.CommandType = adCmdText
'Set connection
cmd.ActiveConnection = conn
'Set paramters in SQL query
Set prm = cmd.CreateParameter("@p1", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("@p1").Value = 1
Set prm = cmd.CreateParameter("@p2", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("@p2").Value = 2
Set prm = cmd.CreateParameter("@p3", adInteger, adParamInput)
cmd.Parameters.Append prm
cmd.Parameters("@p3").Value = 3
cmd.Execute
conn.Close
End Function
你没有按照昨天的回复:(你不需要那个 Prm 变量,但如果你使用它,那么你应该使用一个作为参数。
Public Function testInsert(tableName As String, dType As String, role As String,
FiscalYear As String)
Dim cmd As ADODB.Command
Dim conn As ADODB.connection
Dim prm1 As ADODB.Parameter
Dim prm2 As ADODB.Parameter
Dim prm3 As ADODB.Parameter
Dim connectionString As String
Dim SQL As String
Set conn = New ADODB.connection
Set cmd = New ADODB.Command
DBPath = "path\to\file.xlsm"
connectionString = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath &";HDR=Yes';"
SQL = "INSERT INTO [" & tableName & "$] ([Year], [Type], [role]) VALUES (?, ?, ?)"
'Open connection
conn.Open connectionString
'Set command text
cmd.CommandText = SQL
cmd.CommandType = adCmdText
'Set connection
cmd.ActiveConnection = conn
'Set paramters in SQL query
Set prm1 = cmd.CreateParameter("@p1", adInteger, adParamInput)
cmd.Parameters.Append prm1
cmd.Parameters("@p1").Value = 1
Set prm2 = cmd.CreateParameter("@p2", adInteger, adParamInput)
cmd.Parameters.Append prm2
cmd.Parameters("@p2").Value = 2
Set prm3 = cmd.CreateParameter("@p3", adInteger, adParamInput)
cmd.Parameters.Append prm3
cmd.Parameters("@p3").Value = 3
您根本不需要那些 prm1、prm2、prm3:
'Set paramters in SQL query
cmd.Parameters.Append cmd.CreateParameter("@p1", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("@p2", adInteger, adParamInput)
cmd.Parameters.Append cmd.CreateParameter("@p3", adInteger, adParamInput)
cmd.Parameters("@p1").Value = 1
cmd.Parameters("@p2").Value = 2
cmd.Parameters("@p3").Value = 3