ADODB记录集256个字符长度问题

时间:2019-05-06 13:08:29

标签: excel vba

我在具有32位excel的64位Windows计算机上以记录集代码运行,而数据检索仅检索到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 :(得分:0)

要明确:
这只是一种解决方法,因为您将Excel用作Excel的数据源...


您可以根据SQL语句对数据源工作表进行过滤和排序,并将剩余的可见范围用于其他目的,例如G。将其复制到另一张纸上:

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