Установите соединение ADODB только для чтения с базой данных через VBA / Excel - PullRequest
2 голосов
/ 17 мая 2019

Я давно использую этот код, но недавно клиент спросил меня, возможно ли установить соединение как соединение только для чтения, чтобы убедиться, что никакие данные не были перезаписаны при использовании моего Excel-инструмента .

Есть много предыдущих сообщений, которые решают эту проблему, когда данные считываются из файла, но я не могу найти никаких ответов, которые делают это при подключении к базе данных (ну, по крайней мере, ни один, который работал по крайней мере).

Я обычно помещаю код в модуль класса и затемняю его в своем коде, где мне нужно отправить SQL. Самое замечательное в модуле класса - это то, что у меня никогда не возникало проблем с открытием соединения после остановки выполнения.

Кто-нибудь знает, что добавить в этот код, чтобы убедиться, что соединение не может быть использовано для отправки обновлений SQL?

И да, в идеале это должно быть установлено на SQL-сервере, а не на моем конце, но ...:)


Option Explicit

Public Connection As ADODB.Connection

Public Sub init()

    Dim Server As String
    Dim Database As String

    Server = Worksheets("K").Cells(3, 3) '  <== This cell contains the name of the Database Server
    Database = Worksheets("K").Cells(3, 4) '  <== This cell contains the name of the Database

    Set Connection = New ADODB.Connection

    With Connection
        .Provider = "MSDASQL"
        .ConnectionString = "DRIVER={SQL Server};SERVER=" + Server + ";DATABASE=" + Database
        .ConnectionString = .ConnectionString + ";Trusted_Connection=Yes"
        .CommandTimeout = 60000
        .Open
    End With

End Sub

Public Function RunSQL(SQL As String) As ADODB.Recordset

  Set RunSQL = Connection.Execute(SQL)

End Function

...