Загрузка данных из Excel 365 на Azure Sql Server с использованием только VBA - PullRequest
1 голос
/ 30 сентября 2019

Хотя я был довольно продвинутым человеком, используя VBA много месяцев назад, очевидно, этот парень покинул здание. Я только что восстановил некоторые очень большие наборы данных о товарах и акциях, которые у меня были в файлах Excel за много лет назад. Я собрал их все вместе в один файл и пытаюсь загрузить данные на свой SQL-сервер Azure. Я нигде не могу найти ничего о том, как загружать данные в Azure, но я нахожу много статей о загрузке из Azure.

Внутри Excel вы можете только создать соединение с SQL Azure, чтобы ИМПОРТИРОВАТЬ данные в Excel, улица с односторонним движением,нет способа установить соединение, с которого вы можете загрузить.

Любая помощь приветствуется. Я всегда могу использовать старые CSV, читать их с помощью c # в моем веб-приложении, но я могу обновлять данные до текущей недели каждую неделю в этом одном файле, и я предпочел бы написать всю подпрограмму в VBA для получения данных, проверитьи загрузите его в Azure.

Примечание. Да, я знаю, как использовать подключения ADODB, но не могу найти драйверы, специфичные для использования Azure SQL

Дальнейшее обновление:

Используя следующее, и я попробовал 2 дюжины вариаций, каждый раз выдает эту ошибку. И я установил Sql Native Client Driver # 12

VBA to Azure connection error

Вот функция с драйвером, который, как я считаю, является проблемой, или разрешение,потому что лазурный sql db существует. Это строка подключения с портала

Public Function ExportExcelDataToAzureDb(wsSource As Worksheet) As Boolean

    'I am using Activex Data Object 2.8 reference
    Dim connectionString As String
    Dim oConn As ADODB.Connection
    Dim record As ADODB.Recordset
    Dim cmd As ADODB.Command

    connectionString = "Driver={SQL Server Native Client 12.0};Server=tcp:myazuresqlserver.database.windows.net,1433;Initial Catalog=myappdb;Persist Security Info=False;User ID=myuser;Password={mypass};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
    Set oConn = New ADODB.Connection
    oConn.connectionString = connectionString

    oConn.Open

    'load the data
    ExportExcelDataToAzureDb = True

End Function

Очевидно, я заменил сервер, БД, пользователя и пароль

1 Ответ

0 голосов
/ 01 октября 2019

После МНОГО поиска примеров различных строк подключения И около 100 различных тестов вариаций строк.

Вот правильный формат строки подключения, который нужно использовать с Excel VBA для импорта / экспорта данных из базы данных SQL Azure. Я предоставляю всю свою функцию для вставки данных, некоторые части удалены из соображений безопасности.

Option Explicit
Public dbConn As ADODB.Connection
Public adodbRecordSet As ADODB.recordSet
Public rsc As ADODB.recordSet
Public Const AzureDataSource As String = "tcp:yourazuredbservername.database.windows.net,1433"
Public Const AzureDbName As String = "yourazuredbname"
Public Const dbDriverProvider As String = "SQLNCLI11"
'I am using Activex Data Object 2.8 reference, SQL Native Client 11

Public Function ExportExcelDataToAzureDb(wsSource As Worksheet, dataRange As Range) As Boolean

    Dim connectionString As String, sql As String
    Dim cnt As Integer
    Dim cCell As Range

    connectionString = "Provider=" & dbDriverProvider & ";" & "Password=yourpassword;User ID=yourusername; " & _
                    "Initial Catalog=" & AzureDbName & ";" & _
                    "Data Source=" & AzureDataSource & ";"""

    Set dbConn = New ADODB.Connection
    Set adodbRecordSet = New ADODB.recordSet

    dbConn.connectionString = connectionString
    dbConn.Open

    ' do work here
    cnt = 0
    With wsSource
        For Each cCell In dataRange                    

            sql = "your insert statement here"

             adodbRecordSet.Open sql, dbConn, adOpenDynamic, adLockReadOnly, adCmdText
             cnt = cnt + 1
        Next cCell
    End With

    'clean up
    dbConn.Close
    ' log count of uploaded data records
    Call PrintLog("Records loaded on " & Now & ": " & cnt & " symbol records")
    ExportExcelDataToAzureDb = True

End Function

Если кто-нибудь знает, как заставить это работать с более поздними версиями данных ActiveXObject или Собственная клиентская библиотека SQL, пожалуйста, оставьте другой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...