2017-06-14 1 views
0

VBAは、SQL Serverに接続するSQL ServerにVBAを接続するとき、私は問題を抱えています

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 

私はちょうど[dbo].[Version]という名前のテーブルからすべての値を選択したいが、私はそれを実行すると、私はエラーを取得します:

Compile error: Expected Function or Variable'

となり、rs.Openの行が強調表示されます。

この問題の解決方法を教えてください。

答えて

0

Openは方法であり、=で設定することはできません。

あなたは、おそらくこのような何かしたい:あなたはOpen呼ばれたら

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

を、あなたはEOF財産とMoveNext方法を使用してレコードセットの行を反復処理することができます

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
はあなたを変更

コード:

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はゼロベースのコレクションで、最初のフィールドが1ではなく0であることを示します。 rs.Fields(1)、rs.Fields(2)などで後続のフィールドを取得できます。フィールド名構文はrs.Fields( "MyFieldName")です。

注意文字列コマンド( "SELECT * FROM ..")を使用する場合、CommandTypeはadCmdTextです。レコードセットの構文は、SET rs = cmd.Executeです。また、ループ内でMoveNextを呼び出さなければなりません。そうしないと、ループに詰まってしまいます!

関連する問題