【问题标题】:Excel-VBA SQL query returns blank when even if there is one record in the column即使列中有一条记录,Excel-VBA SQL查询也会返回空白
【发布时间】:2018-09-13 04:06:54
【问题描述】:

我正在 Excel VBA 中编写 SQL 查询,但它返回空白列(不读取值)

查询 - 从 [TableName] 中选择不同的 [Column1]

[Column1] 中有 29k 行,其中第 48 行有一些值,而其他所有行都为空(空白)。上面的代码只返回空(空白)值。但是我测试了一些案例,以下是我的观察 -

1.如果我从第 48 行复制值并移动到第 1 行(删除 第 48 行的原始值),查询有效

  1. 如果我在列中添加一些其他值,查询会起作用,有时它并不取决于我在哪些行中添加值

  2. 我检查了 [TableName] 的范围,它涵盖了所需的列和行

  3. 查询在具有多个值的列上运行良好
  4. 尝试更改单元格的格式,但没有帮助

如果有人能告诉我为什么会发生这种情况以及我应该如何继续纠正这个问题,我们将不胜感激。

【问题讨论】:

  • 可以显示sql查询吗?
  • 如果将值移动到第 2 行,查询是否有效(即检查它是否仅在某些数据位于第 1 行时才有效)?另外,表中是否还有其他列,它们在 [Column1] 为空白/空的行中是否有值?
  • 我正在使用一个简单的查询来检查结果 - “从 [RawData$A10:ES29100] 中选择不同的 [领土]”
  • @mcalex 是的,当我在第 2 行写一些东西时它会起作用。我尝试了一些随机的行#s - 它在第 40 行或其他地方不起作用

标签: sql vba excel


【解决方案1】:

来自: https://docs.microsoft.com/en-us/sql/odbc/microsoft/setting-options-programmatically-for-the-excel-driver?view=sql-server-2017

Rows to Scan 确定数据类型的扫描行数 每一列。数据类型由给定的最大数量确定 找到的各种数据。如果遇到不匹配的数据 为该列猜测的数据类型,该数据类型将作为 空值。

对于 Microsoft Excel 驱动程序,您可以输入 1 到 16 之间的数字 要扫描的行。该值默认为 8;如果设置为 0,则所有 行被扫描。 (超出限制的数字将返回错误。)

可能发生的情况是 Excel 驱动程序扫描前 x 行,猜测数据类型,然后后面的行与该类型不匹配,因此被分配为 null。这就是为什么向上移动价值可以解决问题。尝试设置扫描所有行。

【讨论】:

  • 也许还可以看到:concentra.co.uk/blog/…
  • 如果您还可以提供 TypeGuessRows 设置为 0 的连接字符串示例,那将非常有帮助。
  • 我尝试了以下连接字符串,但它没有帮助 cnn .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "excel 12.0;IMEX=1 ;MAXSCANROWS=0; TYPEGUESSROWS=0" .Properties("Data Source") = ThisWorkbook.FullName .Properties("Jet OLEDB:DataBase PassWord") = PWD .Open End With
  • TypeGuessRows 是一个注册表设置
  • 尝试添加 IMEX 设置。
【解决方案2】:

设置在这里:\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Excel

我已将“TypeGuessRows”从 8 更改为 0,现在查询可以工作了!

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 2021-02-17
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多