VBA SQL查询表错误

我试图从ACD呼叫数据系统, Nortel Contact Center 6.0获取数据,如果您使用的是特定系统,我试图捕获的是每天通话数据。 但是,当我使用这个代码

(sCW是一个常见的string,等于eCallByCallStat和sDate是

dDate = Format(Month(deffDate) & "/" & iStartDay & "/" & Year(deffDate), "mm/dd/yyyy")

sDate = Format(dDate, "yyyymmdd")

 sSql = "" sConn = "ODBC;DSN=Aus1S002;UID=somevaliduser;PWD=avalidpassword;SRVR=Thecorrectserver;DB=blue" sSql = "SELECT " & sCW & sDate & ".Timestamp, " sSql = sSql & sCW & sDate & ".CallEvent, " sSql = sSql & sCW & sDate & ".CallEventName, " sSql = sSql & sCW & sDate & ".CallID, " sSql = sSql & sCW & sDate & ".TelsetLoginID, " sSql = sSql & sCW & sDate & ".AssociatedData, " sSql = sSql & sCW & sDate & ".Destination, " sSql = sSql & sCW & sDate & ".EventData, " sSql = sSql & sCW & sDate & ".Source, " sSql = sSql & sCW & sDate & ".Time " & vbCrLf sSql = sSql & "FROM blue.dbo.eCallByCallStat" & sDate & " " & sCW & sDate & vbCrLf sSql = sSql & " ORDER BY " & sCW & sDate & ".Timestamp" Set oQT = ActiveSheet.QueryTables.Add(Connection:=sConn, Destination:=Range("A1"), Sql:=sSql) oQT.Refresh BackgroundQuery:=False Do While oQT.Refreshing = True Loop" 

当我运行这个,我得到一个奇怪的错误消息在oQT.Refresh BackgroundQuery:= False

奇怪的是,它工作了一个月左右,然后就死了


@循环我实际上添加了""到连接string,实际上有用户名和密码硬编码到查询与引号,我已经删除它们在发布的清晰度


我收到的错误是

运行时错误'-2147417848(80010108)':对象“_QueryTable”的方法'刷新'失败


感谢您的input凯文。 数据库从来没有处于没有人访问的状态,它是一个24 x 7的呼叫处理系统,并始终连接到客户端。 至less这是我的理解。 如果我通过Excel手动执行此操作,我从来不会遇到任何错误,或者只有当我通过macros执行此操作时才会出现问题,是否会导致我认为这是导致问题的代码。

我正在按照制造商的build议通过ODBC连接到数据库,但是我想知道他们是否设想过这种事情。

我会看看如果我可以利用这个.NET项目,看看是否有帮助。

看起来像查询本身的错误…

如果你可以通过你的代码并发布sSql的内容,它可能会帮助排除故障…

当你通过它,确保引号正确逃脱。

看起来你的连接string里有双引号。 这可能是由于网站的一些parsing

你应该使用“double double”引号来设置sConn,如下所示:

 sConn = "ODBC;DSN=Aus1S002;UID=""somevaliduser"";PWD=""avalidpassword"";SRVR=""Thecorrectserver"";DB=blue" 

什么是你得到的实际错误信息?

在FROM子句中,您是否试图从2个不同的表中select,在不同的名称空间中使用相同的名称? (在这种情况下,我认为他们应该用逗号而不是空格隔开)

还是应该有另一个'。 而不是在FROM子句中的空间? 或者是别名?

你需要为每个领域指定表格吗? 为什么不只是做:

 SELECT Timestamp, CallEvent, ... ,Time FROM blue.dbo.eCallByCallStat" & sDate & " ORDER BY Timestamp 

首先,如果连接到非通用数据库(SQL Server,Oracle等),请尝试使用特定于其的数据库连接

其次,既然你说这个错误来了,你能testing一下没有其他人访问系统时是否还会发生吗? 也许这是一个问题,某些行被locking,而您的查询正在尝试读取它们…

第三, 要么切换到不同的报告方法,要么find不同的方式来获取数据 。 Excel中这种types的调用是有限制的。 虽然,当然,它确实允许您连接到数据库并获取数据,但如果您正在处理大量的数据,复杂的查询或挑剔的数据库连接,则可能会发现它不足。

我开始删除sSQL的内容sSql=""

之后,因为查询是在for循环中运行的,所以我在下一行中build立了查询,每一行都build立在前一行上,我这样做是为了让下一个人更容易编辑和理解。

通过sSQL运行后看起来像这样

 sSQL=SELECT eCallByCallStat20081001.Timestamp, eCallByCallStat20081001.CallEvent, eCallByCallStat20081001.CallEventName, eCallByCallStat20081001.CallID, eCallByCallStat20081001.TelsetLoginID, eCallByCallStat20081001.AssociatedData, eCallByCallStat20081001.Destination, eCallByCallStat20081001.EventData, eCallByCallStat20081001.Source, eCallByCallStat20081001.Time FROM blue.dbo.eCallByCallStat20081001 eCallByCallStat20081001 ORDER BY eCallByCallStat20081001.Timestamp