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

Ситуация следующая:
Написал макрос для выгрузки данных из базы 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

I’m attempting to make a DTS package to transfer data between two databases on the same server and I’m getting the following errors. Iv read that the Multiple-step OLE DB operation generated error can occur when you are transferring between different database types and there is loss of precision, but this is not that case here. How do I examine the column meta data?

Error: 0xC0202009 at Data Flow Task,
piTech [183]: An OLE DB error has
occurred. Error code: 0x80040E21. An
OLE DB record is available. Source:
«Microsoft SQL Native Client»
Hresult: 0x80040E21 Description:
«Multiple-step OLE DB operation
generated errors. Check each OLE DB
status value, if available. No work
was done.».

Error: 0xC0202025 at Data Flow Task,
piTech [183]: Cannot create an OLE DB
accessor. Verify that the column
metadata is valid.

Error: 0xC004701A at Data Flow Task,
DTS.Pipeline: component «piTech» (183)
failed the pre-execute phase and
returned error code 0xC0202025.

asked Sep 9, 2008 at 10:58

Dan's user avatar

Take a look at the fields’s proprieties (type, length, default value, etc.), they should be the same.

I had this problem with SQL Server 2008 R2 because the fields’s length are not equal.

answered Oct 1, 2011 at 11:02

Anïs El Haouéli's user avatar

4

This error is common when the source table contains a TEXT column and the target is anything other than a TEXT column. It can be a real time-eater if you have not encountered (or forgot!) this before.

Convert the text column to string and set the error condition on truncation to ignore. this will usually serve as a solution for this error.

bensiu's user avatar

bensiu

24.7k56 gold badges77 silver badges117 bronze badges

answered Oct 22, 2012 at 17:26

Oliphant's user avatar

OliphantOliphant

1111 silver badge2 bronze badges

0

This query should identify columns that are potential problems…

SELECT * 
FROM [source].INFORMATION_SCHEMA.COLUMNS src
    INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst 
        ON dst.COLUMN_NAME = src.COLUMN_NAME
WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH 

Raj More's user avatar

Raj More

47.1k33 gold badges132 silver badges198 bronze badges

answered Sep 9, 2008 at 14:36

Michael Prewecki's user avatar

Michael PreweckiMichael Prewecki

2,0644 gold badges16 silver badges28 bronze badges

1

'-2147217887' message 'IDispatch error #3105' source 'Microsoft OLE DB Service Components' description 'Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.'."

This is what I was also facing. The problem came from the fact that I changed my SQLOLEDB.1 provider to SQLNCLI11 without mentioning the compatibility mode in the connection string.
When I set this DataTypeCompatibility=80; in the connection string, I got the problem solved.

answered Jun 21, 2017 at 9:11

Herve Mutombo's user avatar

Herve MutomboHerve Mutombo

1701 gold badge2 silver badges14 bronze badges

4

This issue will come mostly due to empty rows at the end of the file, remove those and run the job.

Petter Friberg's user avatar

answered Aug 4, 2017 at 10:46

jagadish ganaparthi's user avatar

For me the answer was that I was passing two parameters to and execute SQL task, but only using one. I was doing some testing and commented out a section of code using the second parameter. I neglected to remove the parameter mapping.

So ensure you are passing in the correct number of parameters in the parameter mapping if you are using the Execute SQL task.

answered Oct 9, 2018 at 17:36

Roi-Kyi Bryant's user avatar

1

You can use SELECT * FROM INFORMATION_SCHEMA.COLUMNS but I suspect you created the destination database from a script of the source database so it is very likely that they columns will be the same.

Some comparisons might bring something up though.

These sorts of errors sometimes come from trying to insert too much data into varchar columns too.

Raj More's user avatar

Raj More

47.1k33 gold badges132 silver badges198 bronze badges

answered Sep 9, 2008 at 11:04

Michael Prewecki's user avatar

Michael PreweckiMichael Prewecki

2,0644 gold badges16 silver badges28 bronze badges

I had a similar issue when i was transferring data from an old database to a new database, I got the error above. I then ran the following script

SELECT * FROM [source].INFORMATION_SCHEMA.COLUMNS src INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst ON dst.COLUMN_NAME = src.COLUMN_NAME WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH

