Произошли ошибки во время выполнения многошаговой операции ole db

  • Remove From My Forums

 none

Ошибка при выполнении выгрузки данных.

  • Вопрос

  • Доброго времени суток уважаемые представители компании Microsoft, я являюсь системным администратором городской больницы №4 г. Владимира, у нас есть важная медицинская программулина MedBase,
    недавно у Вас приобрели новый сервер, ну и решили перенести эту программу на новый сервер, установили бесплатный SQL server 2008 r2 express, саму программу MedBase, вроде все работает но при создании отчета выдает следущую ошибку:
    «При выполнении запроса произошла ошибка: Поставщик OLE DE «Microsoft.ACE.OLEDB. 12.0» для связанного сервера «(null)» вернул сообщение «Произошли ошибки во время выполнения многошаговой операции OLE DE. По
    возможности, проверьте значения всех состояний OLE DE. Работа не выполнена.»
    — это ошибка SQL server полюбому вот мне очень хочется ее исправить потому что отчеты не делаются… ПОМОГИТЕЕЕЕЕ

    • Перемещено

      30 апреля 2013 г. 8:07
      sql

Ответы

    • Помечено в качестве ответа
      Иван ПродановMicrosoft contingent staff, Moderator
      30 апреля 2013 г. 13:46
  • Все решили проблемку: простите за беспокойство … поставщики решили проблему, вот прям только что … в среде SQL выполнить запрос: 

    EXEC master.dbo.sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′, N’AllowInProcess’, 1
    GO
    EXEC master.dbo.sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′, N’DynamicParameters’, 1
    GO

    Мне помогло

    • Помечено в качестве ответа
      ad_sergeev
      30 апреля 2013 г. 11:09

Ситуация следующая:
Написал макрос для выгрузки данных из базы SQL Server в Excel. У меня все работает корректно. Отправил файл с макросом коллеге и у него появляется данная ошибка. Отдел безопасности говорит, что доступ ему предоставили.

Строка соединения:
ConnectionString = "Provider=SQLOLEDB;Data Source=server name; " _
& "Initial Catalog=database name; Integrated Security=SSPI; " _
& "IsolationLevel=adXactReadUncommitted"

Ошибка 80040e21

Весь код

Dim con As New ADODB.Connection
Dim rec As New ADODB.Recordset, rec2 As New ADODB.Recordset
Dim vac As String

rec.CursorType = adOpenKeyset
rec.LockType = adLockOptimistic
rec2.CursorType = adOpenKeyset
rec2.LockType = adLockOptimistic

Application.ScreenUpdating = False
Лист1.Unprotect Password:="пароль"
лист2.Unprotect Password:="пароль"

лист1.Activate
лист1.Range("A7:U7").Select
лист1.Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents


лист2.Activate
лист2.Range("A7:R7").Select
лист2.Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
лист1.Activate

con.Open
rec.Open "SELECT * " & _
"FROM [database].[schema].[table] " & _
"WHERE [UserName] like '" & Application.UserName & "'", con
If rec.RecordCount <> 1 Then
    MsgBox "Сообщение" & _
    vbNewLine & "Продолжение сообщения", vbOKOnly
Else
    vac = rec.Fields("Столбец")
    rec.Close
    If vac <> "значение" Then
        rec.Open "SELECT *" & _
        "FROM [database].[schema].[table2]" & _
        "Where [Столбец2] = '" & vac & "'", con
        rec2.Open "SELECT *" & _
        "FROM [database].[schema].[table3]" & _
        "Where [Столбец2] = '" & vac & "'", con
    Else
        rec.Open "SELECT *" & _
        "FROM [database].[schema].[table2]", con
        rec2.Open "SELECT *" & _
        "FROM [database].[schema].[table3]", con
    End If
    Лист1.Range("A7").CopyFromRecordset rec
    Лист2.Range("A7").CopyFromRecordset rec2
    MsgBox "Готово"

End If

