После добавление временной таблицы и левого соединения к Основному запросу (много строк) начала выскакивать ошибка, указанная в заголовке.
Как-то не понятно почему, до этого использовал временные таблицы не было такого …
// само левое соединение
| — Отобрать Outcome
| LEFT JOIN #MasterTransactionIdForOutcome AS TraOt ON TraOt.MasterTransactionId = Operations.MasterTransactionId
| — СОСТАВИТЬ СПИСОК MasterTransactionId С Outcome
| IF OBJECT_ID(‘tempdb..MasterTransactionIdForOutcome’) IS NOT NULL DROP TABLE #MasterTransactionIdForOutcome
| SELECT DISTINCT TraT.MasterTransactionId
| INTO #MasterTransactionIdForOutcome
| FROM ski2db2017.dbo.MasterTransaction AS Operations
| LEFT JOIN ski2db2017.dbo.TransactionDetail AS Tra ON Tra.MasterTransactionId = Operations.MasterTransactionId
| AND Tra.SuperAccountIdFrom = 2 AND Tra.SuperAccountIdTo IS NULL
| LEFT JOIN ski2db2017.dbo.TransactionDetail AS TraT ON TraT.MasterTransactionId = Tra.MasterTransactionId
| AND TraT.SuperAccountIdFrom <> 2 AND TraT.SuperAccountIdFrom IS NOT NULL
| AND TraT.SuperAccountIdTo = 2
| WHERE TraT.MasterTransactionId IS NOT NULL —Operations.TransTime BETWEEN ‘20170202’ AND ‘20170203’
RecordSet = Новый COMОбъект(«ADODB.RecordSet»);
RecordSet.Open(ТекстЗапроса, Connection);
//перейдём в начало списка
Если Не RecordSet.EOF Тогда
RecordSet.MoveFirst();
КонецЕсли;
Попытка
// для каждой полученной записи
Пока Не RecordSet.EOF Цикл // ТУТ ОШИБКА ВЫЛЕТАТ ОБ Операция не допускается, если объект закрыт.
ОбработкаПрерыванияПользователя();
НоваяСтрока = ТаблицаРезультат.Добавить();
// заполняем строку
Для каждого Колонка из ЭлементыФормы.ТаблицаРезультат.Колонки Цикл
ОбработкаПрерыванияПользователя();
ИмяКолонки = Колонка.Имя;
Если ИмяКолонки = «НомерСтроки» ИЛИ ИмяКолонки = «ДатаБезВремени» Тогда
Продолжить;
КонецЕсли;
Значение = RecordSet.Fields.Item(ИмяКолонки).Value;
Если значение <> Null Тогда
НоваяСтрока[ИмяКолонки] = СокрЛП(Значение);
Если Найти(ИмяКолонки, «Id») Тогда
НоваяСтрока[ИмяКолонки] = СтрЗаменить(НоваяСтрока[ИмяКолонки], » «, «»);
КонецЕсли;
КонецЕсли;
КонецЦикла;
// переходим к сл. строке
RecordSet.MoveNext();
КонецЦикла;
Исключение
//Предупреждение(«База Скибарс занята. Повторите попытку подключения позже.»);
Сообщить(ОписаниеОшибки());
КонецПопытки;
ЭтаФорма.Заголовок = «Количество строк: » + ТаблицаРезультат.Количество()
+ «, времени затрачено: » + (ТекущаяДата() — ДатаНачалаДляВремени) + » секунд»;
This function inserts a row into a SQL database and needs to return the identity number created:
Function WriteDatabase(backupTypeID, numImages, folderSize, success, errorMessage, strLogFileName)
On Error Resume Next
err.clear
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open "Provider=SQLOLEDB;Data Source=x.x.x.x;Initial Catalog=DB;User ID=sa;Password=xxxxxx"
sqlquery = "INSERT INTO tblImageCopies (BackupCopyDate, BackupCopyTypeID, NumImages, ImagesFolderSize, Success, ErrorMessage) VALUES (GETDATE(), " & backupTypeID & ", " & numImages & ", " & folderSize & ", " & success & ", " & errorMessage & "); SELECT scope_identity() AS ImageCopyID;"
objRecordSet.Open sqlquery,objConnection
objRecordSet.MoveFirst
WriteDatabase = objRecordSet("ImageCopyID")
objRecordSet.Close
objConnection.Close
If err.number <> 0 Then
WriteLog "Error writing to the EHN database - " & err.number & " " & err.description, strLogFileName
End If
End Function
It successfully inserts the row, but I get the error message ‘3704 Operation is not allowed when the object is closed.’ when it tries to return the identity number in the record set. When I execute this sql query directly on the server, it works. Anyone able to help?
1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
|
1 |
|
03.12.2015, 09:14. Показов 9782. Ответов 9
Такая ситуация — происходит коннект к внешней базе через коннект отправляется sql запрос, объект rs =New ADODB.Recordset, затем, при методе «Do while not rs.EOF» возникает ошибка 3704, но если перед циклом поставить задержку в секунду то, запрос нормально пробегается, такое ощущение, что не хватает времени для открытия запроса. Но ставить задержку в секунду как-то накладно, если необходимо 1000 раз обращаться, то это уже 1000 секунд задержки просто так. Как можно победить данную ошибку?
0 |
7336 / 4476 / 289 Регистрация: 12.08.2011 Сообщений: 13,561 |
|
03.12.2015, 10:05 |
2 |
А если ошибку игнорировать, всё работает как надо?
0 |
1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
|
03.12.2015, 10:06 [ТС] |
3 |
да, но при этом нужно идти в Debug и продолжить выполнение, т.е. происходит задержка, я поставил перед циклом задержку на 0.6 секунд и вроде не вылетает, но это костыль какой-то получается
0 |
mobile 26784 / 14463 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
03.12.2015, 10:08 |
4 |
|||
Попробуйте использовать DoEvents
1 |
Модератор 11400 / 4710 / 759 Регистрация: 07.08.2010 Сообщений: 13,665 Записей в блоге: 4 |
|
03.12.2015, 10:20 |
5 |
не помешает вставить счетчик повторов, иначе можно зациклиться
0 |
Silmaril 1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
||||
03.12.2015, 10:43 [ТС] |
6 |
|||
Спасибо! Получается, но немного изменил:
0 |
shanemac51 Модератор 11400 / 4710 / 759 Регистрация: 07.08.2010 Сообщений: 13,665 Записей в блоге: 4 |
||||
03.12.2015, 10:54 |
7 |
|||
Сообщение было отмечено Silmaril как решение Решение
1 |
1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
|
03.12.2015, 10:59 [ТС] |
8 |
Спасибо! Точно! Нужная вещь о количестве повторов, т.к. я не задумался, что связи может не быть
0 |
шапоклякистка 8-го дня 3675 / 2235 / 391 Регистрация: 26.06.2015 Сообщений: 4,647 Записей в блоге: 1 |
|
03.12.2015, 11:00 |
9 |
Помнится, читала я в какой-то из рекомендованый mobile книг, что для отлавливания такой ситуации есть свойство .State у ADODB.Recordset — оно меняется, когда рекордсет уже открыт и готов к работе. Честно говорю, что сама еще не пробовала (повода не было), просто отложилось в памяти.
1 |
1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
|
03.12.2015, 11:09 [ТС] |
10 |
Да, тоже имеет место быть, когда State = 1 то всё готово, но State в условии существенно увеличивает время обработки
0 |
Номер телефона пуст
Чаще всего эта ситуация встречается, при работе с файлом Excel. В вопросах и ответах есть объяснения причин этого:
- Почему некоторые номера телефонов в программе пустые, хотя в документе Excel они заполнены?
- Почему программа звонит по отсутствующим номерам в пустых ячейках Excel?
Ещё одной причиной может быть неправильно выбранное поле базы данных (столбец) с номером телефона на странице выбора полей с данными.
Невозможно записать сделанные изменения, поскольку введенное значение противоречит параметрам, заданным для этой таблицы или списка
Скорее всего, в качестве источника данных используется документ Excel. Подобные ошибки возникают в том случае, когда используются объединённые ячейки в таблице.
Возникла ошибка в записи результатов звонка
Запрос для записи в базу данных результатов работы не может быть выполнен. Возможно, вы выбрали другой источник данных на странице записи результатов или, если используется собственный SQL-запрос, сделали в нём ошибку. В первом случае достаточно указать правильные поля для записи, во втором обязательно проверьте, работает ли запрос при нажатии на кнопку «Проверить».
Операция не допускается, если объект закрыт
Источник данных, из которого необходимо получить или в который надо записать данные в настоящий момент недоступен. Проверьте возможность подключения к источнику данных. Возможно, он используется каким-то приложением, в том числе запущенной или некорректно закрытой копией Call Office. Во втором случае нужно завершить в диспетчере процессов все процессы mshta.exe.
Ошибка загрузки страницы. Разрешение отклонено
Проверьте, есть ли у вас доступ к базе данных. Если есть, то ваши операционные системы конфликтуют друг с другом, такое встречается, например, при попытке Windows XP получить доступ к базе данных в более старшей версии Windows. Установите ODBC-драйвер доступа к этой базе данных или перенесите базу данных на локальный компьютер, где установлен Call Office.
BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись
Вероятно, что ошибка возникла после того, как была удалена запись из базы данных, с которой программа собиралась работать. Если ошибка возникает и пользователь не изменял поля в базе данных, то сформируйте журнал и отправьте его разработчикам для дальнейшего изучения и выявления ошибки.
Ошибка получения данных для обзвона
После запуска сценария программа пытается получить данные с номерами телефонов, суммами задолженностей и так далее. Если данные не могут быть получены, возникает эта ошибка. Попробуйте заново указать источник данных и выбрать необходимые для работы сценария поля. Возможно, была изменена структура таблицы или базы данных, с которой вы работаете. Например, удалён лист из файла Excel, переименованы названия колонок и так далее.
Отсутствует значение для одного или нескольких требуемых параметров
Ошибка может возникать в связи с тем, что формат столбца в базе является числовым, а данные для записи имеют текстовый формат. Попробуйте изменить форматы столбцов для записи на текстовый или числовой. Столбец с датой должен иметь формат даты.
Объект не найден ядром базы данных
Ошибка может возникать из-за неправильного указания имени таблицы в выбранной базе данных. Проверьте корректность указанной таблицы.
Потеряна связь с Microsoft Excel для просмотра присоединенных листов
Такая ошибка чаще всего возникает, если вы открыли документ Excel, затем запустили Call Office использующий этот же документ и после этого закрыли документ Excel. В этом случае ODBC-драйвер для работы с документами Excel теряет связь с открытым документом и возникает эта ошибка.
Мы рекомендуем не открывать документ Excel перед работой Call Office.
В процессе записи результата возникла ошибка: недопустимое имя
Такая ошибка возникает при вызове SQL-запроса, когда имя таблицы указана не верно или указана с ошибкой. Проверьте корректность имени таблицы.
Недостаточно системных ресурсов, при выполнении SQL запроса
CallOffice является 32-х битным приложением, и имеет ограниченный размер динамически выделяемой памяти в 2 GB. Данная ошибка возникает при достигнутом ограничении. Чаще всего это происходит при обзвоне в несколько циклов, с большой базой номеров. В таком случае мы рекомендуем установить в настройках количество циклов 1, а запуск в несколько циклов осуществлять с помощью bat файла
После добавление временной таблицы и левого соединения к Основному запросу (много строк) начала выскакивать ошибка, указанная в заголовке.
Как-то не понятно почему, до этого использовал временные таблицы не было такого …
// само левое соединение
| — Отобрать Outcome
| LEFT JOIN #MasterTransactionIdForOutcome AS TraOt ON TraOt.MasterTransactionId = Operations.MasterTransactionId
| — СОСТАВИТЬ СПИСОК MasterTransactionId С Outcome
| IF OBJECT_ID(‘tempdb..MasterTransactionIdForOutcome’) IS NOT NULL DROP TABLE #MasterTransactionIdForOutcome
| SELECT DISTINCT TraT.MasterTransactionId
| INTO #MasterTransactionIdForOutcome
| FROM ski2db2017.dbo.MasterTransaction AS Operations
| LEFT JOIN ski2db2017.dbo.TransactionDetail AS Tra ON Tra.MasterTransactionId = Operations.MasterTransactionId
| AND Tra.SuperAccountIdFrom = 2 AND Tra.SuperAccountIdTo IS NULL
| LEFT JOIN ski2db2017.dbo.TransactionDetail AS TraT ON TraT.MasterTransactionId = Tra.MasterTransactionId
| AND TraT.SuperAccountIdFrom <> 2 AND TraT.SuperAccountIdFrom IS NOT NULL
| AND TraT.SuperAccountIdTo = 2
| WHERE TraT.MasterTransactionId IS NOT NULL —Operations.TransTime BETWEEN ‘20170202’ AND ‘20170203’
RecordSet = Новый COMОбъект(«ADODB.RecordSet»);
RecordSet.Open(ТекстЗапроса, Connection);
//перейдём в начало списка
Если Не RecordSet.EOF Тогда
RecordSet.MoveFirst();
КонецЕсли;
Попытка
// для каждой полученной записи
Пока Не RecordSet.EOF Цикл // ТУТ ОШИБКА ВЫЛЕТАТ ОБ Операция не допускается, если объект закрыт.
ОбработкаПрерыванияПользователя();
НоваяСтрока = ТаблицаРезультат.Добавить();
// заполняем строку
Для каждого Колонка из ЭлементыФормы.ТаблицаРезультат.Колонки Цикл
ОбработкаПрерыванияПользователя();
ИмяКолонки = Колонка.Имя;
Если ИмяКолонки = «НомерСтроки» ИЛИ ИмяКолонки = «ДатаБезВремени» Тогда
Продолжить;
КонецЕсли;
Значение = RecordSet.Fields.Item(ИмяКолонки).Value;
Если значение <> Null Тогда
НоваяСтрока[ИмяКолонки] = СокрЛП(Значение);
Если Найти(ИмяКолонки, «Id») Тогда
НоваяСтрока[ИмяКолонки] = СтрЗаменить(НоваяСтрока[ИмяКолонки], » «, «»);
КонецЕсли;
КонецЕсли;
КонецЦикла;
// переходим к сл. строке
RecordSet.MoveNext();
КонецЦикла;
Исключение
//Предупреждение(«База Скибарс занята. Повторите попытку подключения позже.»);
Сообщить(ОписаниеОшибки());
КонецПопытки;
ЭтаФорма.Заголовок = «Количество строк: » + ТаблицаРезультат.Количество()
+ «, времени затрачено: » + (ТекущаяДата() — ДатаНачалаДляВремени) + » секунд»;
Номер телефона пуст
Чаще всего эта ситуация встречается, при работе с файлом Excel. В вопросах и ответах есть объяснения причин этого:
- Почему некоторые номера телефонов в программе пустые, хотя в документе Excel они заполнены?
- Почему программа звонит по отсутствующим номерам в пустых ячейках Excel?
Ещё одной причиной может быть неправильно выбранное поле базы данных (столбец) с номером телефона на странице выбора полей с данными.
Невозможно записать сделанные изменения, поскольку введенное значение противоречит параметрам, заданным для этой таблицы или списка
Скорее всего, в качестве источника данных используется документ Excel. Подобные ошибки возникают в том случае, когда используются объединённые ячейки в таблице.
Возникла ошибка в записи результатов звонка
Запрос для записи в базу данных результатов работы не может быть выполнен. Возможно, вы выбрали другой источник данных на странице записи результатов или, если используется собственный SQL-запрос, сделали в нём ошибку. В первом случае достаточно указать правильные поля для записи, во втором обязательно проверьте, работает ли запрос при нажатии на кнопку «Проверить».
Операция не допускается, если объект закрыт
Источник данных, из которого необходимо получить или в который надо записать данные в настоящий момент недоступен. Проверьте возможность подключения к источнику данных. Возможно, он используется каким-то приложением, в том числе запущенной или некорректно закрытой копией Call Office. Во втором случае нужно завершить в диспетчере процессов все процессы mshta.exe.
Ошибка загрузки страницы. Разрешение отклонено
Проверьте, есть ли у вас доступ к базе данных. Если есть, то ваши операционные системы конфликтуют друг с другом, такое встречается, например, при попытке Windows XP получить доступ к базе данных в более старшей версии Windows. Установите ODBC-драйвер доступа к этой базе данных или перенесите базу данных на локальный компьютер, где установлен Call Office.
BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись
Вероятно, что ошибка возникла после того, как была удалена запись из базы данных, с которой программа собиралась работать. Если ошибка возникает и пользователь не изменял поля в базе данных, то сформируйте журнал и отправьте его разработчикам для дальнейшего изучения и выявления ошибки.
Ошибка получения данных для обзвона
После запуска сценария программа пытается получить данные с номерами телефонов, суммами задолженностей и так далее. Если данные не могут быть получены, возникает эта ошибка. Попробуйте заново указать источник данных и выбрать необходимые для работы сценария поля. Возможно, была изменена структура таблицы или базы данных, с которой вы работаете. Например, удалён лист из файла Excel, переименованы названия колонок и так далее.
Отсутствует значение для одного или нескольких требуемых параметров
Ошибка может возникать в связи с тем, что формат столбца в базе является числовым, а данные для записи имеют текстовый формат. Попробуйте изменить форматы столбцов для записи на текстовый или числовой. Столбец с датой должен иметь формат даты.
Объект не найден ядром базы данных
Ошибка может возникать из-за неправильного указания имени таблицы в выбранной базе данных. Проверьте корректность указанной таблицы.
Потеряна связь с Microsoft Excel для просмотра присоединенных листов
Такая ошибка чаще всего возникает, если вы открыли документ Excel, затем запустили Call Office использующий этот же документ и после этого закрыли документ Excel. В этом случае ODBC-драйвер для работы с документами Excel теряет связь с открытым документом и возникает эта ошибка.
Мы рекомендуем не открывать документ Excel перед работой Call Office.
В процессе записи результата возникла ошибка: недопустимое имя
Такая ошибка возникает при вызове SQL-запроса, когда имя таблицы указана не верно или указана с ошибкой. Проверьте корректность имени таблицы.
Недостаточно системных ресурсов, при выполнении SQL запроса
CallOffice является 32-х битным приложением, и имеет ограниченный размер динамически выделяемой памяти в 2 GB. Данная ошибка возникает при достигнутом ограничении. Чаще всего это происходит при обзвоне в несколько циклов, с большой базой номеров. В таком случае мы рекомендуем установить в настройках количество циклов 1, а запуск в несколько циклов осуществлять с помощью bat файла
1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
|
1 |
|
03.12.2015, 09:14. Показов 8979. Ответов 9
Такая ситуация — происходит коннект к внешней базе через коннект отправляется sql запрос, объект rs =New ADODB.Recordset, затем, при методе «Do while not rs.EOF» возникает ошибка 3704, но если перед циклом поставить задержку в секунду то, запрос нормально пробегается, такое ощущение, что не хватает времени для открытия запроса. Но ставить задержку в секунду как-то накладно, если необходимо 1000 раз обращаться, то это уже 1000 секунд задержки просто так. Как можно победить данную ошибку?
__________________ 0 |
7262 / 4465 / 287 Регистрация: 12.08.2011 Сообщений: 13,445 |
|
03.12.2015, 10:05 |
2 |
А если ошибку игнорировать, всё работает как надо? 0 |
1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
|
03.12.2015, 10:06 [ТС] |
3 |
да, но при этом нужно идти в Debug и продолжить выполнение, т.е. происходит задержка, я поставил перед циклом задержку на 0.6 секунд и вроде не вылетает, но это костыль какой-то получается 0 |
mobile 26771 / 14450 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
03.12.2015, 10:08 |
4 |
|||
Попробуйте использовать DoEvents
1 |
Модератор 11261 / 4592 / 739 Регистрация: 07.08.2010 Сообщений: 13,157 Записей в блоге: 4 |
|
03.12.2015, 10:20 |
5 |
не помешает вставить счетчик повторов, иначе можно зациклиться 0 |
Silmaril 1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
||||
03.12.2015, 10:43 [ТС] |
6 |
|||
Спасибо! Получается, но немного изменил:
0 |
shanemac51 Модератор 11261 / 4592 / 739 Регистрация: 07.08.2010 Сообщений: 13,157 Записей в блоге: 4 |
||||
03.12.2015, 10:54 |
7 |
|||
Сообщение было отмечено Silmaril как решение Решение
1 |
1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
|
03.12.2015, 10:59 [ТС] |
8 |
Спасибо! Точно! Нужная вещь о количестве повторов, т.к. я не задумался, что связи может не быть 0 |
шапоклякистка 8-го дня 3672 / 2232 / 391 Регистрация: 26.06.2015 Сообщений: 4,647 Записей в блоге: 1 |
|
03.12.2015, 11:00 |
9 |
Помнится, читала я в какой-то из рекомендованый mobile книг, что для отлавливания такой ситуации есть свойство .State у ADODB.Recordset — оно меняется, когда рекордсет уже открыт и готов к работе. Честно говорю, что сама еще не пробовала (повода не было), просто отложилось в памяти. 1 |
1 / 1 / 0 Регистрация: 29.04.2015 Сообщений: 88 |
|
03.12.2015, 11:09 [ТС] |
10 |
Да, тоже имеет место быть, когда State = 1 то всё готово, но State в условии существенно увеличивает время обработки 0 |
naz Пользователь Сообщений: 38 |
#1 01.03.2016 13:41:16 Доброго первого дня весны, уважаемые.
, который нормально работает, если хранимая процедура «MyProcedure» возвращает набор строк быстро. |
||
Doober Пользователь Сообщений: 2131 |
Оптимизируйте процедуру или получайте результат частями. |
naz Пользователь Сообщений: 38 |
Тяжеловата процедура.. Хочется что- нить в объектах Connection , Command и Recordset подкрутить.. Почему Recordset закрытым оказывается? Изменено: naz — 01.03.2016 16:38:17 |
Doober Пользователь Сообщений: 2131 |
#4 01.03.2016 15:00:36
Время отработки процедуры очень большое. <#0> |
||
naz Пользователь Сообщений: 38 |
#5 01.03.2016 16:22:46 Похоже, дело не во времени выполнения процедуры, а в том, что в ней используется insert. Вот фрагмент процедуры:
Если insert не использовать, ошибки нет.. Выполняется быстро. Изменено: naz — 01.03.2016 16:23:37 |
||
Doober Пользователь Сообщений: 2131 |
Ошибки исправляете? |
naz Пользователь Сообщений: 38 |
#7 02.03.2016 06:09:50
Нет, такой уже нет ошибки. Пробую разные варианты, может хранимку в функцию переделаю.. |
||
naz Пользователь Сообщений: 38 |
#8 02.03.2016 11:28:42 Вообщем так решил проблему. Может, кому пригодится.
|
||
This function inserts a row into a SQL database and needs to return the identity number created:
Function WriteDatabase(backupTypeID, numImages, folderSize, success, errorMessage, strLogFileName)
On Error Resume Next
err.clear
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open "Provider=SQLOLEDB;Data Source=x.x.x.x;Initial Catalog=DB;User ID=sa;Password=xxxxxx"
sqlquery = "INSERT INTO tblImageCopies (BackupCopyDate, BackupCopyTypeID, NumImages, ImagesFolderSize, Success, ErrorMessage) VALUES (GETDATE(), " & backupTypeID & ", " & numImages & ", " & folderSize & ", " & success & ", " & errorMessage & "); SELECT scope_identity() AS ImageCopyID;"
objRecordSet.Open sqlquery,objConnection
objRecordSet.MoveFirst
WriteDatabase = objRecordSet("ImageCopyID")
objRecordSet.Close
objConnection.Close
If err.number <> 0 Then
WriteLog "Error writing to the EHN database - " & err.number & " " & err.description, strLogFileName
End If
End Function
It successfully inserts the row, but I get the error message ‘3704 Operation is not allowed when the object is closed.’ when it tries to return the identity number in the record set. When I execute this sql query directly on the server, it works. Anyone able to help?
This function inserts a row into a SQL database and needs to return the identity number created:
Function WriteDatabase(backupTypeID, numImages, folderSize, success, errorMessage, strLogFileName)
On Error Resume Next
err.clear
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open "Provider=SQLOLEDB;Data Source=x.x.x.x;Initial Catalog=DB;User ID=sa;Password=xxxxxx"
sqlquery = "INSERT INTO tblImageCopies (BackupCopyDate, BackupCopyTypeID, NumImages, ImagesFolderSize, Success, ErrorMessage) VALUES (GETDATE(), " & backupTypeID & ", " & numImages & ", " & folderSize & ", " & success & ", " & errorMessage & "); SELECT scope_identity() AS ImageCopyID;"
objRecordSet.Open sqlquery,objConnection
objRecordSet.MoveFirst
WriteDatabase = objRecordSet("ImageCopyID")
objRecordSet.Close
objConnection.Close
If err.number <> 0 Then
WriteLog "Error writing to the EHN database - " & err.number & " " & err.description, strLogFileName
End If
End Function
It successfully inserts the row, but I get the error message ‘3704 Operation is not allowed when the object is closed.’ when it tries to return the identity number in the record set. When I execute this sql query directly on the server, it works. Anyone able to help?
I hope you can help me on this. I’m getting an error Operation is not allowed when the object is closed
when trying to execute the Insert into
query but working in Select
. I’m using vb.net btw (Microsoft Visual Studio 2010).
I open my database in module using this statement:
On Error GoTo Connprob
DARHS_Connect = False
conEmail = New ADODB.Connection
conEmail.ConnectionString = "Provider=SQLOLEDB;Driver={SQL Server Native Client 10.0};Server=" + Server + ";Database=DatabaseName;Uid=" & User& ";Pwd=" & Password & ";"
conEmail.Open()
DARHS_Connect = True
Exit Function
and then here’s the code that works with no errors:
rsX = New ADODB.Recordset
EmQuery = "SELECT * FROM TABLE_NAME WHERE COLUMN1 = '" & Recipient & "' AND COLUMN2 = '1'"
rsX.Open(EmQuery, conEmail, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly)
If Not rsX.EOF Then
Do While Not rsX.EOF
EmQuery = "INSERT INTO TABLE(COLUMN1,COLUMN2,COLUMN3,COLUMN4) VALUES"
EmQuery = EmQuery & "('" & RQuote(rsX.Fields.Item("EMAIL").Value) & "',"
EmQuery = EmQuery & "'" & Message & "',"
EmQuery = EmQuery & "'" & ServerDate & "'"
EmQuery = EmQuery & "'PCO')"
conEmail.Execute(EmQuery)
rsX.MoveNext()
Loop
End If
And here’s the code that gives me the error:
EmQuery = "INSERT INTO TABLE_NAME(COLUMN1,COLUMN2,COLUMN3,COLUMN4) VALUES"
EmQuery = EmQuery & "('" & Recipient & "',"
EmQuery = EmQuery & "'" & Message & "',"
EmQuery = EmQuery & "'" & ServerDate & "',"
EmQuery = EmQuery & "'PCO')"
conEmail.Execute(EmQuery)
Hope you guys can help me since this is a blocker on my project.
Thanks in advance!