При выполнении 1С ругается, в данном случае так:
ADODB.Recordset: Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру.
Если print закомментировать, то отработает успешно, вернет 1 Вопрос: как победить?
[Ответ]
Yandex 11:42 31.12.2009
Сообщение от :
СтрокаЗапроса = "
|print '123'
|select '1'
|";
Я конечно 1С в глаза не видел, да и MS SQL давно не щупал, но вот именно приведенный выше код получается эквивалентым SQL:
print 123 select ...
Ясен пень, нифига он работать не должен.
Варианты, которые я бы попробовал в первую очередь:
1. Поставить ; после 123: "print '123';"
2. Завернуть запрос в T-SQL процедуру, которая возвращает RecordSet и print-ит что надо. Вызывал бы процедуру из 1C.
[Ответ]
DimmaN 14:55 31.12.2009
Yandex, не в этом дело.
zagrr, может проблма в том, что возвращаются два рекордсета?
[Ответ]
Yandex 15:07 31.12.2009
DimmaN, ну может быть.
Как вариант еще местами поменять select и print.
[Ответ]
DimmaN 15:43 31.12.2009
Yandex, не, тут не в sql дело. Он же говорит, что проблема в хранимках тоже есть, а уж там и селектов и принтов напихать можно в каком угодно порядке.
Ех, АДо я пользовал слишком давно. Вообще, насколько я помню, все сообщения выводятся в коллекцию еррорс коннекшена, так что насчет двух рекордсетов - это я наврал скорее всего. А что вернет RecordSet.RecordCount и RecordSet.Fields.Count?
А если запрос написать так: set nocount on print '123' select '1' ?
[Ответ]
Сообщение от Yandex:
2. Завернуть запрос в T-SQL процедуру, которая возвращает RecordSet и print-ит что надо. Вызывал бы процедуру из 1C.
SQL сервера не наши, соотв. ничего своего создавать там не можем.
Сообщение от DimmaN:
А если запрос написать так: set nocount on print '123' select '1' ?
пробовал, однокуйственно)))
Сообщение от DimmaN:
А что вернет RecordSet.RecordCount и RecordSet.Fields.Count?
хм...идею понял, завтра проверю на работе, отпишусь
Сообщение от дядя Дима:
а зачем тебе принт то тут нужен?
для примера, чтоб показать, что print вызывает ошибку...в реальном коде вызываются хранимые процедуры, в тесте которых есть print
[Ответ]
zagrr 12:09 04.01.2010
Сообщение от DimmaN:
А что вернет RecordSet.RecordCount и RecordSet.Fields.Count?
да не, ничо не возвращает... Сообщить(RecordSet.RecordCount);
ADODB.Recordset: Операция не допускается, если объект закрыт.[Ответ]
zagrr 15:07 04.01.2010
короч допер я
каждый принт/селект это свой рекордсет
если рекордсет с селектом то он открытый.если с принтом то закрытый
т.е. нада как то так
статус = RecordSet.State
Если статус <> 1 тогда
recordset = recordset.Nextrecordset()
и так в цикле..до тех пор пока не наткнетесб на статус = 1, это и будет результатом селекта
правда возникла другая проблема - если в тексте запроса неск.селектов...как получить результат последнего селекта в запросе...
кое как выкрутился..через жопу)))[Ответ]