|
Как выгрузить значение SQL запроса к внешнему источнику? |
☑ |
0
НикДляЗапросов
21.11.13
✎
15:45
|
Т.е. ADODB.Recordset select-oм выбирает поля
я могу objRecordset.Fields("НАИМЕНОВАНИЕ ПОЛЯ").value получить значение, но хотелось бы весь результат запроса выгрузить в ТЗ
|
|
1
Maxus43
21.11.13
✎
15:50
|
внешниеисточникиданных + СКД и делай что хочешь, не вариант?
|
|
2
НикДляЗапросов
21.11.13
✎
16:01
|
Я не знаю, так проще?
|
|
3
НЕА123
21.11.13
✎
16:06
|
For i = 0 to RS.Fields.Count - 1 do
ТЗ.Колонки.Добавить(RS.Fields(i).Name, Новый ОписаниеТипов("Строка, Число, Дата, NULL",
Новый КвалификаторыЧисла(64, 32, ДопустимыйЗнак.Любой),
Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)));
EndDo;
While RS.EOF() = 0 Do
НоваяСтрокаТЗ = ТЗ.Добавить();
For i = 0 to RS.Fields.Count - 1 do
НоваяСтрокаТЗ[i] = RS.Fields(i).Value;
EndDo;
RS.MoveNext();
EndDo;
|
|
4
НикДляЗапросов
21.11.13
✎
16:11
|
(3) Да я понял, но я запарюсь поля описывать
|
|
5
НЕА123
21.11.13
✎
16:13
|
(4)
имеется ввиду типа
//RS.Fields(i).DefinedSize - размер целой части числа, длина строки
, не?
|
|
6
НикДляЗапросов
21.11.13
✎
16:15
|
(5) Ща, подумать надо
|
|
7
Serginio1
21.11.13
✎
16:24
|
Функция ЗаполнитьИзРекордСета(РекордСет)
Тз=СоздатьОбъект("ТаблицаЗначений");
ХБ=РекордСет.Fields.Count-1;
Сз=СоздатьОбъект("СписокЗначений");
Для сч=0 по ХБ Цикл
Поле=РекордСет.Fields(сч);
Name=Поле.Name;
Сз.ДобавитьЗначение(Name);
Тз.НоваяКолонка(Name);
КонецЦикла;
Пока РекордСет.EOF = 0 Цикл
Тз.НоваяСтрока();
НомСтр=Тз.НомерСтроки;
Для сч=0 по ХБ Цикл
Значение=РекордСет.Fields(сч).Value;
Тз.УстановитьЗначение(НомСтр,Сч+1,Значение);
КонецЦикла;
РекордСет.MoveNext();
КонецЦикла;
РекордСет.close();
возврат Тз
КонецФункции
|
|
8
МихаилМ
21.11.13
✎
16:33
|
(1)
в методе нет нормализации имен колонок для тз.
+ нет типизации колонок
|
|
9
Serginio1
21.11.13
✎
16:54
|
|
|
10
НикДляЗапросов
21.11.13
✎
17:19
|
Всем спасибо.
Ну получил я в итоге то что нужно, но не так просто как хотел.
Функция ЗаполнитьИзРекордСета(РекордСет)
Тз= Новый ТаблицаЗначений;
ХБ=РекордСет.Fields.Count-1;
Сз= Новый СписокЗначений;
Для сч=0 по ХБ Цикл
Поле=РекордСет.Fields(сч);
Name=Поле.Name;
Если Name = "" Тогда
name = "Поле"+сч;
КонецЕсли;
Сз.Добавить(Name);
Тз.Колонки.Добавить(Name);
КонецЦикла;
Пока РекордСет.EOF = 0 Цикл
СтрТЗ = Тз.Добавить();
НомСтр=Тз.Индекс(стртз);
Для сч=0 по ХБ Цикл
Значение=РекордСет.Fields(сч).Value;
//Тз.УстановитьЗначение(НомСтр,Сч+1,Значение);
СтрТЗ[Сч] = Значение;
КонецЦикла;
РекордСет.MoveNext();
КонецЦикла;
РекордСет.close();
возврат Тз
КонецФункции
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший