|
|
|
recordset.eof очень тормозит
|
|||
|---|---|---|---|
|
#18+
Есть процедура в 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х строк, и выполняется очень шустро. СУБД-Оракл В чем может быть проблема?, почему он так долго работает?, ведь по сути он всего лишь проверяет конец чтения данных. ЗЫ. этих тупок раньше не было, метод отрабатывал влет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2012, 19:22 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=61&tid=1341989]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
27ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 387ms |

| 0 / 0 |
