【发布时间】:2015-01-09 13:39:37
【问题描述】:
我在 Excel 2007 VBA 中使用 ADODB 连接到使用 Teradata ODBC 15.0 驱动程序的 Teradata 14.0 服务器。一切都按预期工作,除了当我通过ADODB.Recordset.Open 提交非常大的查询时。
偶尔,当我尝试使用 5000 多个字符的查询 recordset.open 时,它会抛出 ODBC Driver does not support the requested properties 错误 -2147217887。
当我没有恢复加载的记录集对象时,似乎在设定的时间(30 秒左右)后出现错误。
代码很简单:
Sub getData()
Dim strSQL As String
Dim scRS As ADODB.Recordset
Dim adoConn As ADODB.Connection
strSQL = "Very Large SQL"
'open the connection
Set adoConn = New ADODB.Connection
On Error GoTo adoExit
adoConn.Open "SessionMode=Teradata;Driver=Teradata;DBCName=<SERVERIP>;Database=<DATABASE>;CharSet=UTF16;Uid=<USERID>;Pwd=<PASSWORD>"
'get the data
Set scRS = New ADODB.Recordset
scRS.Open strSQL, adoConn, adOpenKeyset, adLockOptimistic
...
End Sub
编辑添加:我尝试了几乎所有听起来可能会影响数据包大小/超时/字符集(我认为这可能会影响总字节数)/等的变体,使用http://www.info.teradata.com/htmlpubs/DB_TTU_13_10/index.html#page/Connectivity/B035_2509_071A/2509ch03.05.06.html作为指南.我仍然会偶尔出现超时。
【问题讨论】:
-
你的
adoConn.ConnectionTimeout是什么?也许尝试增加...您是否尝试过缩短查询?您是否尝试过运行任何较短的查询?另外,看看ConnectionStrings for TerraData,也许有一个不支持的属性?还要检查您的adoConn.state -
ConnectionTimeout 是默认值。我只是尝试将它提高到 120(我假设它以秒为单位),但同样的错误在 30 秒后出现。它实际上是一堆相互附加的查询。我不能比我已经拥有的更多地缩短它们,并且我想同时提交所有内容以利用 TD 并发性。这是 25 秒和一两分钟之间的差异(如果我连续提交)。
-
我明白了...我对 TerraData 并没有任何经验,所以在这一点上我感到有点无助,我也无法真正重现这一点,这使得调试变得更加困难。还有一个建议 - 你可以使用
rs.Open上的最后 2 个参数吗 - 可以尝试不同的参数 -
听起来您可能超出了 SQL 语句长度的某些限制,或者类似的东西。我对 TerraData 的熟悉程度为零,所以我只是猜测,但听起来像是一个很长的 Select 语句。你能把你的选择语句分解成多个语句吗?也许将每个结果存储在
#TemporaryTable中,然后当你完成后,只需使用SELECT * FROM #TemporaryTable从该表中打开一个记录集。或类似的东西。 -
没有看到你的 SQL 语句,我不知道它长什么样,但我发现了这个List of TeraData SQL limits。也许这将有助于阐明为什么会发生这种情况?