|
v7: 1С++ Подскажите почему не работает! | ☑ | ||
---|---|---|---|---|
0
Дядя Вова
27.02.13
✎
10:22
|
Уже час бьюсь, гугл не знает...
Простейший запрос: RSP = СоздатьОбъект("ODBCRecordset"); RSP.УстБД1С(); ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование |FROM | $Справочник.Контрагенты as Спр |"; ТЗ = RSP.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроки(); Ругается: ТЗ.ВыбратьСтроки(); Значение не представляет агрегатный объект (ВыбратьСтроки) ТЗ=0 в отладчике! ВК подключаю в глобальнике ПриНачалеРаботыСистемы() Если ЗагрузитьВнешнююКомпоненту("1CPP.dll") <> 1 Тогда Сообщить("Ошибка при загрузке компоненты 1CPP.dll !","!"); КонецЕсли; Не ругается. Платформа сетевая(не SQL). |
|||
1
Wobland
27.02.13
✎
10:24
|
Запрос.ВыполнитьИнструкцию(ТекстЗапроса, Возвраты); - у меня так. а возвращается тебе, очевидно, успешность выполнения
|
|||
2
ЧеловекДуши
27.02.13
✎
10:25
|
(0) Потому что он тебе не вернул ТЗ...
ВыполнитьИнструкцию(<?>,<?>,<?>) Синтаксис: ExecuteStatement(strTextSQL, obVT, bEraseVT) Назначение: Выполняет SQL запрос, при ошибке парсинга или при ошибке на ODBC драйвере формируется исключение. Если запрос возвращает набор строк, метод возвращает объект с результатом запроса, если запрос не возвращает набор строк (не select, а DML или прочий), возвращается количество обработанных строк. Если запрос содержит несколько SQL инструкций (multistatement batch), результаты возвращаются только от первой инструкции. Однако, на драйвер уходит весь текст запроса (По спецификации ODBC, будут ли выполнены остальные инструкции в пакете зависит от драйвера. Для драйвера SQL Server они выполняются), остальные результаты игнорируются. Если запрос возвращает набор данных, и в наборе данных нет ни одной строки, это не является ошибкой. Если запрос не параметризированный - метод гарантированно закрывает курсор. Возвращает: объект с результатом запроса (ТаблицаЗначений или наследник), или число - количество обработанных строк. Параметры: - strTextSQL (Строка): текст запроса, если пустая строка запрос считается параметризированным. По умолчанию пустая строка. - obVT (объект): ТаблицаЗначений или наследник от нее для приема результатов запроса, именно этот объект и будет возвращаемым значением. Это должен быть именно ТаблицаЗначений или наследник, а не объект реализующий ее интерфейс. Если тип объекта - пустое значение, создается объект типа ТаблицаЗначений. По умолчанию: пустое значение. - bEraseVT (Число): 1 - очистить таблицу и создать колонки. 0 - не создавать. По умолчанию - 1. |
|||
3
ЧеловекДуши
27.02.13
✎
10:25
|
+ obVT - это твой результат
|
|||
4
Ёпрст
27.02.13
✎
10:29
|
(0)
1. // RSP.УстБД1С(); 2.для дбф нужен не ODBCRecordset, а оледб провайдер |
|||
5
Ёпрст
27.02.13
✎
10:30
|
или 1sqlite
|
|||
6
Дядя Вова
27.02.13
✎
10:36
|
(5) Это другая ВК что ли?
|
|||
7
Дядя Вова
27.02.13
✎
10:38
|
(5) Делаю по образу и подобию старого давнего отчета на ++.
На компе у меня тогда тоже ДБФ стояла - все работало! |
|||
8
olegves
27.02.13
✎
10:44
|
(0) поставь первой строкой
set nocount off и будет тебе щастье |
|||
9
olegves
27.02.13
✎
10:44
|
+(8) в текст запроса
|
|||
10
olegves
27.02.13
✎
10:46
|
+(8) чет напутал, конечно надо
set nocount on |
|||
11
Дядя Вова
27.02.13
✎
11:11
|
Подключил 1sqlite.dll вместо 1cpp.dll
БД = СоздатьОбъект("SQLiteBase"); БД.Открыть(":memory:"); ОлеДБКоманда = БД.НовыйЗапрос(); ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование | |FROM | $Справочник.Контрагенты as Спр |"; ТЗ=ОлеДБКоманда.ВыполнитьЗапрос(ТекстЗапроса); ТЗ.ВыбратьСтроки(); - Значение не представляет агрегатный объект (ВыбратьСтроки)! Аааа!!! |
|||
12
orefkov
27.02.13
✎
11:18
|
(11)
Для начала переменные правильно назови, чтобы не путаться. И запрос надо так переписать: ТекстЗапроса = " |SELECT | Спр.Code as Код, | Спр.Descr as Наименование | |FROM | [Справочник.Контрагенты] as Спр |"; В 1sqlite парсер немного другой. |
|||
13
Дядя Вова
28.02.13
✎
11:44
|
Всем спасибо! А не подможете ещё чутка?
ТекстЗапроса = " | Спр.ParentExt as [Контрагент $Справочник.Контрагенты], | $Спр.Descr as Наименование |FROM | $Справочник.АдресаКонтрагентов as Спр |WHERE | Спр.ParentExt = :ВыбКонтра"; Запрос.УстановитьТекстовыйПараметр("ВыбКонтра",ОбъектСпрКонтра); Вот не хочет работать! Не догоняю в чем дело! У меня есть контра - объект, надо залезть по нему в подчиненный справочник и выцепить все его элементы. (Объект “ OLEDBData” у меня) Спасибо заранее! |
|||
14
ЧеловекДуши
28.02.13
✎
11:49
|
(13) Для этого делай запрос по подчиненному справочнику, а Владельца подключай, как дополнительное соединение :)
|
|||
15
ЧеловекДуши
28.02.13
✎
11:51
|
+(13) И что там не работает?
Используй " RSP = СоздатьОбъект("ODBCRecordset"); " И это база DBF или SQL? |
|||
16
Дядя Вова
28.02.13
✎
11:56
|
(15)
СтрокаСоединения=" |Provider=VFPOLEDB.1; |Null = Yes; |Exclusive = No; |SourceType = DBF; |Data Source=" + Каталог + "; |Mode=ReadWrite; |Extended Properties=""""; |User ID=""""; |Password=""""; |Mask Password=False; |Collating Sequence=MACHINE; |DSN="""""; База = СоздатьОбъект("OLEDBData"); Рез = База.Соединение(СтрокаСоединения); Запрос = База.СоздатьКоманду(); ТекстЗапроса = " | Спр.ParentExt as [Контрагент $Справочник.Контрагенты], | Спр.Descr as Наименование |FROM | $Справочник.АдресаКонтрагентов as Спр |WHERE | Спр.ParentExt = :ВыбКонтра"; Запрос.УстановитьТекстовыйПараметр("ВыбКонтра",Владелец); Запрос.Отладка(1); Попытка ТЗАдреса=Запрос.ВыполнитьИнструкцию(ТекстЗапроса); Исключение Сообщить("Ошибка выполнения OLEDB запроса!","!"); Возврат; КонецПопытки; Выходной текст запроса: Спр.ParentExt as [Контрагент_1c_type_Справочник_Контрагенты], Спр.Descr as Наименование FROM sc9167 as Спр WHERE Спр.ParentExt = ' AL ' Просто выбивает в исключение: Ошибка выполнения OLEDB запроса! |
|||
17
Дядя Вова
28.02.13
✎
12:15
|
Так SELECT же нету! Ё моё!!!
(14) Работает и (13) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |