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

Just777

0 / 0 / 0

Регистрация: 06.04.2017

Сообщений: 66

1

MS SQL

10.01.2019, 18:37. Показов 16750. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Что за ошибка?
как ее исправить??

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

C#
1
2
3
4
5
6
7
8
9
10
11
using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + @"Data Source=NEVERSQLEXPRESS;Initial Catalog=programm;Integrated Security=True;"))
            {
                connection.Open();
                OleDbCommand cmd = new OleDbCommand("SELECT[region] FROM[name_region] GROUP BY[region];",connection);
                OleDbDataReader result = cmd.ExecuteReader();
                while (result.Read())
{
                    comboBox1.Items.Add(result[0]);
}
 
            }

Миниатюры

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



0



Администратор

Эксперт .NET

15621 / 12590 / 4990

Регистрация: 17.03.2014

Сообщений: 25,586

Записей в блоге: 1

10.01.2019, 22:28

2

Just777, ты к какой СУБД подключаешься — к Access или все-таки SQL Server?



0



1607 / 1116 / 165

Регистрация: 23.07.2010

Сообщений: 6,471

11.01.2019, 10:12

3

Цитата
Сообщение от Just777
Посмотреть сообщение

SELECT[region] FROM[name_region] GROUP BY[region]

пробелы расставь, дай шанс парсеру



0



0 / 0 / 0

Регистрация: 06.04.2017

Сообщений: 66

11.01.2019, 16:18

 [ТС]

4

OwenGlendower, sql server. Ошибка была в подключении)



0



  • 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

Я
   PitNN

28.10.22 — 09:50

Добрый день, Коллеги. Просьба подсказать, кто сталкивался. Есть внешняя БД на postgresql. В таблице одно из полей имеет тип timestamp (пробовал тип date результат тот же). При чтении данных ADODB.Recordset из этой таблицы, когда доходит до чтения из поля с типом «дата» вываливается ошибка: «Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.»

В чем может быть причина?

   Garykom

1 — 28.10.22 — 10:06

Причина в использовании устаревших уже не поддерживаемых реально технологий

   PitNN

2 — 28.10.22 — 10:51

(1) Какую именно технологию вы считаете устаревшей?

   Garykom

3 — 28.10.22 — 11:13

(2) ADODB и ODBC

   Garykom

4 — 28.10.22 — 11:19

v8sqlite — нативная ВК для работы из 1С c базами  sqlite см там 21 пост

это то что предпочитаю в настоящее время использовать вместо устаревших технологий

   NorthWind

5 — 28.10.22 — 11:47

(0) скорее всего кривая связка драйвера ODBC и OLE провайдера. Поищите другие варианты, например, подключитесь к ODBC драйверу через внешний источник данных 1С или попытайтесь поменять версию драйвера, если это возможно. Вообще OLEDB провайдеры достаточно капризная штука, особенно если речь идет не о Microsoftовских базах данных.

   Garykom

6 — 28.10.22 — 11:51

(5) Не поможет.

Потом какое то другое поле встретится, например длинное BINARY или еще что и снова привет.

   PitNN

7 — 28.10.22 — 11:52

(5) Замечена такая штука. Если в ячейке записана дата «0100-01-01 00:00:00.000», то при чтении из Recordset она определяется как 01.01.0001 (т.е. потерялись куда-то 100 лет)

Если в ячейке записана дата меньше «0100-01-01 00:00:00.000» (в том числе и «0001-01-01»), то это приводит к указанной выше ошибке.

Начиная с даты «0101-01-01 00:00:00.000» всё определяется корректно

   PitNN

8 — 28.10.22 — 11:53

(4) Как это поможет подключиться, например к clickhouse?

   Garykom

9 — 28.10.22 — 11:54

https://www.google.ru/search?q=odbc+timestamp+postrgesql

уже пробовал?

   Garykom

10 — 28.10.22 — 11:54

(8) а какая нахрен разница то?

   Garykom

11 — 28.10.22 — 11:55

(8) https://github.com/ClickHouse/clickhouse-go

   Garykom

12 — 28.10.22 — 12:40

https://github.com/Garykom/psql

   Garykom

13 — 28.10.22 — 13:15

(12)+ ну как работает psql.exe описанный в v8sqlite — нативная ВК для работы из 1С c базами  sqlite ?

   PitNN

14 — 28.10.22 — 13:54

(13) Работа через запуск командного интерпретатора с последующим чтением файла ответа это, конечно, вариант. Спасибо за совет

  

ДедМорроз

15 — 28.10.22 — 17:43

Можно еще попробовать дату приводить к строке или числу в самом запросе.

Проблемы

Распределенные запросы, которые используют функцию 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

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

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Понравилась статья? Поделить с друзьями:
  • Произошла системная ошибка приложение ржд
  • Произошла чудовищная ошибка позвоните товарищу сталину
  • Произошла серьезная ошибка пс4
  • Произошла системная ошибка на сайте ржд
  • Произошла чудовищная ошибка мем