Nano Hash - криптовалюты, майнинг, программирование

Загрузка данных из Excel 365 на сервер Azure Sql с использованием только VBA

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

Внутри excel вы можете только создать подключение к Azure SQL для импорта данных в excel, улица с односторонним движением, нет возможности установить подключение, из которого вы можете загрузиться.

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

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

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

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

Ошибка подключения VBA к Azure

Вот функция с драйвером, которая, как я полагаю, является проблемой или разрешением, потому что существует azure 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

Очевидно, я заменил сервер, базу данных, пользователя и пароль


  • Эй, мистер отрицательный голос, найдите мне одну полезную ссылку, чтобы сделать это в VBA, и вы можете утроить мой отрицательный голос. 30.09.2019
  • Итак, вы не можете INSERT INTO... из vba, но можете SELECT * FROM..? 30.09.2019
  • @Scott Craner ... Я мог бы, если бы нашел, какой драйвер использовать, особенно для Azure Sql Db. 30.09.2019
  • вы видели здесь ответ? social.msdn.microsoft.com/Forums/en-US/ 30.09.2019
  • @Scott Craner ... Ну, есть доказательства того, что алфавит искажает результаты, почему эта ссылка не появляется на первых двух страницах этого поиска. Экспорт данных в Azure Sql Db с помощью Excel VBA ... Последний драйвер все еще 2012? 30.09.2019
  • Я не знаю ответа на второй вопрос, но первый, я использовал vba connect to azure sql server в качестве моего поиска 30.09.2019
  • @Scott Craner ActiveX Data Object 2.6 является последним, я использовал его 10 лет назад, я бы подумал, что к настоящему времени гораздо более поздняя версия 30.09.2019
  • Если он не сломался...¯_(ツ)_/¯ 30.09.2019
  • @Scott Craner ... см. Обновление OP, определенно проблема с драйвером, ссылкой или разрешением, что я и получил, прежде чем начал искать что-то конкретное для Azure. 01.10.2019
  • Теперь вы преодолели то, что я знаю. Извиняюсь. 01.10.2019
  • @dinotom эта ошибка означает, что драйвер не установлен; Вы установили драйвер? 01.10.2019
  • @Sorceri, да, я установил собственный драйвер клиента 12 01.10.2019

Ответы:


1

После МНОГО поиска различных примеров строк подключения И около 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

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

01.10.2019

2

Перепробовав множество решений, я пришел к выводу, что самое главное

используя справочник Activex Data Object 2.8, SQL Native Client 11. Использование более низкой версии, кажется, работает лучше всего

для моей строки подключения я использую формат ниже

connection = "Driver={SQL Server Native Client 11.0};" & _
                        "Server=tcp:YourDataBase.net,1433;" & _
                        "Database=YourDatabaseName;" & _
                        "Uid=XXXX;" & _
                        "Pwd=XXXXXXX;" & _
                        "Encrypt=yes;Connection Timeout=30;"

Надеюсь, это поможет другим людям. Это было очень неприятно для меня

05.02.2020
  • Спасибо за публикацию, но я отметил в коде (в качестве комментария), который я разместил в качестве ответа, что эти две библиотеки были единственными, с которыми я работал. 24.09.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..