and found that my columns where slightly different in terms of character sizes etc.
I then tried to alter the table to the new table structure which did not work. I then transferred the data from the old database into Excel and imported the data from excel to the new DB which worked 100%.

answered Apr 13, 2010 at 9:23

DON's user avatar

Also check if the script has no batch seperator commands (remove the ‘GO’ statements on a single line).

answered Jun 16, 2017 at 12:04

In my case, the problem was setting the variable of the Execute SQL Task, in parameters mapping the parameter name, (in OLEDB must be the position of the parameter that you call in the stored procedure), I had 1, but the first parameter starts in 0, so I changed it and voilá!

answered Jan 15, 2020 at 11:29

Artemination's user avatar

ArteminationArtemination

7032 gold badges10 silver badges30 bronze badges

check if you have written GO statement in your query. If it’s there then try to remove it.

drop table if exists Employee
GO

If should be only

drop table if exists Employee

answered Apr 26, 2022 at 11:27

Ravi's user avatar

This error will also occur when trying to do an insert and a field is coded not null and nulls are trying to be inserted.

answered Jul 25, 2013 at 20:32

polrbar5's user avatar

I hade this error when transfering a csv to mssql
I converted the columns to DT_NTEXT and some columns on mssql where set to nvarchar(255).

setting them to nvarchar(max) resolved it.

answered Nov 7, 2015 at 0:11

normalo's user avatar

Logo
MurCode

  • Форумы
  • Поиск
  • О проекте

r77

Дата: 10.10.2017 16:34:43

Добрый день.

delete from [192.168.1.99].Archive.dbo.RA
where FK_R in 
(select FK_R
	from [192.168.1.99].Archive.dbo.RA as ra
	left join [192.168.1.99].Archive.dbo.R rr on ra.FK_R=rr.pk
	where rr.RegistrNum is not null)

данный запрос на прилинкованном сервере [192.168.1.99], выдает такую ошибку:

Поставщик OLE DB "SQLNCLI10" для связанного сервера "192.168.1.99" вернул сообщение "Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.".
Сообщение 7202, уровень 11, состояние 2, строка 1
Could not find server 'SQLSERVER2' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.

Такая ошибка выдается на одном прилинкованном сервере из 30….на других такой ошибки нет…
Помогите, разобраться, пожалуйста…

r77

Дата: 10.10.2017 17:01:57

При чем если

DELETE

заменить на

SELECT * 

, то ошибки нет

TaPaK

Дата: 10.10.2017 17:03:42

r77,

автор
Could not find server ‘SQLSERVER2’ in sys.servers.

а это откуда? если на DELETE срабатывает, то возможно у вас триггер срабатывает и там кривой линк

r77

Дата: 10.10.2017 17:13:51

TaPaK,

триггеров нет на таблице

TaPaK

Дата: 10.10.2017 17:15:43

r77

Дата: 10.10.2017 17:16:47

TaPaK,

на обоих и [192.168.1.99].Archive.dbo.RA и [192.168.1.99].Archive.dbo.R — триггеров нет

TaPaK

Дата: 10.10.2017 17:22:37

r77,

так ищите где Could not find server ‘SQLSERVER2’ in sys.servers.

r77

Дата: 10.10.2017 17:24:55

TaPaK,

что вы имеете в виду?
конечно у меня прилинкован сервер [192.168.1.99], а не SQLSERVER2

SQLSERVER2 — это имя сервера [192.168.1.99]

r77

Дата: 10.10.2017 17:26:42

TaPaK,

еще раз….если DELETE заменить на SELECT — то с линками получается все в порядке…чем DELETE не нравится линку?и в линке ли проблема?

Владислав Колосов

Дата: 10.10.2017 18:21:25

r77,

DTC настроен? Компьютер не переименовывали?

Дата публикации:

11.06.2010

Случалось ли вам видеть такую ошибку в своих программах на ADO.Net или ADODB?

А сколько времени вы бы потратили на поиск и устранения проблемы? ЦЕЛЫЙ ДЕНЬ или может быть НЕДЕЛЮ? Видя этот текст, совершенно не понятно, что искать!

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

По нашей статистике большинство ошибок подобного рода связаны с чтением и преобразованием значений колонок.

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

Теперь, вместо старых неинформативных ошибок, вы будете получать конкретные сообщения с номером колонки и статусом, которые позволят БЫСТРЕЕ решить проблему:

