2015-07-03 19 views
2

我正尝试使用VBA中的嵌入式SQL访问SQL数据库。问题在于定义我想访问的条件(ID > @Identifie是导致问题的部分)。当我运行代码时,我得到必须声明标量变量@Identifie。但是,当我到我的本地窗口时,@Identifie被正确声明并具有我在单元格K6中分配的值。此外,如果我将我的条件(ID > @Identifie)中的@Identifie替换为某个值,我的代码运行完美,因此没有其他错误。看来我的问题来自append方法,但我无法弄清楚我做错了什么。使用参数化sql查询时必须声明标量变量

这里是我的代码:

(我删除了这篇文章的连接字符串,但这显然不是问题):

Option Explicit 
Option Base 1 

Sub LoadData() 

Application.ScreenUpdating = False 

Dim cn As New ADODB.Connection 

Dim rs As New ADODB.Recordset 

Dim cmd As New ADODB.Command 

Dim lastID As Double 

Dim parametre As New ADODB.Parameter 

Dim Last_total_ID As Double 

Last_total_ID = ActiveWorkbook.Worksheets("Consolidated").Range("K6").Value 

cn.ConnectionString = "" 
cn.Open 

Set parametre = cmd.CreateParameter(Name:="@Identifie", Type:=adDouble, Direction:=adParamInput) 

parametre.Value = Last_total_ID 

cmd.Parameters.Append parametre 

cmd.ActiveConnection = cn 

cmd.CommandText = "Select ID, Issuer,LaunchDate,SettleDate,CADAmount,Description,Price,Currency, Maturity,IssuerID, Coupon FROM dbo.tblHistoricalIssuanceStats WHERE (IsProvy = 1) AND (ID > @Identifie)" 

Set rs = cmd.Execute 
+0

它应该是'Set cmd.ActiveConnection = cn',因为cn是一个对象 – barrowc

回答

0

为什么不:

cmd.CommandText = "Select ID, Issuer,LaunchDate,SettleDate,CADAmount,Description,Price,Currency, Maturity,IssuerID, Coupon FROM dbo.tblHistoricalIssuanceStats WHERE (IsProvy = 1) AND (ID > " & Last_total_ID & ");" 

我不要以为你需要使用ADODB参数。