1

Тема: 1Cv8.0: проблемы работы с ADO

Восьмая версия 1С не совсем корректно работает с ADO. Например, следующий код правильно работать не будет:

Rec = Новый COMОбъект("ADODB.Recordset");
Rec.ActiveConnection = "Provider=SQLOLEDB;Data Source=ServName;InitialCatalog=master;UID=sa;PWD=pass";

Присвоения свойству "ActiveConnection" происходить не будет, и при этом, как ни странно, не будет никаких ошибок. В этом случае свойству рекордсета "ActiveConnection" можно передавать только объект Connection, и нельзя передавать строку (а в 1С 7.7 можно передавать строку). Абсолютно та же петрушка происходит со свойством рекордсета "Source" (нужен только объект Command, никаких строк). Можно предположить, что 1С 8.0 плохо работает со свойствами COM-объектов, допускающими присвоение разных типов. Кстати, в 1С 7.7 в момент присвоения строки свойству рекордсета "ActiveConnection" эта строка автоматически преобразуется в объект Connection, что видно в отладчике (тип значения - "OLE._Connection"). В 1С 8.0 этого не происходит.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: 1Cv8.0: проблемы работы с ADO

Два небольших замечания по работе с ADO + MS SQL Server, касающиеся не только 1С v8.0.

1. Если с помощью ADO выполняется не "простой" запрос (SELECT), а сиквельный скрипт из нескольких различных команд, что-нибудь наподобие такого:

CREATE TABLE #TempTable (<...>)
INSERT #TempTable EXEC My_Stored_Procedure
SELECT * FROM #TempTable
DROP TABLE #TempTable

возвращаемый рекордсет может оказаться "пустым". В этом случае часто помогает вставка в начало сиквельного скрипта строки:

SET NOCOUNT ON

2. Кроме того, при исполнении подобных сиквельных скриптов данные могут возвращаться во втором рекордсете, т.е. после получения данных надо использовать метод NextRecordset(). Подробнее об этом и других методах можно прочитать в статье Использование библиотеки ADO (Microsoft ActiveX Data Object).

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.