查询字符串长度限制在vba中?

时间:2010-03-30 14:25:26

标签: string excel vba

我正在尝试合并多个审核表,然后将结果过滤到Excel工作表中。 Union All和参数使查询超过1200个字符。运行此字符串时,字符串会被截断。任何人都可以提出什么建议我无法控制数据库结构,只能阅读foxpro免费表。

我被允许创建表,但可以写入连接到数据源的Excel工作表

对此的更新是我能够将查询字符串扩展到超过1800个字符并获取数据。所以我得出结论我有语法错误,我提到的明显截断是我在脚本编写中的字符串开发失败。

我发布了一个连接代码示例,答案已经消失,因此我不确定如何将此问题指定为已关闭的问题。没有明显的字符串长度限制,这是我最初的担忧。感谢您的贡献。

4 个答案:

答案 0 :(得分:0)

您是否可以使用所需数据的超集创建记录集,然后对其执行第二次查询以进行最终过滤?

或者,我并不熟悉FoxPro或您的数据库权限,您是否可以在数据库中创建存储过程然后只是将参数传递给它?

编辑添加:我认为你已经给你的表短名了? (例如...FROM Extremely_Long_Table_Name a WHERE...)如果没有,这可能会为你节省一堆字符。

答案 1 :(得分:0)

如果它是一个Union Query,正如您的问题所示,那么您可以将其分解为每个子查询并一个接一个地运行它们。

我很难相信你的查询字符串的限制会如此之小。您的查询在哪里被截断?通过VBA?通过FoxPro?您可以将生成的查询直接复制/粘贴到数据库客户端,看看它是否正确运行?

答案 2 :(得分:0)

在以多种方式重写查询后,我已成功获得超过1800个字符的查询字符串长度。我必须得出结论,我之前的错误是语法,尽管vba错误没有给出很多线索。

查询字符串是使用Excel工作表上的控件构建的,并在SQLstr中累积。在我编写字符串创建脚本时,显然截断是一个错误。一旦解决了这个问题,那么:

With ActiveSheet.QueryTables.Add(Connection:=Array( _
    "ODBC;DSN=myDB;Description=myDB;DATABASE=myDB;Trusted_Connection=YES"), Destination:=Range("A2"))
    .CommandText = SQLstr
    .Name = "Query from myDB"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlOverwriteCells 
    .SavePassword = True
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .Refresh BackgroundQuery:=False
End With

感谢您的帮助,因为响应表明它似乎不太可能是字符串长度限制,所以我会查看语法。 如果有人知道,我仍然很好奇是否存在查询字符串大小限制。

答案 3 :(得分:0)

检查语法错误,我得到类似的错误,但它发生了语法错误,在我连接我的(2000+字符长)查询字符串的地方有一些空白缺失。确保在每个连接字符串之前/之后有空格,例如

qryStr = "SELECT name, tel, email" & _ 
"  FROM MyTable;"

注意FROM子句之前的空格(在双引号内)。 HTH。埃迪