【问题标题】:ADODB Recordset 256 Char Length IssueADODB 记录集 256 字符长度问题
【发布时间】:2019-05-07 04:34:52
【问题描述】:

我在具有 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 个字符。

预期结果

我需要检索其中包含任意数量字符的整个数据。

【问题讨论】:

标签: excel vba


【解决方案1】:

要明确:
这只是一种解决方法,因为您使用 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

【讨论】:

  • 使用 Excel 文件作为 ADO 的数据源与在 Excel 中打开它并使用 Excel 对象模型有很大不同。
  • @GSerg 当然,但是 OP 说“我在 excel 表中使用此代码从另一个表中读取一些数据”。所以它可能是一种解决方法。
  • 感谢@GSerg ....我的问题使用您建议的方法解决!!!
  • 再次澄清一下,这个方法是我建议的:)
猜你喜欢
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多