Как выполнить запрос SQL в книге Excel, сохраненной в OneDrive? - PullRequest
0 голосов
/ 08 января 2019

Я хотел бы запускать SQL-запросы для таблиц, содержащихся в одной книге Excel. Мой код VBA использует ADODB для выполнения этих запросов SQL.

Не удается открыть соединение при сохранении книги в OneDrive, но работает при сохранении книги на локальном диске.

Как запустить SQL для таблиц в одной книге Excel, сохраняя при этом в OneDrive?

Код работает, когда книга сохраняется локально, но не в OneDrive. Единственное изменение - путь к файлу, который в каждом случае выглядит довольно по-разному:

OneDrivePathExample = "https://d.docs.live.net/....xlsb"

LocalPathExample = "C:\My Documents\....xlsb"

Я экспериментировал с несколькими вещами относительно пути к файлу в строке подключения, но, что неудивительно, они не работали:

  1. Оригинал

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=https://d.docs.live.net/.../Documents/Financial Tracker.xlsb;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1";
    
  2. Замена "/" на "\"

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=https:\\d.docs.live.net\...\Documents\Financial Tracker.xlsb;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1";`
    
  3. Добавление квадратных скобок вокруг пути

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[https://d.docs.live.net/.../Documents/Financial Tracker.xlsb];Extended Properties="Excel 12.0;HDR=Yes;IMEX=1";
    
  4. Добавление кавычек вокруг пути

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source="https://d.docs.live.net/.../Documents/Financial Tracker.xlsb";Extended Properties="Excel 12.0;HDR=Yes;IMEX=1";
    

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

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

Вот мой код:

Function OpenRST(strSQL As String) As ADODB.Recordset
''Returns an open recordset object

Dim cn As ADODB.Connection
Dim strProvider As String, strExtendedProperties As String
Dim strFile As String, strCon As String

strFile = ThisWorkbook.FullName

strProvider = "Microsoft.ACE.OLEDB.12.0"
strExtendedProperties = """Excel 12.0;HDR=Yes;IMEX=1"";"


strCon = "Provider=" & strProvider & _
     ";Data Source=" & strFile & _
     ";Extended Properties=" & strExtendedProperties

Set cn = CreateObject("ADODB.Connection")
Set OpenRST = CreateObject("ADODB.Recordset")

cn.Open strCon  ''This is where it fails

OpenRST.Open strSQL, cn

End Function

В строке cn.Open strCon появляется следующая ошибка:

Ошибка времени выполнения '-2147467259 (80004005)';
Сбой метода «Открыть» объекта «_Connection»

Спасибо!

...