我正在为用户编写一些Excel VBA,以便能够使用ADODB将记录插入到SQL Server表中。这很好用:
Dim conn As New ADODB.connection
conn.Open "<my connection string>"
Dim records As New ADODB.Recordset
records.CursorLocation = adUseClient
records.Open "SELECT TOP 1 * FROM [MyTable]", conn, adOpenStatic, adLockBatchOptimistic, adCmdText
' (Add some stuff here.)
records.UpdateBatch
然而,有些东西在唠叨我:是否有可能让记录集指向正确的表而不预先SELECT
?这可能会成为一个非常大的表,所以SELECT * FROM [MyTable]
已经出局了。我用TOP 1
限制它,但我只是写一个,所以感觉我不应该这样做!
documentation听起来好像你可以在Source参数中放一个表名:
使用可选的Source参数使用以下方法之一指定数据源:a Command对象变量,SQL语句,存储过程,表名,[...]
在实践中,这对我不起作用,以下所有内容只是出现以下消息,就像它认为我正在调用存储过程一样:
records.Open "MyTable", conn, ' [...]
records.Open "[MyTable]", conn, ' [...]
records.Open "[dbo].[MyTable]", conn, ' [...]
对程序'MyTable'的请求失败,因为'MyTable'是一个表对象。
我是否缺少某些语法,或者我只需要使用SELECT
?