我正在尝试合并多个审核表,然后将结果过滤到Excel工作表中。 Union All和参数使查询超过1200个字符。运行此字符串时,字符串会被截断。任何人都可以提出什么建议我无法控制数据库结构,只能阅读foxpro免费表。
我被允许创建表,但可以写入连接到数据源的Excel工作表
对此的更新是我能够将查询字符串扩展到超过1800个字符并获取数据。所以我得出结论我有语法错误,我提到的明显截断是我在脚本编写中的字符串开发失败。
我发布了一个连接代码示例,答案已经消失,因此我不确定如何将此问题指定为已关闭的问题。没有明显的字符串长度限制,这是我最初的担忧。感谢您的贡献。
答案 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。埃迪