繁体   English   中英

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文件运行查询。 我得到的参数太少,期望出现三个错误。

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

您没有听从昨天的回复:(您不需要该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

以@@开头的名称参数以'@'开头

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM