繁体   English   中英

VBA连接到SQL Server

[英]VBA connecting to SQL Server

将VBA连接到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

我只想从名为[dbo].[Version]的表中选择所有值,但是当我执行它时,出现一个错误:

编译错误:预期函数或变量'

并突出显示带有rs.Open的行。

您能帮我解决这个问题吗?

Open是一种方法,不能使用=设置。

您可能想要这样的东西:

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

调用Open ,就可以使用EOF属性和MoveNext方法遍历Recordset的行:

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

将您的代码更改为以下内容:

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是一个从零开始的集合,这意味着第一个字段是0,而不是1。您可以通过rs.Fields(1),rs.Fields(2)等获取后续字段。或者您可以将Field名称与语法rs.Fields(“ MyFieldName”)。

请注意,在使用字符串命令(“ SELECT * FROM ..”)时,CommandType为adCmdText。 Recordset的语法为SET rs = cmd.Execute。 另外,您必须在循环中调用MoveNext,否则您将陷入循环!

暂无
暂无

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

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