2017-06-14 4 views
0

Ich habe Probleme, wenn VBA Verbindung zu SQL Server:VBA eine Verbindung zu SQL Server

Sub ConnectSQLServer() 

Dim cmd As ADODB.Command 
Dim conn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim strConn As String 

Dim par As ADODB.Parameter 
Dim strSQL As String 

strConn = "DRIVER=SQL Server;SERVER=CHU-AS-0004;DATABASE=RTC_LaplaceD_DEV;Trusted_Connection=Yes;" 

Set conn = New ADODB.Connection 
conn.Open strConn 

Set cmd = New ADODB.Command 
cmd.CommandText = "dbo.Version" 
cmd.CommandType = adCmdStoredProc 
cmd.ActiveConnection = conn 

rs.Open = "SELECT * FROM [dbo].[Version]" 

cmd.Execute rs 
Set conn = Nothing 
Set cmd = Nothing 


sConnString = "" 
End Sub 

Ich möchte nur alle Werte aus der Tabelle [dbo].[Version] Namen wählen, aber wenn ich es ausführen, bekomme ich eine Fehlermeldung:

Compile error: Expected Function or Variable'

und die Linie mit rs.Open hervorgehoben.

Würdest du mir helfen, dieses Problem zu lösen?

Antwort

0

Open ist eine Methode und kann nicht mit = eingestellt werden.

Sie wollen wahrscheinlich etwas wie folgt aus:

rs.Open "SELECT * FROM [dbo].[Version]", conn 

Sobald Sie Open genannt, dann können Sie durch die Reihen Recordset durchlaufen mit der EOF Eigenschaft und die MoveNext Methode:

Do While Not rs.EOF 
    Debug.Print rs.Fields(1) 
    'You could also use rs!FieldName, where FieldName is the name of a column 
Loop 
0

ändern Code zu den folgenden:

Set cmd = New ADODB.Command 
cmd.CommandText = "SELECT * FROM [dbo].[Version]" 
cmd.CommandType = adCmdText 
cmd.ActiveConnection = conn 

Set rs = cmd.Execute 

Do While Not rs.EOF 
    'do something with rs.Fields(0) ' 
    rs.MoveNext 
Loop 
Set conn = Nothing 
Set cmd = Nothing 

rs.Fields ist eine auf Null basierende Sammlung, das heißt, das erste Feld ist 0, nicht 1. Sie können nachfolgende Felder von rs.Fields (1), rs.Fields (2) usw. erhalten. Oder Sie können Feldnamen verwenden , mit der Syntax rs.Fields ("MyFieldName").

Hinweis bei Verwendung eines Zeichenfolgenbefehls ("SELECT * FROM ..") ist der CommandType adCmdText. Die Syntax für das Recordset ist SET rs = cmd.Execute. Außerdem müssen Sie MoveNext in Ihrer Schleife aufrufen, sonst bleiben Sie in der Schleife stecken!