#0
by solaru
При выполнени команды Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC SQL Server Driver]Дополнительная возможность не реализована Это о чём может быть?
#9
by solaru
Как это сделать (ADO) 1. Создать объект ADODB.Connection У меня это реализовано в глобальном модуле (при начале работы системы автоматически устанавливается соединение и существует, пока открыт сеанс 1С). Уничтожение объекта после окончания работы не требуется. 2. Формирование и отправка команды дла SQL-сервера. Для формирования и отправки команды серверу необходимо создать объект ADODB.Command и связать его с текущим соединением. Для задания команды используется свойство CommandText: Текстом команды может быть оператор Т-SQL (SELECT, INSERT, UPDATE, DELETE и т.д), или имя хранимой процедуры из той базы данных, с которой установлено соединение. Пример: Для ускорения работы можно указать экземпляру объекта ADODB.Command тип команды, которая будет выполняться. Для этого я использую функцию ТипКомандыАдо: По умолчанию при создании экземпляра AdoDB.Command устанавливается тип adCmdUnknown . Пример: Существенного ускорения работы при указании типа команды я не заметил, но всегда указываю его, считая это правилом хорошего тона. Если используется хранимая процедура с параметрами, тогда необходимо добавить их в коллекцию Parameters объекта ADODB.Command: Параметры создаются с помощью функции CreateParameter объекта ADODB.Command CreateParameter (Name, Value_Type, Param_type, Param_Value) Где Name - имя параметра. Как оно указано в хранимой процедуре Value_Type - тип значения параметра Param_Type - тип параметра (Input или Output) Param_Value - собственно значение Для определения типа значения параметра и типа параметра я использую функции КонстантаАДО и ТипПараметраАДО соответственно, прописанные в глобальный модуль: ИначеЕсли АдоКонст = "adtinyint" Тогда Возврат 16; ИначеЕсли АдоКонст = "adsmallint" Тогда Возврат 2; ИначеЕсли АдоКонст = "adinteger" Тогда Возврат 3; ИначеЕсли АдоКонст = "adbigint" Тогда Возврат 20; ИначеЕсли АдоКонст = "adunsignedtinyint" Тогда Возврат 17; ИначеЕсли АдоКонст = "adunsignedsmallint" Тогда Возврат 18; ИначеЕсли АдоКонст = "adunsignedint" Тогда Возврат 19; ИначеЕсли АдоКонст = "adunsignedbigint" Тогда Возврат 21; ИначеЕсли АдоКонст = "adsingle" тогда Возврат 4; иначеесли АдоКонст = "addouble" тогда Возврат 5; иначеесли АдоКонст = "adcurrency" тогда Возврат 6; иначеесли АдоКонст = "addecimal" тогда Возврат 14; иначеесли АдоКонст = "adnumeric" тогда Возврат 131; иначеесли АдоКонст = "adboolean" тогда Возврат 11; иначеесли АдоКонст = "aderror" тогда Возврат 10; иначеесли АдоКонст = "aduserdefined" тогда Возврат 132; иначеесли АдоКонст = "advariant" тогда Возврат 12; иначеесли АдоКонст = "adidispatch" тогда Возврат 9; иначеесли АдоКонст = "adiunknown" тогда Возврат 13; иначеесли АдоКонст = "adguid" тогда Возврат 72; иначеесли АдоКонст = "addate" тогда Возврат 7; иначеесли АдоКонст = "addbdate" тогда Возврат 133; иначеесли АдоКонст = "addbtime" тогда Возврат 134; иначеесли АдоКонст = "addbtimestamp" тогда Возврат 135; иначеесли АдоКонст = "adbstr" тогда Возврат 8; иначеесли АдоКонст = "adchar" тогда Возврат 129; иначеесли АдоКонст = "advarchar" тогда Возврат 200; иначеесли АдоКонст = "adlongvarchar" тогда Возврат 201; иначеесли АдоКонст = "adwchar" тогда Возврат 130; иначеесли АдоКонст = "advarwchar" тогда Возврат 202; иначеесли АдоКонст = "adlongvarwchar" тогда Возврат 203; иначеесли АдоКонст = "adbinary" тогда Возврат 128; иначеесли АдоКонст = "advarbinary" тогда Возврат 204; иначеесли АдоКонст = "adlongvarbinary" тогда Возврат 205; иначе Возврат 0; КонецЕсли; КонецФункции Если АдоКонст = "adparamunknown" тогда Возврат 0; иначеесли АдоКонст = "adparaminput"тогда Возврат 1; иначеесли АдоКонст = "adparamoutput"тогда Возврат 2; иначеесли АдоКонст = "adparaminputoutput"тогда Возврат 3; иначеесли АдоКонст = "adparamreturnvalue"тогда Возврат 4; КонецЕсли; КонецФункции Пример: Для передачи параметров в хранимую процедуру необходимо описать все параметры в том порядке и с теми типами, как они описаны в хранимой процедуре. Реально я использовал передачу и возврат параметров типа AdChar, AdWChar (строковые), AdDate (дата), AdInteger, AdTinyInt ( целочисленные). Параметры типа Numeric приходилось передавать, конвертируя их в строки. 3. Получение и обработка результатов Результаты можно получать следующими путями: - набор данных возвращается функцией Execute объекта ADODB.Command - отдельные значения можно передавать из хранимой процедуры через параметры типа OUTPUT. Пример: - Нумерация параметров внутри коллекции Parameters начинается с 0 !!! - Подготовленные 1 раз параметры можно использовать повторно, присваивая им значение через свойство Value. Результирующий набор записей может обрабатываться в цикле с начала до конца, обращаясь к полям по их именам. В наборе записей не должны присутствовать поля типа Numeric - их необходимо преобразовывать в строковые непосредственно внутри SELECT или хранимой процедуры. Пример: Rs.MoveFirst; Пока Rs.EOF = 0 do После того, как набор записей уже не нужен, его нужно закрыть: Когда я использую методы ADO для получения набора записей , в один из выходных параметров процедуры я помещаю результат работы функции @@ROWCOUNT. Так я контролирую, возвращен пустой набор записей, или нет.
#13
by vde69
кроме того с параметрами надо не так, они возвращаються ОТДЕЛЬНО. а возвращаеться таблица (или результат последнего оператора XP)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Запуск 1С SQL на не MS SQL сервере ?
- Ошибка SQL 924 при просмотре процессов SQL 2000 +1C 77
- SQL или не SQL ??? как решить ?
- 1cv8 SQL: Имя SQL сервера и имя SQL базы данных
- Проектирование: 1С 7.7 SQL + Windows 2003 Server + MS SQL Server 2000 (Ent) + сервер термин
- 77 на SQL 2005, добавил константу , а где ее и как искать в SQL MS 2005
- SQL Server Enterprise Edition VS SQL Server Standard Edition
- Парралельная установка Sql 2000 и Sql 2005
В этой группе 1С
- Из регистра не могу получить реквизит (SQL)
- зачем нужны "Свойства Номенклатуры"
- Как активизировать поле ввода в табличной части документа?
- 1с++: Как однозначно определить вид документа?
- Полу ОФФ. Аттестационные вопросы на инженера-программиста.
- Расчет средней зарплаты для определения размера пособия по безработице
- Запуск 1с через терминал
- Парус или 1С
- Уникальный идентификатор проводки
- проблема с отправкой сообщения из VBA через Outlook
- Структура 1SCONST - есть вопрос.
- v7: Обмен данными между 1с и ACCESS через ADO
- УПП. Как оформить поступление неотфактурованного товара. Каким док?
- ЗиК. Неправильно печатается форма "Т-61"
- 1С ЗиК 263 Неправильный расчет НДФЛ считает вместе с пособием на ребенка
- Получить список документов в Журнале
- Отчет с нулевыми остатками для Тис 7.7
- Не отображается всё, что написано в ячейке макета
- Удаленное администрирование через http -- возможно?
- Проблема с нулевыми значениями ресурсов в таблицах регистров накопления.