ADODB 通过 Excel 连接到 SQL-服务器

ADODB Connection to SQL-Server via Excel

我之前打开过一个类似的问题没有用: '

但由于已经尝试了一些东西,我想我会再试一次。 问题出在“打开”命令上。我收到运行时错误 80040e4d 用户登录时出错 'XXXX'

我查看了一个堆栈 link 有类似的问题,不幸的是也没有帮助:

我还尝试使用 Excel 中的连接向导,它起作用了,所以我的连接数据似乎是正确的。我想在我的模块中使用 excel 用于我的代码的连接字符串,但提供程序的主要区别是“Microsoft.Mashup.OleDb.1”并没有真正改变任何东西。 这是我的代码: '''

Sub DBCOnnectII()
   Dim cnConn As ADODB.Connection
   Set cnConn = New ADODB.Connection
   With cnConn
       .Provider = "SQLOLEDB.1"
       .CursorLocation = adUseClient
       .ConnectionTimeout = 0
       .Properties("Data Source").Value = "VMSQL19"
       .Properties("Password").Value = "XXXX"
       .Properties("User ID").Value = "XXXX"
       .Properties("Initial Catalog").Value = "AuswertungenTest"
       .Open
   End With
   End Sub

'''

在这里尝试这种更简化的方法。确保添加正确的引用以使用 ADO 库。

Private Sub NonRecordset()
    Dim vbSql As String, cnnstr as String
    Dim cnn As ADODB.Connection
    Dim rs As New ADODB.Recordset

    vbSql = vbSql & "SQL STATEMENT" 
    Debug.Print ; vbSql
    Set cnn = New Connection
    cnnstr = "Provider=SQLOLEDB;Data Source=YOURSERVER;Initial Catalog=YOURDATABASE;User ID=USERNAME;Password=PASSWORD; Trusted_Connection=No"
    cnn.Open cnnstr
    ' cnn.Execute vbSql 'use this if just executing statement
    ' rs.Open vbSql, cnn 'use this if needing recordset
    ' if needing a recordset you'lll have to do something with said recordset:
    ' ThisWorkbook.Sheets("Sheet1").Range("A1").CopyFromRecordset rs
    
    cnn.Close
    Set cnn = Nothing
    
End Sub

我通过这个网站发现它有多复杂,它提供了所有可能的条目: https://www.connectionstrings.com/ole-db-driver-for-sql-server/

出于我对 ADO 的目的,以及一个受信任的连接(windows 已验证)是这个:

con.Open“提供商=MSOLEDBSQL;服务器=vmsql19;数据库=XXXX;Trusted_Connection=是;”

这里有一个 Inert Into 的例子。

Sub InsertInto()

'Declare some variables
Dim cnn As adodb.Connection
Dim cmd As adodb.Command
Dim strSQL As String

'Create a new Connection object
Set cnn = New adodb.Connection

'Set the connection string
cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Northwind;Data Source=your_server_name"

'Create a new Command object
Set cmd = New adodb.Command

'Open the Connection to the database
cnn.Open

'Associate the command with the connection
cmd.ActiveConnection = cnn

'Tell the Command we are giving it a bit of SQL to run, not a stored procedure
cmd.CommandType = adCmdText

'Create the SQL
strSQL = "UPDATE TBL SET JOIN_DT = '2013-01-22' WHERE EMPID = 2"

'Pass the SQL to the Command object
cmd.CommandText = strSQL


'Execute the bit of SQL to update the database
cmd.Execute

'Close the connection again
cnn.Close

'Remove the objects
Set cmd = Nothing
Set cnn = Nothing

End Sub

这里是 Select 的例子。

Sub ImportFromSQLServer()

Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr As String
Dim RS As ADODB.Recordset
Set RS = New ADODB.Recordset

Server_Name = "your_server_name"
Database_Name = "your_db_name"
'User_ID = "******"
'Password = "****"

SQLStr = "select distinct ID from mytable1"

Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & ";"

RS.Open SQLStr, Cn, adOpenStatic

    With Worksheets("Sheet1").Range("A1")
        .ClearContents
        .CopyFromRecordset RS
    End With

RS.Close
Set RS = Nothing
Cn.Close
Set Cn = Nothing

End Sub