Ситуация следующая:
Написал макрос для выгрузки данных из базы SQL Server в Excel. У меня все работает корректно. Отправил файл с макросом коллеге и у него появляется данная ошибка. Отдел безопасности говорит, что доступ ему предоставили.
Строка соединения:
ConnectionString = "Provider=SQLOLEDB;Data Source=server name; " _
& "Initial Catalog=database name; Integrated Security=SSPI; " _
& "IsolationLevel=adXactReadUncommitted"
Весь код
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
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
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
24.7k56 gold badges77 silver badges117 bronze badges
answered Oct 22, 2012 at 17:26
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
47.1k33 gold badges132 silver badges198 bronze badges
answered Sep 9, 2008 at 14:36
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 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.
answered Aug 4, 2017 at 10:46
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
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
47.1k33 gold badges132 silver badges198 bronze badges
answered Sep 9, 2008 at 11:04
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
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
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
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
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
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 Кое что даже сам правил, но назнаю включил ли он это в свою версию.