Лист1.Protect Password:="Пароль", _
    Contents:=True, DrawingObjects:=False, AllowUsingPivotTables:=True, _
    AllowSorting:=True, AllowFiltering:=True
Лист2.Protect Password:="Пароль", _
    Contents:=True, DrawingObjects:=False, AllowUsingPivotTables:=True, _
    AllowSorting:=True, AllowFiltering:=True
Лист1.Activate

Проблемы

Распределенные запросы, которые используют функцию OPENQUERY для обновления, удаления или вставки данных следующим образом

exec sp_dropserver 'linked1', 'droplogins'exec sp_addlinkedserver 'linked1', 'SQL Server'exec sp_setnetname  'linked1', '<servername>'exec sp_addlinkedsrvlogin 'linked1', 'false', null, '<login name>', '<password>'SET ANSI_NULLS ONgoSET ANSI_WARNINGS ONgoselect * from openquery (linked1, 'update testlinked set ssn=ssn+1')select * from openquery (linked1, 'insert into  testlinked  (ssn) values (1000)')select * from openquery (linked1, 'delete from  testlinked  where ssn=1')

могут возникать следующие сообщения об ошибках:

Сервер: сообщение 7357, уровень 16, состояние 2, строка 1 не удалось обработать объект «Update testlinked Set SSN = SSN». Поставщик OLE DB ‘ SQLOLEDB ‘ указывает на то, что в объекте нет столбцов. Сервер: MSG 7357, уровень 16, состояние 2, строка 1 [Microsoft] [драйвер SQL Server ODBC] [SQL Server] не удалось обработать объект «Update testlinked Set SSN = SSN». Поставщик OLE DB ‘ MSDASQL ‘ указывает на то, что в объекте нет столбцов.

Реальное текстовое сообщение об ошибке может отличаться в зависимости от поставщика OLE DB и выполняемой операции (обновления, вставки или удаления), но номер ошибки всегда равен 7357. Если вы используете Microsoft SQL Server 2005, появляется следующее сообщение об ошибке:

Сервер: MSG 7357, Level 16, состояние 2, строка 1 не может обработать объект «Update testlinked Set SSN = SSN». Поставщик OLE DB «SQLOLEDB» для связанного сервера «ИмяСервера» указывает на то, что у объекта нет столбцов или у текущего пользователя нет разрешений на доступ к этому объекту.

Причина

Для применения OPENQUERY требуется возвращаемый набор результатов, но инструкции UPDATE, DELETE и INSERT, используемые с OPENQUERY , не возвращают результирующий набор.

Обходное решение

Эту проблему можно обойти следующими способами:

  1. Для выполнения операций вставки, обновления и удаления используются имена из четырех частей (linked_server_name. catalog. Schema. object_name).

  2. Как описано в книге SQL Server Books Online, создайте ссылку на функцию OPENQUERY как целевую таблицу инструкции INSERT, UPDATE или DELETE в соответствии с возможностями поставщика OLE DB. В следующих запросах показано правильное использование поставщика OLE DB для SQL Server:

    update openquery(linked1, 'select ssn from testlinked where ssn=2')set ssn=ssn + 1insert openquery(linked1, 'select ssn from testlinked where 1=0') values (1000)delete openquery(linked1, 'select ssn from testlinked where ssn>100')

    Примечание. В инструкции INSERT используется предикат WHERE 1 = 0, чтобы исключить получение данных с удаленного сервера, что может привести к снижению производительности. Кроме того, для операций обновления и удаления существуют особые требования к индексам; подробные сведения приведены в разделе «Дополнительные сведения».

Дополнительная информация

Требование уникального индекса

Поставщик OLE DB для SQL Server требует, чтобы в базовой таблице существовал уникальный индекс для операций обновления или удаления. Если в удаленной таблице нет уникального индекса, при попытке обновления или удаления происходит следующее сообщение об ошибке:

Сервер: сообщение 7320, уровень 16, состояние 2, строка 1: не удалось выполнить запрос к поставщику услуг OLE DB providers «SQLOLEDB». Поставщик не поддерживает обязательный интерфейс поиска строк. Поставщик указывает на то, что возникли конфликты с другими свойствами или требованиями. [Поставщик OLE/DB вернул сообщение об ошибке: Многошаговая операция OLE DB вызвала ошибки. Установите флажок каждый из значений состояния OLE DB, если он доступен. Работа не выполнена.

Это применимо как к OPENQUERY , так и к четырем операциям Update и Delete из четырех частей. Проблему можно устранить, добавив уникальный индекс в удаленной таблице.

Динамическое выполнение с помощью OpenQuery

Иногда желательно использовать динамический запрос для достижения того же эффекта с помощью OPENQUERY, как показано в следующем примере:

begin tranSET QUOTED_IDENTIFIER OFFSET XACT_ABORT ONdeclare @cmd varchar(2500) declare @cmd1 varchar(2500) declare @var varchar(20) set @var = 'White' declare @var1 varchar(20) set @var1 = 'White1' declare @var2 varchar(20) set @var2 = 'Johnson1'select @cmd = "Update openquery(linked1,'select au_lname, au_fname from pubs.dbo.authorswhere au_lname = ''" + @var + "''' )set au_lname = '" + @var1 + "',au_fname = '" + @var2 + "'"exec ( @cmd )commit transelect * from <servername>.pubs.dbo.authors

Нужна дополнительная помощь?

Вопрос может покажется глупым, но не судите пожалуйста строго, я только начала изучать этот предмет…

Мне нужно «открыть соединение с хранилищем данных» (на C#).(Базу данных создавала в Access)

Пишу следующее:

Код:

OleDbConnection cn = new OleDbConnection();            

           
cn.ConnectionString =»Provider=Microsoft.Jet.OLEDB.4.0;» +
                       @»Data Source=D:BDbd2db2.mdb;» +
                       «Initial Catalog=t2;»;

            cn.Open();

            cn.Close();

Выдаётся в строке с Open ошибка:
«Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.»
Подскажите пожалуйста, что делалось неверно

3 ответа

29K

07 декабря 2007 года

Mr. Iden

12 / / 15.11.2007

С C# не дружу, но на C++ такой код вызвал бы ошибку из-за использования символа вместо \. Наверное правильнее будет
Source=D:\BD\bd2\db2.mdb

5

07 декабря 2007 года

hardcase

4.5K / / 09.08.2005

Подскажите пожалуйста, что делалось неверно

Трудно сказать, ваша строка подключения выглядит корректной.
Попробуйте добавить это соедниение в Visual Studio. Откройте Server Explorer (в полной версии) или Database Explorer (в Express версии), из него можно создать подключение, далее в свойствах можно посмотреть его строку подключения.

С C# не дружу, но на C++ такой код вызвал бы ошибку из-за использования символа вместо \. Наверное правильнее будет
Source=D:\BD\bd2\db2.mdb

Если не дружишь, то чего отвечаешь? В C# есть verbaitm-string, префиксом которой является @, семантика его такова, что компилятор не применяет к строке эскейп-последовательностей.

14K

07 декабря 2007 года

Irene_001

43 / / 29.07.2007

Спасибо огромное за ответы!!!Поломав немного глову я всё-таки поняла в чём дело (я пишу на всякий случай, вдруг кому-то станет интересно, или столкнётся с подобной проблемой)…
так как подключение через

OleDb

, то «Initial Catalog=t2;» в строке подключения— лишее. Если его убрать, то всё заработает

Код:

OleDbConnection cn = new OleDbConnection();            

           
cn.ConnectionString =»Provider=Microsoft.Jet.OLEDB.4.0;» +
                       @»Data Source=D:BDbd2db2.mdb;»; // правильная строка

            cn.Open();
            …………..
            cn.Close();

опять таки не берусь говорить что это 100% верно, но в этом случае у меня работает

  1. Здравствуйте!
    Есть один сервер. На нем стоит MS SQL, 1С сервер и терминально подключаются пользователи через RDP (до 80 пользователей).
    В один прекрасный день при входе в клиент-серверную базу 1С всем пользователям начало выдавать ошибку:

    Платформа: 1С:Предприятие 8.3 (8.3.5.1068)
    Ошибка СУБД:
    Microsoft SQL Server Native Client 11.0: Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.
    HRESULT=80040E21,

    Сервер перезагрузили. После перезагрузки пользователи при попытки зайти в базу видели ошибку:

    Платформа: 1С:Предприятие 8.3 (8.3.5.1068)
    Ошибка СУБД:
    Microsoft SQL Server Native Client 11.0: Ошибка выделения памяти
    HRESULT=80004005,

    При запуске Тестирования и исправление на проверку логической целостности к моменту завершения конфигуратор выдал критическую ошибку и завершил работу.
    Сервер перезагрузили и после пользователи смогли зайти в 1С и нормально начать работу. Прошло пара дней и при входе в 1С снова вылезла ошибка:

    Платформа: 1С:Предприятие 8.3 (8.3.5.1068)
    Ошибка СУБД:
    Microsoft SQL Server Native Client 11.0: Ошибка выделения памяти
    HRESULT=80004005,

    Потом, при выгрузке базы в файл .dt 1С её не выгрузила и выдала ошибку соединения с сервером 1С Предприятие. Подскажите возможные причины этого и как с этим бороться?


  2. Draco

    Offline

    Draco
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.722
    Симпатии:
    961
    Баллы:
    204

    У Гилева про жто хорошо написано
    http://www.gilev.ru/err80004005/

    — Объединение сообщений, 5 фев 2016

    модете так же перейти на 64 разрядный сервак

    — Объединение сообщений, 5 фев 2016

    ну еще бы посмотрел сколько памяти на самом сервере, сколько под скуль выделено и как у клатера настроено выделение памяти

  3. Спасибо!
    Да, статью Гилева читала. Манипуляции с конфигурацией производила.
    Неужели всё может упираться в 64х разрядность? … Дело в том, что платформу не обновляли, никаких изменений с конфигурацией не было, все и всё работало как работало и однажды случилось. Это для меня самое непонятное.Оперативки на сервере 32 Гб. Под скуль выделено 11 Гб, под сервер 1С — 3 Гб (он больше 1 Гб никогда не съедал).
    Больше под скуль выделить нельзя, RDP тоже нормально съедают.


  4. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    посмотрите сколько сервер 1С реально сейчас забрал памяти (если проблема до сих пор существует)?
    перезапуск сервера 1С при превышении определенного порога памяти настроен?

    — Объединение сообщений, 5 фев 2016

    З.Ы. и вообще какая сейчас ситуация с памятью на сервере (опять таки если проблема еще не решена). Отсортируйте диспетчер задач по количеству памяти и посмотрите какие приложения сколько забирают.

  5. Сервер 1С никогда больше 1 Гб не забирал. Перезапуск настроен.Именно в данный момент проблемы нет, но тогда, когда она была с памятью было всё в порядке, всё в норме.
    Я недоумеваю почему …


  6. Galich

    Offline

    Galich
    Опытный в 1С

    Регистрация:
    6 июн 2014
    Сообщения:
    281
    Симпатии:
    9
    Баллы:
    29

    Обращайтесь, обсудим, объясню что к чему.


  7. kiddy

    Offline

    kiddy

    Регистрация:
    1 фев 2017
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1

    Подскажите, пожалуйста, нужен 64 сервер 1с предприятие или 64 разрядной ОС достаточно?


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Произошли обстоятельства ошибка
  • Произошла чудовищная ошибка мем
  • Произошла ошибка при установке dota 2 диск поврежден
  • Произошла ошибка при установке не совпадает контрольная сумма unarc dll 12
  • Произошла фатальная ошибка это соединение прервано майнкрафт

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии