Набор записей ADODB 256 символов длины - PullRequest
1 голос
/ 06 мая 2019

Я использую код набора записей ниже на 64-битной машине Windows с 32-битным Excel, и при извлечении данных извлекаются только 256 символов.

Этот код считывает данные из таблицы Excel "План тестирования" и содержитнекоторый столбец, который содержит данные более 256 символов.В настоящее время он извлекает только 256 символов для этих столбцов.

Мне нужно получить целые данные с любыми числами символов в нем.

Я опробовал следующие варианты этой проблемы:

  1. Я попытался обновить системный реестр "TypeGuessRows" до 0, однако он не работает на моем компьютере.

  2. Я изменил формат столбца на Общий.

    Sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';IMEX=1"
    
    conn.Open Sconnect
    
    Query = "Select * from [Test Plan$] where [Optimized Scenario No] = '" + OptimizedScenarioNo + "' and [Type] = 'Today' order by [Seq]"
            rsOptimizedScenarioCreation.Open Query, conn
    

Фактический результат:

Этот код считывает данные из таблицы Excel «План тестирования» и содержит столбец, который содержит данные более 256 символов.В настоящее время он извлекает только 256 символов для этих столбцов.

Ожидаемый результат

Мне нужно получить целые данные с любыми числами символов в нем.

1 Ответ

0 голосов
/ 06 мая 2019

Чтобы быть понятным:
Это просто обходной путь, так как вы используете Excel в качестве источника данных для Excel ...


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

Private Sub CopyWithoutSQL()
    Dim ws As Worksheet
    Dim n As Long
    Dim OptimizedScenarioNo As String

    Set ws = ActiveWorkbook.Sheets("Test Plan")
    OptimizedScenarioNo = "whatever"

    ' switch all filters off
    If Not ws.AutoFilterMode Then ws.Rows(1).AutoFilter
    If ws.AutoFilter.FilterMode Then ws.ShowAllData

    ' filter according to SQL statement
    n = ws.Range("1:1").Find(What:="Optimized Scenario No", After:=Range("A1")).Column
    ws.UsedRange.AutoFilter Field:=n, Criteria1:="=" & OptimizedScenarioNo
    n = ws.Range("1:1").Find(What:="Type", After:=Range("A1")).Column
    ws.UsedRange.AutoFilter Field:=n, Criteria1:="Today"

    ' sort according to SQL statement
    n = ws.Range("1:1").Find(What:="Seq", After:=Range("A1")).Column
    With ws.Sort
        .SortFields.Clear
        .Header = xlYes
        .SortFields.Add key:=Columns(n), SortOn:=xlSortOnValues, Order:=xlAscending
        .SetRange ws.UsedRange
        .Orientation = xlTopToBottom
        .Apply
        .SortFields.Clear
    End With

    ' use the remaining visible range, e. g. copy it to somewhere
    ws.UsedRange.Copy ActiveWorkbook.Sheets(2).Range("A1")
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...