Ошибка получения данных колонки [номер: 1][COLUMN_NAME]. Статус: DBSTATUS_E_CANTCONVERTVALUE.

Посмотрите пример моделирования такой ситуации:

option explicit

dim cn
dim rs

set cn=createobject("ADODB.Connection")

cn.Provider="LCPI.IBProvider.3"

cn.Properties("location")    ="localhost:d:\database\ibp_test_fb25_d3.gdb"
cn.Properties("user id")     ="SYSDBA"
cn.Properties("password")    ="masterkey"
cn.Properties("ctype")       ="win1251"
cn.Properties("ctype_none")  ="win1251"
cn.Properties("auto_commit") =true

wscript.echo "point #001 (insert win2151 into NONE-column)"
wscript.echo ""

call cn.Open()

call cn.Execute("RECREATE TABLE TEST_NONE (COL_NAME_WITH_NONE_ENC VARCHAR(128) CHARACTER SET NONE)")

call cn.Execute("INSERT INTO TEST_NONE (COL_NAME_WITH_NONE_ENC) VALUES (_none 'русский текст (russian text)')")

set rs=cn.Execute("select * from TEST_NONE")

wscript.echo "str:"&rs(0).value

set rs=nothing

call cn.Close()

wscript.echo ""
wscript.echo "point #002 (select NONE-column with win1251 text as unicode_fss text)"
wscript.echo ""

cn.Properties("ctype")       ="unicode_fss"
cn.Properties("ctype_none")  ="unicode_fss"

call cn.Open()

set rs=cn.Execute("select * from TEST_NONE")

dim v

on error resume next

v=rs(0).Value

wscript.echo "GENERAL ERROR SOURCE:"&err.Source
wscript.echo "GENERAL ERROR DESCR:"&err.Description
wscript.echo "GENERAL ERROR CODE:"&err.Number

on error goto 0

wscript.echo

dim i

for i=0 to cn.Errors.Count-1
 wscript.echo "--- PROVIDER ERROR: "&cstr(i+1)
 wscript.echo "Source      : "&cn.Errors.Item(i).Source
 wscript.echo "Description : "&cn.Errors.Item(i).Description
 wscript.echo "Code        : "&cn.Errors.Item(i).Number
 wscript.echo "SQLState    : "&cn.Errors.Item(i).SQLSTATE
 wscript.echo "NativeError : "&cn.Errors.Item(i).NativeError
next

set rs=nothing

call cn.Close()

Вывод (output):

point #001 (insert win2151 into NONE-column)

str:русский текст (russian text)

point #002 (select NONE-column with win1251 text as unicode_fss text)

GENERAL ERROR SOURCE:LCPI.IBProvider.3
GENERAL ERROR DESCR:Ошибка получения данных колонки [номер: 1][COL_NAME_WITH_NONE_ENC].
                    Статус: DBSTATUS_E_CANTCONVERTVALUE.
GENERAL ERROR CODE:-2147217913

--- PROVIDER ERROR: 1
Source      : LCPI.IBProvider.3
Description : Ошибка получения данных колонки [номер: 1][COL_NAME_WITH_NONE_ENC].
              Статус: DBSTATUS_E_CANTCONVERTVALUE.
Code        : -2147217913
SQLState    :
NativeError : 2253

В новой версии IBProvider Professional Edition помимо информативности сообщений:

  • Улучшено кеширование метаданных при работе со значениями колонок
  • Оптимизировано использование памяти под метаданные
  • Улучшена работа с OCTETS-блобами (FB2.1, FB2.5)
  • Исправлено несколько ошибок. Рекомендуем клиентам обновиться до последней версии

Дата публикации:

11.06.2010

. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.

 
TechnoDreamer
 
(2004-11-02 03:29)
[0]

