У меня проблема с моей строкой подключения для подключения документа Excel к базе данных доступа.

Когда я запускаю это, появляется ошибка «Несоответствие типов». Но это касается только Excel 2013, Excel 365 работает нормально.

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

Путь к источнику данных составляет всего 154 символа.

Dim strTable As String, strDrive As String, strDriTab As String
Dim rngDes As Range


If .Range("b7").Value = "" Then
.Range("b4").Value = rngTbl.Value
.Range("b4").Font.Bold = True
.Range("b4").Font.Size = 12
Set rngDes = .Range("b7")
Else
Dim rngFormat As Range
Set rngFormat = .Range("b60000").End(xlUp).Offset(3, 0)
rngFormat = rngTbl.Value
rngFormat.Font.Bold = True
rngFormat.Font.Size = 12
Set rngDes = .Range("b60000").End(xlUp).Offset(3, 0)
End If

With ActiveSheet.QueryTables.Add(Connection:=Array( _
    "OLEDB;Provider:=Microsoft.ACE.OLEDB.12.0;Password:="""";User ID:=Admin;Data Source:=" & strDrive & strTable & ";Mode:=ReadWrite;Extended Properties" _
    , _
    ":="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path:="""";Jet OLEDB:Database Password:=""*******"";Jet OLEDB:Engine Type:=5;Jet OLEDB:Dat" _
    , _
    "abase Locking Mode:=0;Jet OLEDB:Global Partial Bulk Ops:=2;Jet OLEDB:Global Bulk Transactions:=1;Jet OLEDB:New Database Password:=""""" _
    , _
    ";Jet OLEDB:Create System Database:=False;Jet OLEDB:Encrypt Database:=False;Jet OLEDB:Don't Copy Locale on Compact:=False;Jet OLEDB:" _
    , "Compact Without Replica Repair:=False;Jet OLEDB:SFP:=False"), Destination:= _
    rngDes)

    .CommandType = xlCmdSql
    .CommandText = sql
    .Name = rngDes.Address
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .SourceDataFile = strDrive & strTable
    .Refresh BackgroundQuery:=False
End With

Любая помощь будет принята с благодарностью.

0
Hulk Smash 93 22 Окт 2019 в 13:04

1 ответ

Лучший ответ

Функция Array() ограничена 255 символами для каждого элемента, что может вызывать вашу проблему в зависимости от длины аргументов strDrive и strTable. К счастью, здесь нет необходимости - вы должны просто передать аргумент Connection как простое строковое значение:

Connection:="OLEDB;Provider:=Microsoft.ACE.OLEDB.12.0;Password:="""";User ID:=Admin;Data Source:=" & strDrive & strTable & ";Mode:=ReadWrite;Extended Properties:="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path:="""";Jet OLEDB:Database Password:=""*******"";Jet OLEDB:Engine Type:=5;Jet OLEDB:Database Locking Mode:=0;Jet OLEDB:Global Partial Bulk Ops:=2;Jet OLEDB:Global Bulk Transactions:=1;Jet OLEDB:New Database Password:="""";Jet OLEDB:Create System Database:=False;Jet OLEDB:Encrypt Database:=False;Jet OLEDB:Don't Copy Locale on Compact:=False;Jet OLEDB:Compact Without Replica Repair:=False;Jet OLEDB:SFP:=False"
1
Rory 22 Окт 2019 в 10:29