Excel 在VBA中使用ADODB SQL,为什么只有在使用分组时字符串才会被截断[到255]?

Excel 在VBA中使用ADODB SQL,为什么只有在使用分组时字符串才会被截断[到255]?,excel,vba,activex,ado,adodb,Excel,Vba,Activex,Ado,Adodb,我正在使用ADODB查询Sheet1。如果我在工作表上使用SQL查询获取数据(如下所示),而不进行分组,那么我将从注释中获取所有字符 但是,如果我使用分组,我的字符将被截断为255个 注意–我的第一行包含800个字符,因此驱动程序已正确识别数据类型 这是我的查询输出,没有分组 Select Product, Value, Comment, len(comment) from [sheet1$A1:T10000] 分组 Select Product, sum(value), Commen

我正在使用ADODB查询Sheet1。如果我在工作表上使用SQL查询获取数据(如下所示),而不进行分组,那么我将从注释中获取所有字符

但是,如果我使用分组,我的字符将被截断为255个

注意–我的第一行包含800个字符,因此驱动程序已正确识别数据类型


这是我的查询输出,没有分组

Select  Product, Value, Comment, len(comment) from [sheet1$A1:T10000]

分组

Select  Product, sum(value), Comment, len(comment) from [sheet1$A1:T10000] group by Product, Comment

感谢您发布此信息!在我20多年使用ADO记录集开发数据库的过程中,直到本周我才遇到过这个问题。一旦我追踪到记录集的截断,我真的抓狂了。直到我找到你的帖子,你让我把注意力集中在小组上,我才明白这是怎么发生的。果不其然,这就是原因(我猜是某种ADO错误)。我可以通过将相关的标量子查询放入选择列表中来解决这个问题,反之,可以使用JOIN和groupby

详细说明

根据我的经验,JOIN/GroupBy语法中至少有9次可以用相关标量子查询语法替换,而不会造成明显的性能损失。在这种情况下这是幸运的,因为ADO记录集对象显然存在一个缺陷,即当字符串长度大于255个字符时,按语法分组会导致文本截断

下面的第一个示例使用JOIN/groupby。第二个使用相关标量子查询。两者将/应该提供相同的结果。但是,如果任何注释大于255个字符,如果涉及ADODB记录集,这两个查询将不会返回相同的结果

请注意,在第二个示例中,SELECT列表中的最后一列本身就是完整的SELECT语句。它被称为标量子查询,因为它只返回1行/1列。如果它返回多个行或列,将抛出一个错误。它也被称为相关子查询,因为它引用的内容直接超出其范围(本例中为emp_编号)


是否可以添加一列以打印“注释”的类型?如果您不是手动设置它,那么当您
group by
尝试使计算更快速时,它可能会自动选择类型
短文本
,但在第一行本身,我有800个字符的通用格式注释,因此在读取文件驱动程序时,应该已识别其数据类型。对吗?[我想,如果我正确阅读了其他网站的备注数据类型。]如果我不使用分组,它会给我正确的长度。
SELECT e.emp_number, e.emp_name, e.supv_comments, SUM(i.invoice_amt) As total_sales
FROM employees e INNER JOIN invoices i ON e.emp_number = i.emp_number
GROUP BY e.emp_number, e.emp_name, e.supv_comment
SELECT e.emp_number, e.emp_name, e.supv_comments,
(SELECT SUM(i.invoice_amt) FROM invoices i WHERE i.emp_number = e.emp_number) As total_sales
FROM employees e