Собственно прога выдает во время рунтайма следующее сообщение:
«Произошли ошибки во время выполнения многошаговой операции. Проверьте значение всех состояний». Происходит во время рекурсивной функции, насколько я вижу только в тех случаях где рекурсия большая. Я прав? Кто нибуть сталкивался?
Что делать? Может есть какая директива компилятору, типа там, стек увеличить или еще что, которая влияет на это?
Или придется убирать рекурсию? Жалко было бы, такая аккуратная функция получилась :-(((


 
R ©
 
(2004-11-02 03:58)
[1]

А код привести можно.


 
Defunct ©
 
(2004-11-02 04:30)
[2]

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

У тебя что русский Delphi? Неужели прямо так и пишет.


 
Fay ©
 
(2004-11-02 06:36)
[3]

Переделай в цикл.


 
KSergey ©
 
(2004-11-02 08:19)
[4]

Очеь похоже на сообщение от ADO… Оно используется?


 
TechnoDreamer
 
(2004-11-02 18:29)
[5]

2R: Код довольно большой и связан с другими кусками.
2Fay: Видимо придется,хотя…
2KSergey: Да, адо используется, подскажешь в связи с чем ошибка?

Вообще, код делает следующее:
Есть дерево (TTreeView) и база на Access через ADO, в дереве хранятся названия категорий (возможны и подкатегории) и элементов, т.е. оно связано с базой (там две таблицы: категории и элементы, одно из полей название категории или элемента).
Рекурсивная функция для удаления категории, т.е. она смотрит, если нет дочерних элементов то удаляется запись в базе, и соответствующий элемент TTreeNode, в противном случае удаляется рекурсивно подкатегории и элементы.
На небольших ветках дерева работает прекрасно, а вот на более больших возникает эта ощибка (2Defunct, да так прям и пишет, это винда пишет, а не дельфи, и судя по постингу KSergey это пишет ADO).


 
TechnoDreamer
 
(2004-11-02 18:29)
[6]

2R: Код довольно большой и связан с другими кусками.
2Fay: Видимо придется,хотя…
2KSergey: Да, адо используется, подскажешь в связи с чем ошибка?

Вообще, код делает следующее:
Есть дерево (TTreeView) и база на Access через ADO, в дереве хранятся названия категорий (возможны и подкатегории) и элементов, т.е. оно связано с базой (там две таблицы: категории и элементы, одно из полей название категории или элемента).
Рекурсивная функция для удаления категории, т.е. она смотрит, если нет дочерних элементов то удаляется запись в базе, и соответствующий элемент TTreeNode, в противном случае удаляется рекурсивно подкатегории и элементы.
На небольших ветках дерева работает прекрасно, а вот на более больших возникает эта ощибка (2Defunct, да так прям и пишет, это винда пишет, а не дельфи, и судя по постингу KSergey это пишет ADO).


 
KSergey ©
 
(2004-11-03 12:57)
[7]

Однозначно тут сказать очень сложно.
Советую предпринять след. шаги:

1.Как я понимаю — все делается методами Delete/Post и т.п. Можно перейти на SQL-запросы на удаление/обновление. Во всяком случае эту проблему это решит однозначно.

2.Какая БД используется? Для MS SQL могу рассказать, про другие -не знаю. (к стати, приличные люди сразу это пишут, в вопросе)

3.В любом случае советую почитать все три части от
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=408


 
TechnoDreamer
 
(2004-11-03 18:46)
[8]

//1.Как я понимаю — все делается методами Delete/Post и т.п. Можно перейти на SQL-запросы на удаление/обновление. Во всяком случае эту проблему это решит однозначно.//

Да, вы правы.

//2.Какая БД используется? Для MS SQL могу рассказать, про другие -не знаю. (к стати, приличные люди сразу это пишут, в вопросе)//
Я говорил:
//Есть дерево (TTreeView) и база на Access через ADO//


 
KSergey ©
 
(2004-11-04 06:53)
[9]

> Я говорил:
> //Есть дерево (TTreeView) и база на Access через ADO//

Прошу прощения, просмотрел.
Тогда, думаю, приведенная мною ссылка должна помочь — там именно про Access и очень много. (только читать все 3 части)


 
Erik1 ©
 
(2004-11-04 10:31)
[10]

Вобщето стоит перейти на DOA, это избавить от дополнительной прослойуи в лице ADO и повысит скорость работы. Я советую компоненты diamond www.islamov.com Кое что даже сам правил, но назнаю включил ли он это в свою версию.


Понравилась статья? Поделить с друзьями:
  • Произошла фатальная ошибка это соединение прервано майнкрафт
  • Произошла сетевая ошибка 1107 sony bravia
  • Произошла следующая ошибка при попытке удаления пользователя
  • Произошла чудовищная ошибка позвоните товарищу сталину
  • Произошла сетевая ошибка 1106 на телевизоре сони бравиа