Не удаётся получить данные из БД MS Excel

Ответы на вопросы "А может ли он сделать такое..?" или "Как сделать вот это..?"
Ответить
Sonjaw
Сообщения: 6
Зарегистрирован: 19 янв 2017, 12:57

Не удаётся получить данные из БД MS Excel

Сообщение Sonjaw »

Добрый день,
при установке соединения с БД MS Excel и запуске программы автообзвона не удаётся Получить данные автообзвона.
В Журнале событий после сообщения Выполнение начато происходит Сброс номеров при включении программы автообзвона и далее множественные сообщения Получить данные автообзвона до завершения алгоритма работы.

Помогите с настройкой соединения с БД MS Excel.
Используются следующие параметры соединения: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\SonjaW.xls;Extended Properties=Excel 8.0;Persist Security Info=False

А также помогите с настройкой SQL-запросов.
Используется альтернативный механизм автообзвона:

;Общие настройки
[General]
SrcName="ExcelFile"
Version=1
DateTimeFormat="dd.mm.yyyy h:mm:ss"

;Необработанные номера
[Unprocessed]
Priority=0
Query="select top 1 A.ID, A.Number from [Лист1$] A inner join [Лист2$] B on A.IDMan = B.ID where B.Status=0 and

B.Processing='False' and A.Status=0 order by B.ID, A.ID"
ID="ID"
Number="Number"

;Номера со статусом "Занято"
[Busy]
Priority=1
Query="select top 1 A.ID, A.Number, A.DialLastEnd from [Лист1$] A inner join [Лист2$] B on A.IDMan=B.ID where

(A.Status=2 and A.Count<~RepeatBusy~) and (B.Status=0 and B.Processing='False') order by A.Count, A.DialLastEnd"
ID="ID"
Number="Number"
EndTime="DialLastEnd"

;Номера со статусом "Не отвечает"
[NotAnswered]
Priority=3
Query="select top 1 A.ID, A.Number, A.DialLastEnd from [Лист1$] A inner join [Лист2$] B on A.IDMan=B.ID where

(A.Status=3 and A.Count<~RepeatNoAnswer~) and (B.Status=0 and B.Processing='False') order by A.Count, A.DialLastEnd"
ID="ID"
Number="Number"
EndTime="DialLastEnd"

;Номера со статусом "Другое или неверный код"
[Other]
Priority=2
Query="select top 1 A.ID, B.Number, A.DialLastEnd from [Лист1$] A inner join [Лист2$] B on A.idman=B.ID where

(A.Status=4 and A.Count<~RepeatOther~) and (B.Status=0 and B.Processing='False') order by A.Count, A.DialLastEnd"
ID="ID"
Number="Number"
EndTime="DialLastEnd"

;Данные об абоненте
;Типы данных: 1 - номер телефона, 2 - число, 3 - дата/время, 4 - сумма руб.
[UserValues]
Query="select 4, SummaZad, 3, DataZad as N1 from [Лист2$] where ID=(select distinct IDMan from [Лист1$] where

ID=~NumID~)"
Form=AsRow

;Перед обзвоном очередного номера
[BeforeDialNumber]
Query="update [Лист2$] A set A.Processing='True' where A.ID=(select distinct IDMan from [Лист1$] where A.ID=~NumID~);

update [Лист1$] B set B.DialLastBegin=GETDATE(), B.Count=B.Count + 1 where B.ID=~NumID~"

;После обзвона очередного номера
[AfterDialNumber]
Query="update [Лист2$] A set A.Status=(case when ~Status~=1 then 1 else 0 end), A.Processing='False' where

A.ID=(select distinct IDMan from [Лист1$] where ID=~NumID~); update [Лист1$] B set B.Status=~Status~,

B.DialLastEnd=GETDATE() where B.ID=~NumID~"

;Если обзвон был прерван
[DialBreak]
Query="update [Лист2$] A set A.Processing='False' where A.ID=(select distinct IDMan from [Лист1$] where ID=~NumID~);

update [Лист1$] B set B.Status=4, B.DialLastEnd=GETDATE() where B.ID=~NumID~"

;Сброс номеров в начальное состояние при включении программы автообзвона
[ResetNumbers]
Query="update [Лист2$] A set A.Status=0, A.Processing='False'; update [Лист1$] B set B.Status=0,

B.DialLastBegin=null, B.DialLastEnd=null, B.Count=0"


Заранее благодарю за помощь.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Не удаётся получить данные из БД MS Excel

Сообщение sannx »

Скиньте мне на почту упакованный файл "service.log" из папки сервера.
Sonjaw
Сообщения: 6
Зарегистрирован: 19 янв 2017, 12:57

