2017-09-13 2 views
0

Ich versuche, eine parametrisierte SQL-Abfrage mit ADODB auszuführen, aber ich erhalte die Fehlermeldung "Muss die skalare Variable @Id deklarieren".VBA: Verwenden von ADODB-Parameter

Ich bin ein komplettes noob bei VBA und ich habe versucht zu lesen, wie es getan wird, als auch nach einem Beispiel, aber ohne Erfolg.

Hat jemand eine Vorstellung davon, was mit meinem Code falsch sein könnte?

Public Function IndataTest() 


Dim conn As ADODB.Connection 
Dim ConnString As String 
ConnString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=DB;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=B5037093;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=DB" 



Dim sqlstr As String Dim rs As Object Dim cmd As Object Dim ParamId As Object Dim Id As String 

Id = 1084924 

sqlstr = sqlstr & "use DB " sqlstr = sqlstr & "Select * " & vbCrLf sqlstr = sqlstr & "From tblA" & vbCrLf sqlstr = sqlstr & "where fldA = @Id" 


Set conn = New ADODB.Connection conn.Open ConnString 

Set cmd = CreateObject("ADODB.Command") cmd.ActiveConnection = conn cmd.CommandText = sqlstr 

Set ParamId = cmd.CreateParameter("@Id", 129, 1, 52, Id) cmd.Parameters.Append ParamId 

Set rs = CreateObject("ADODB.Recordset") rs.Open cmd 


If Not rs.EOF Then 
    ' Transfer result. 
    Sheets("Valuta").Cells(5, 5).CopyFromRecordset rs ' Close the recordset 
    rs.Close Else 
    MsgBox "Error: No records returned.", vbCritical End If 

' Clean up If CBool(conn.State And adStateOpen) Then conn.Close Set conn = Nothing Set rs = Nothing 

End Function 

Antwort

0

keinen Parameter Verwenden Sie, bauen Sie Ihr Wert in der Zeichenfolge

Public Function IndataTest() 


Dim conn As ADODB.Connection 
Dim ConnString As String 
ConnString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=DB;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=B5037093;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=DB" 
    Dim sqlstr As String 
    Dim rs As new adodb.recordset 
    Set conn = New ADODB.Connection 
    conn.Open ConnString 

    sqlstr = "use DB " 
    sqlstr = sqlstr & "Select * " & vbCrLf 
    sqlstr = sqlstr & "From tblA" & vbCrLf 
    sqlstr = sqlstr & "where fldA = " & 1084924 
    set rs = conn.execute(sqlstr) 

etc

Verwandte Themen