Ошибка таблицы запросов VBA SQL - PullRequest
4 голосов
/ 30 октября 2008

Я пытаюсь получить данные из системы данных вызовов ACD, если быть точным, Nortel Contact Center 6.0, и если вы используете эту конкретную систему, то я пытаюсь захватить ежедневный вызов по данным вызовов. Однако, когда я использую этот код

(sCW - это общая строка слов, равная eCallByCallStat и sDate is

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

Как ни странно, он работал в течение месяца или около того, а затем просто умер


@ loopo Я на самом деле добавил "" в строку подключения, и на самом деле имя пользователя и пароль жестко запрограммированы в запросе без кавычек, с тех пор я удалил их для ясности в публикации


я получаю ошибку

Ошибка времени выполнения '-2147417848 (80010108)': Сбой метода «Обновить» объекта «_QueryTable»


Спасибо за ваш вклад, Кевин. База данных никогда не находится в состоянии, когда к ней никто не обращается, это система обработки вызовов, которая работает круглосуточно и всегда подключена к клиентам. По крайней мере, это мое понимание. Если я делаю это вручную через Excel, я никогда не получаю сообщение об ошибке или у меня возникают проблемы, только когда я делаю это с помощью макроса, это вызывает у меня проблемы, из-за которых я думаю, что это был мой код, вызывающий проблему.

Я подключаюсь к базе данных через ODBC в соответствии с рекомендациями производителя, но мне интересно, предполагали ли они когда-либо подобные вещи.

Я посмотрю, смогу ли я использовать это в проекте .NET, и посмотрю, поможет ли это.

Ответы [ 5 ]

1 голос
/ 06 ноября 2008

Прежде всего, если вы подключаетесь к неуниверсальной базе данных (SQL Server, Oracle и т. Д.), попробуйте использовать соединение с базой данных, специфичное для нее .

Во-вторых, поскольку вы сказали, что эта ошибка появляется и исчезает, можете ли вы проверить, происходит ли она по-прежнему, когда никто не обращается к системе? Возможно, проблема в том, что определенные строки заблокированы , когда ваш запрос пытается их прочитать ...

В-третьих, либо переключитесь на другой метод отчетности, либо найдите другой способ получения данных . Существуют ограничения для этого типа вызовов в Excel. Хотя да, конечно, он позволяет вам подключаться к базам данных и извлекать данные, но может оказаться, что он не работает, если вы работаете с большими наборами данных, сложными запросами или нечеткими соединениями с базами данных.

1 голос
/ 31 октября 2008

Какое фактическое сообщение об ошибке вы получаете?

В предложении FROM вы пытаетесь ВЫБРАТЬ из 2 разных таблиц с одинаковыми именами в разных пространствах имен? (В этом случае я думаю, что они должны быть разделены запятой, а не пробелом)

Или должен быть другой "." вместо пробела в предложении FROM? Или это псевдоним?

Вам нужно указать таблицу для каждого поля? почему бы просто не сделать:

SELECT Timestamp, CallEvent, ... ,Time 
       FROM blue.dbo.eCallByCallStat" & sDate & " ORDER BY Timestamp 
1 голос
/ 30 октября 2008

Похоже, что в вашей строке подключения есть двойные кавычки. Потенциально это может быть связано с разбором веб-сайта

вы, вероятно, должны установить sConn, используя "двойные двойные" кавычки, например:

sConn = "ODBC;DSN=Aus1S002;UID=""somevaliduser"";PWD=""avalidpassword"";SRVR=""Thecorrectserver"";DB=blue"
1 голос
/ 30 октября 2008

Похоже, ошибка с самим запросом ...

Если вы сможете просмотреть свой код и опубликовать содержимое sSql, это, вероятно, поможет устранить неполадки ...

Когда вы проходите через это, убедитесь, что кавычки правильно экранируются.

0 голосов
/ 30 октября 2008

Я начинаю с удаления содержимого sSQL с sSql=""

после этого, поскольку запрос выполняется в цикле for, я строю запрос в каждой из следующих строк, каждая строка строится на предыдущей строке, я сделал это таким образом, чтобы его было легче редактировать и понимать с помощью следующий парень.

После запуска через 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...