Re: Не удаётся получить данные из БД MS Excel

Сообщение Sonjaw »

Файл отправила по Вашему запросу.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Не удаётся получить данные из БД MS Excel

Сообщение sannx »

Взгляните "service.log" сами. Там увидите, в чем ошибка.
Sonjaw
Сообщения: 6
Зарегистрирован: 19 янв 2017, 12:57

Re: Не удаётся получить данные из БД MS Excel

Сообщение Sonjaw »

В service.log ошибки следующего вида:

Error: Объект 'Лист1$' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.

Error: Обнаружены символы за пределами инструкции SQL


Быть может, база данных excel должна располагаться на сервере программы автообзвона?
В настоящее время происходит обращение к БД Excel, расположенной на другом компьютере.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Не удаётся получить данные из БД MS Excel

Сообщение sannx »

Да, вы сделали правильный вывод. Файл xls должен быть на компе сервера.
Sonjaw
Сообщения: 6
Зарегистрирован: 19 янв 2017, 12:57

Re: Не удаётся получить данные из БД MS Excel

Сообщение Sonjaw »

Подскажите, как указать 2 запроса на обновление таблиц в БД MS Excel в поле Query?
Указываю через ';'.
В service.log следующая ошибка:



Время: 03.03.2017 15:15:34.086
Тип сообщения: ERROR
Функция/процедура: BeginAutodial_AltDB, MyGetUserValues, AltDBQuery.ExecSQL
Вх. парамерты: TAltDBSections=BeforeDialNumber
Сообщение: update [Лист2$] A set A.Processing='True' where A.ID=(select distinct IDMan from [Лист1$] where A.ID=14); update [Лист1$] B set B.DialLastBegin=DATE(), B.Count=B.Count + 1 where B.ID=14;

----------------------------------------

---=== Вызов AnyException ===---
Время: 03.03.2017 15:15:39.227
Error: Обнаружены символы за пределами инструкции SQL
(000AEB94){Server.exe } [004AFB94] ADODB.TADOCommand.Execute (Line 3259, "ADODB.pas" + 4) + $46
(00006909){Server.exe } [00407909] System.@CheckAutoResult (Line 18047, "sys\system.pas" + 6) + $0
(000AEB94){Server.exe } [004AFB94] ADODB.TADOCommand.Execute (Line 3259, "ADODB.pas" + 4) + $46
(000B7297){Server.exe } [004B8297] ADODB.TADOQuery.ExecSQL (Line 6308, "ADODB.pas" + 2) + $16
(0017E512){Server.exe } [0057F512] UnitManageThread.MyGetUserValues (Line 1018, "UnitManageThread.pas" + 76) + $C
(0017E76C){Server.exe } [0057F76C] UnitManageThread.BeginAutodial_AltDB (Line 1045, "UnitManageThread.pas" + 6) + $7
(0017E7E2){Server.exe } [0057F7E2] UnitManageThread.BeginAutodial (Line 1062, "UnitManageThread.pas" + 7) + $0
(001842B7){Server.exe } [005852B7] UnitManageThread.CheckMsgQueue (Line 2747, "UnitManageThread.pas" + 320) + $1F
(001795E7){Server.exe } [0057A5E7] Service.TServerSpRobot.ServiceExecute (Line 1046, "Service.pas" + 106) + $0
(0006DC80){Server.exe } [0046EC80] SvcMgr.TServiceThread.Execute (Line 320, "SvcMgr.pas" + 15) + $A
(000271E0){Server.exe } [004281E0] Classes.ThreadProc (Line 9877, "common\Classes.pas" + 7) + $5
(000045DC){Server.exe } [004055DC] System.ThreadWrapper (Line 12110, "sys\system.pas" + 33) + $0
Sonjaw
Сообщения: 6
Зарегистрирован: 19 янв 2017, 12:57

Re: Не удаётся получить данные из БД MS Excel

Сообщение Sonjaw »

Указали два раза поле Query и данные в двух таблицах обновляются.

Возникла ещё одна проблема: повторять попытку в Настройках дозвона устновлено 5 раз, в столбце Count видим, что совершилось уже 23 попыток дозвона. Подскажите, в чём может быть причина зацикливания программы?
Файл Excel отправила Вам на почту.
Sonjaw
Сообщения: 6
Зарегистрирован: 19 янв 2017, 12:57

Re: Не удаётся получить данные из БД MS Excel

Сообщение Sonjaw »

Разобрались...столбец Телефонный номер преобразовали в число и всё заработало.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Не удаётся получить данные из БД MS Excel

Сообщение sannx »

Еще помощь нужна?
Ответить