powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / recordset.eof очень тормозит
2 сообщений из 2, страница 1 из 1
recordset.eof очень тормозит
    #38095390
Евгений_83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть процедура в 1С которая получает данные из recordset и записывает их в таблицу значений:
Попытка
ТЗ_Запроса = Новый ("ТаблицаЗначений");
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandText = ТекстЗапроса;
RecordSet = Новый COMОбъект("ADODB.RecordSet");
RecordSet = Command.Execute(); //Выполнение и получение набора данных
// Инициализируем колонки
Для НомерКолонки = 0 По RecordSet.Fields.Count-1 Цикл
НомерТипаКолонки =RecordSet.Fields.Item(НомерКолонки).Type;
Если (НомерТипаКолонки = 200)ИЛИ(НомерТипаКолонки = 129) Тогда //строка
Параметры = Новый КвалификаторыСтроки(100);
Тип = "Строка";
ИначеЕсли (НомерТипаКолонки = 3)ИЛИ(НомерТипаКолонки = 2)ИЛИ(НомерТипаКолонки = 17) Тогда // целое число
Параметры = Новый КвалификаторыЧисла(20,0);
Тип = "Число";
ИначеЕсли (НомерТипаКолонки = 131)ИЛИ(НомерТипаКолонки = 6)ИЛИ(НомерТипаКолонки = 139) Тогда // нецелое число
Параметры = Новый КвалификаторыЧисла(20,4);
Тип = "Число";
ИначеЕсли НомерТипаКолонки = 5 Тогда // нецелое число
Параметры = Новый КвалификаторыЧисла(20,2);
Тип = "Число";
ИначеЕсли (НомерТипаКолонки = 133)ИЛИ(НомерТипаКолонки = 135) Тогда // дата
Параметры = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
Тип = "Дата";
ИначеЕсли (НомерТипаКолонки = 11) Тогда // булево
Параметры = Неопределено;
Тип = "Булево";
Иначе
КомментарийОбмена("Имя колонки :"+RecordSet.Fields.Item(НомерКолонки).Name+" Тип :"+НомерТипаКолонки+" Значение: "+RecordSet.Fields.Item(НомерКолонки).Value)
КонецЕсли;
ТЗ_Запроса.Колонки.Добавить(СтрЗаменить(RecordSet.Fields.Item(НомерКолонки).Name,"-","_"),Новый ОписаниеТипов(Тип, , Параметры),RecordSet.Fields.Item(НомерКолонки).Name,20);
КонецЦикла;
Пока НЕ RecordSet.EOF Цикл
СтрокаТаблицыЗначений = ТЗ_Запроса.Добавить();
Для НомерКолонки = 0 По RecordSet.Fields.Count-1 Цикл
СтрокаТаблицыЗначений[НомерКолонки] = RecordSet.Fields(RecordSet.Fields.Item(НомерКолонки).Name).Value;
КонецЦикла;
RecordSet.MoveNext();
КонецЦикла;
RecordSet.Close(); // После того, как набор записей уже не нужен, его нужно закрыть
Если ТЗ_Запроса.Количество() = 0 Тогда
Возврат 1;
КонецЕсли;
Возврат ТЗ_Запроса;
Исключение
КомментарийОбмена(ОписаниеОшибки()+"ТекстЗапроса:"+ТекстЗапроса,СтатусСообщения.Важное);
Возврат 0;
КонецПопытки;

На строчке "Пока НЕ RecordSet.EOF Цикл" все зависает на долгое время(минута и более), сам запрс возвращает порядка 1-2х строк, и выполняется очень шустро. СУБД-Оракл

В чем может быть проблема?, почему он так долго работает?, ведь по сути он всего лишь проверяет конец чтения данных.
ЗЫ. этих тупок раньше не было, метод отрабатывал влет.
...
Рейтинг: 0 / 0
recordset.eof очень тормозит
    #38095456
Евгений_83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот замер производительности: количество прогонов и процент труда затрат.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / recordset.eof очень тормозит
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]