Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Mavr Member Откуда: Сообщений: 41 |
В приложении (1С) делается запрос к сторонней БД на SQL сервере, с помощью ADO DB. Давно это работает и работало без проблем до недавнего времени. Последнюю неделю стала возникать неопознанная ошибка Microsoft OLE DB Provider for SQL Server. Причем возникает, через какое-то время пропадает, потом опять. Причем в процедуре делается почти подряд два таких запроса, они одинаковые по сути там просто во втором меняется маленько условие (разделы select from group by остаются те же), и ошибка возникает всегда на втором запросе. Вот только что ошибка возникала, запустил отладку поставил точку останова, и запрос выполнился без ошибки. Фигня какая-то. Не знаю на что грешить. Проблема возникает у всех пользователей и пропадает у всех как мне кажется одновременно (а запрос делается именно со стороны клиента а не со стороны сервера 1С). Что можете посоветовать ? |
3 апр 15, 08:21 [17467386] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
Елси вы приведете какие-то подробности, то может найдется кто-то, способный подсказать. |
3 апр 15, 09:02 [17467501] Ответить | Цитировать Сообщить модератору |
Mavr Member Откуда: Сообщений: 41 |
Какие именно подробности ? SQL Server - 2008R2 with SP2 x64 работает под Win 2008 R2 Клиенты работают под Win7 Pro with SP1 x64 + последние обновления раскатываются WSUS'ом У меня подозрение что какое-то обновление могло на клиентах или на сервере привести к такому поведению, но вроде последние виндовые были недели 2 назад, а проблема вот последние дня 3. Что-то еще если нужно то могу сообщить. Переписал этот блок на VBA, такое же поведение, т.е. от 1С это не зависит. Отсюда вывод либо на сервере SQL что-то стало приводить к такому поведению, либо на клиентах что-то в системе. |
3 апр 15, 11:28 [17468323] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
что в логах ОС клиента и сервера, SQL server во время облома на клиенте? |
3 апр 15, 11:31 [17468344] Ответить | Цитировать Сообщить модератору |
Mavr Member Откуда: Сообщений: 41 |
В журналах тишина |
3 апр 15, 12:47 [17468873] Ответить | Цитировать Сообщить модератору |
Mavr Member Откуда: Сообщений: 41 |
Попробую еще копию базы сделать к которой запрос идет и проверить запрос на копии. Это Report база от Project Server, может как-то Project Server влияет на это. |
3 апр 15, 12:49 [17468885] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1726 |
Привести код запроса ADO DB можете? |
||
3 апр 15, 13:57 [17469323] Ответить | Цитировать Сообщить модератору |
Mavr Member Откуда: Сообщений: 41 |
SELECT * FROM (SELECT P.ProjectUID, MAX(P.ProjectName) AS ProjectName, CAST(MAX(P.[элк_№ проекта]) AS Numeric(7,2))*1 AS ProjectNum, MAX(P.ProjectOwnerName) AS ProjectOwnerName, MAX(P.[элк_Руководитель направления]) AS ProjectSaler, MAX(P.[элк_Статус проекта]) AS ProjectStatus, MAX(P.[элк_Группа проекта]) AS ProjectGroup, T.[элк_Вид работ] AS TypeWork, R.ResourceUID, MAX(R.ResourceName) AS ResourceName, MAX(R.ResourceType) AS ResourceType, MAX(R.ResourceGroup) AS ResourceGroup, MAX(R.СДРес) AS СДРес, SUM(ADay.AssignmentActualWork) AS AssignmentActualWork, SUM(ADay.AssignmentActualWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentActualWork_WorkDay, SUM(ADay.AssignmentActualWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentActualWork_SunDay, SUM(ADay.AssignmentActualRegularWork) AS AssignmentActualRegularWork, SUM(ADay.AssignmentActualRegularWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentActualRegularWork_WorkDay, SUM(ADay.AssignmentActualRegularWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentActualRegularWork_SunDay, SUM(ADay.AssignmentActualOvertimeWork) AS AssignmentActualOvertimeWork, SUM(ADay.AssignmentActualOvertimeWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentActualOvertimeWork_WorkDay, SUM(ADay.AssignmentActualOvertimeWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentActualOvertimeWork_SunDay, SUM(ADay.AssignmentWork) AS AssignmentWork, SUM(ADay.AssignmentWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentWork_WorkDay, SUM(ADay.AssignmentWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentWork_SunDay, SUM(ADay.AssignmentRegularWork) AS AssignmentRegularWork, SUM(ADay.AssignmentRegularWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentRegularWork_WorkDay, SUM(ADay.AssignmentRegularWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentRegularWork_SunDay, SUM(ADay.AssignmentOvertimeWork) AS AssignmentOvertimeWork, SUM(ADay.AssignmentOvertimeWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentOvertimeWork_WorkDay, SUM(ADay.AssignmentOvertimeWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentOvertimeWork_SunDay, SUM(ADay.AssignmentRemainingWork) AS AssignmentRemainingWork, SUM(ADay.AssignmentRemainingWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentRemainingWork_WorkDay, SUM(ADay.AssignmentRemainingWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentRemainingWork_SunDay, SUM(ADay.AssignmentRemainingRegularWork) AS AssignmentRemainingRegularWork, SUM(ADay.AssignmentRemainingRegularWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentRemainingRegularWork_WorkDay, SUM(ADay.AssignmentRemainingRegularWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentRemainingRegularWork_SunDay, SUM(ADay.AssignmentRemainingOvertimeWork) AS AssignmentRemainingOvertimeWork, SUM(ADay.AssignmentRemainingOvertimeWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentRemainingOvertimeWork_WorkDay, SUM(ADay.AssignmentRemainingOvertimeWork * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentRemainingOvertimeWork_SunDay, SUM(ADay.AssignmentBaseline0Work) AS AssignmentBaseline0Work, SUM(ADay.AssignmentBaseline0Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline0Work_WorkDay, SUM(ADay.AssignmentBaseline0Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline0Work_SunDay, SUM(ADay.AssignmentBaseline1Work) AS AssignmentBaseline1Work, SUM(ADay.AssignmentBaseline1Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline1Work_WorkDay, SUM(ADay.AssignmentBaseline1Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline1Work_SunDay, SUM(ADay.AssignmentBaseline2Work) AS AssignmentBaseline2Work, SUM(ADay.AssignmentBaseline2Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline2Work_WorkDay, SUM(ADay.AssignmentBaseline2Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline2Work_SunDay, SUM(ADay.AssignmentBaseline3Work) AS AssignmentBaseline3Work, SUM(ADay.AssignmentBaseline3Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline3Work_WorkDay, SUM(ADay.AssignmentBaseline3Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline3Work_SunDay, SUM(ADay.AssignmentBaseline4Work) AS AssignmentBaseline4Work, SUM(ADay.AssignmentBaseline4Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline4Work_WorkDay, SUM(ADay.AssignmentBaseline4Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline4Work_SunDay, SUM(ADay.AssignmentBaseline5Work) AS AssignmentBaseline5Work, SUM(ADay.AssignmentBaseline5Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline5Work_WorkDay, SUM(ADay.AssignmentBaseline5Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline5Work_SunDay, SUM(ADay.AssignmentBaseline6Work) AS AssignmentBaseline6Work, SUM(ADay.AssignmentBaseline6Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline6Work_WorkDay, SUM(ADay.AssignmentBaseline6Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline6Work_SunDay, SUM(ADay.AssignmentBaseline7Work) AS AssignmentBaseline7Work, SUM(ADay.AssignmentBaseline7Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline7Work_WorkDay, SUM(ADay.AssignmentBaseline7Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline7Work_SunDay, SUM(ADay.AssignmentBaseline8Work) AS AssignmentBaseline8Work, SUM(ADay.AssignmentBaseline8Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline8Work_WorkDay, SUM(ADay.AssignmentBaseline8Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline8Work_SunDay, SUM(ADay.AssignmentBaseline9Work) AS AssignmentBaseline9Work, SUM(ADay.AssignmentBaseline9Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline9Work_WorkDay, SUM(ADay.AssignmentBaseline9Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline9Work_SunDay, SUM(ADay.AssignmentBaseline10Work) AS AssignmentBaseline10Work, SUM(ADay.AssignmentBaseline10Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 0 ELSE 1 END)) AS AssignmentBaseline10Work_WorkDay, SUM(ADay.AssignmentBaseline10Work * (CASE WHEN DATEPART(dw, ADay.TimeByDay) IN (6, 7) THEN 1 ELSE 0 END)) AS AssignmentBaseline10Work_SunDay FROM dbo.MSP_EpmAssignment_UserView AS A INNER JOIN dbo.MSP_EpmProject_UserView AS P ON A.ProjectUID = P.ProjectUID INNER JOIN dbo.MSP_EpmTask_UserView AS T ON A.TaskUID = T.TaskUID INNER JOIN dbo.MSP_EpmResource_UserView AS R ON A.ResourceUID = R.ResourceUID INNER JOIN dbo.MSP_EpmAssignmentByDay_UserView AS ADay ON A.AssignmentUID = ADay.AssignmentUID WHERE (ISNUMERIC(P.[элк_№ проекта]) = 1) AND (ADay.TimeByDay BETWEEN CONVERT(DATETIME, '2010-12-31 23:59:59', 102) AND CONVERT(DATETIME, '2030-12-31 23:59:59', 102)) GROUP BY P.ProjectUID, R.ResourceUID, T.[элк_Вид работ] HAVING (SUM(ADay.AssignmentBaseline0Work) > 0) ) AS D WHERE (ProjectNum = 1428.00) ORDER BY ProjectNum, ProjectUID, ResourceName, ResourceUID, TypeWork |
3 апр 15, 14:34 [17469594] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
лучше бы не приводил ![]() |
3 апр 15, 14:54 [17469727] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8494 |
Mavr, если изменился язык подключения, то будет вылетать при попытке автоматического преобразования строки в дату. |
3 апр 15, 14:56 [17469739] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8494 |
Сорри, невнимательно посмотрел. |
3 апр 15, 14:57 [17469748] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1726 |
даааа Mavr, так а он вам код HRESULT выдает? дословно как выглядит сообщение об ошибке? |
||
3 апр 15, 15:04 [17469815] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1726 |
и еще в чем именно кардинальное различие первого запроса от второго? меняются какие поля в операторе SELECT |
3 апр 15, 15:08 [17469854] Ответить | Цитировать Сообщить модератору |
Mavr Member Откуда: Сообщений: 41 |
Нет, абсолютно все тоже самое меняется маленько условие вот здесь (по дате и в разделе WHERE и в HAVING поле другое):WHERE (ISNUMERIC(P.[элк_№ проекта]) = 1) AND (ADay.TimeByDay BETWEEN CONVERT(DATETIME, '2015-03-01 00:00:00', 102) AND CONVERT(DATETIME, '2020-12-31 23:59:59', 102)) GROUP BY P.ProjectUID, R.ResourceUID, T.[элк_Вид работ] HAVING (SUM(ADay.AssignmentWork) > 0) ) AS D В остальном все тоже самое. Сделал копию БД что бы Project Server исключить. На копии тоже самое. |
3 апр 15, 15:24 [17469992] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1726 |
Тип полей: [MSP_EpmAssignmentByDay_UserView].[AssignmentBaseline0Work] [MSP_EpmAssignmentByDay_UserView].[AssignmentWork] [MSP_EpmAssignmentByDay_UserView].[TimeByDay] какой? |
||
3 апр 15, 15:42 [17470157] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1726 |
и вы про HRESULT не уточнили. по конструкции запроса для ADODB, используются отдельные экземпляры Command для этих двух запросов или исполняется одним экземпляром? |
3 апр 15, 15:46 [17470196] Ответить | Цитировать Сообщить модератору |
Mavr Member Откуда: Сообщений: 41 |
felix_ff, Первые два - decimal(25, 6) Последний - datetime |
3 апр 15, 15:52 [17470252] Ответить | Цитировать Сообщить модератору |
Mavr Member Откуда: Сообщений: 41 |
Mavr, Запросы формируется в функции, которая вызывается с разными параметрами, от них и зависит это изменение условия: В этой функции каждый раз делается следующее: Функция GetDataFromProjectServer(парметры) ТекстЗапроса = ПодготовитьТекстЗапроса(праметры) Попытка Data = Новый COMОбъект("ADODB.Recordset"); ADODBConnect = ConnectToProjectServer(Version); Data.ActiveConnection = ADODBConnect; Data.Open (ТекстЗапроса); Data.ActiveConnection = Неопределено; Исключение Попытка Data.Close(); ADODBConnect.Close(); Исключение КонецПопытки; Возврат False; КонецПопытки; .......... алгоритм обработки данных Data.Close(); ADODBConnect.Close(); КонецФункции; |
3 апр 15, 16:04 [17470364] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1726 |
ну по большей части грешить на SQL Server конечно можно, но я больше склоняюсь к версии что проблема в доступе к данным через ADO. У вас версия MDAC какая? И попробуйте прикрутить блоки Try Catch. Нужно понимать источник ошибки. Одновременно можно запустить трассировку наличия ошибок по классам: Exception, Excecution Warnings, Sort Warnings, User Error Message на SQL Server при выполении данных инструкций |
||
3 апр 15, 16:09 [17470401] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1726 |
о да! обожаю синтаксис 1С >_< попробуйте вкорячить обработку исключения: Функция GetDataFromProjectServer(парметры) ТекстЗапроса = ПодготовитьТекстЗапроса(праметры) Попытка Data = Новый COMОбъект("ADODB.Recordset"); ADODBConnect = ConnectToProjectServer(Version); Data.ActiveConnection = ADODBConnect; Data.Open (ТекстЗапроса); Data.ActiveConnection = Неопределено; Исключение Сообщить(ОписаниеОшибки()); Инфо = ИнформацияОбОшибке(); Сообщить("Описание='" + Инфо.Описание + "'"); Сообщить("ИмяМодуля='" + Инфо.ИмяМодуля + "'"); Попытка DВata.Close(); ADODBConnect.Close(); Исключение КонецПопытки; Возврат False; КонецПопытки; .......... алгоритм обработки данных Data.Close(); ADODBConnect.Close(); КонецФункции; |
||
3 апр 15, 16:14 [17470442] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |