Odbc sql server driver дополнительная функция не реализована

Обновлено: 07.07.2024

ПараметрыСоединенияВнешнегоИсточникаДанных (ExternalDataSourceConnectionParameters)
Свойства:

АутентификацияОС (OSAuthentication)
АутентификацияСтандартная (StandardAuthentication)
ИмяПользователя (UserName)
Пароль (Password)
ПарольУстановлен (PasswordIsSet)
СтрокаСоединения (ConnectionString)

СУБД (DBMS) - вот это надо указывать явно - парсили на уровне сиквела - без указания запросы почему то в формате мускула от 1с приходили

хотя в строке соединения было указано MSSQL

и если есть в таблице ключевое поле с автоинкрементом - то его из объявления таблицы надо исключить

Особенность всех клиентов: установлен КриптоПро 3.6.7092, ViPNet CSP 3.2.
Особенность этого клиента: Win7 SP1 (клиенты работающие без ошибок - WinXP)

Собственно ODBD DSN:

Что пробовали:
Делать ODBD DSN через [SQL Server Native Client 10.0], получили похожее:

Пробовали конектится с этой машины на другие sql-сервера в сети - та же ошибка SECEncryptData

Ничего не помогло - ошибка стабильно та же.

ФирмА Гендальф знает ответ:

да, забыл сказать, есть касперский 10 энтерпрайз, впрочем как и на всех прочих клиентах.

У меня это реализовано в глобальном модуле (при начале работы системы автоматически устанавливается соединение и существует, пока открыт сеанс 1С). Уничтожение объекта после окончания работы не требуется.

2. Формирование и отправка команды дла SQL-сервера.

Текстом команды может быть оператор Т-SQL (SELECT, INSERT, UPDATE, DELETE и т.д), или имя хранимой процедуры из той базы данных, с которой установлено соединение. Пример:

Существенного ускорения работы при указании типа команды я не заметил, но всегда указываю его, считая это правилом хорошего тона.

Для определения типа значения параметра и типа параметра я использую функции КонстантаАДО() и ТипПараметраАДО() соответственно, прописанные в глобальный модуль:

Реально я использовал передачу и возврат параметров типа AdChar, AdWChar (строковые), AdDate (дата), AdInteger, AdTinyInt ( целочисленные). Параметры типа Numeric приходилось передавать, конвертируя их в строки.

- Нумерация параметров внутри коллекции Parameters начинается с 0 .
- Подготовленные 1 раз параметры можно использовать повторно, присваивая им значение через свойство Value.

Результирующий набор записей может обрабатываться в цикле с начала до конца, обращаясь к полям по их именам. В наборе записей не должны присутствовать поля типа Numeric - их необходимо преобразовывать в строковые непосредственно внутри SELECT или хранимой процедуры.

После того, как набор записей уже не нужен, его нужно закрыть:

Когда я использую методы ADO для получения набора записей , в один из выходных параметров процедуры я помещаю результат работы функции @@ROWCOUNT. Так я контролирую, возвращен пустой набор записей, или нет.


Имеется база данных на SQL. Администратор базы данных написал функцию генерирующую xml, мне сообщили, что надо передать в функцию 2 параметра - дата начала и дата окончания, а функция вернёт xml, который нужно обработать. Я не получал ранее файлы от SQL и, соответственно не работал с данным механизмом. Соответственно протестировал 2 варианта решения, по которым возникли вопросы.
1) создал внешний источник данных, к нему замечательно подключаюсь из конфигуратора и предприятия, все таблицы вижу. Создал функцию

При попытке выполнить функцию
[Microsoft][ODBC SQL Server Driver][SQL Server]Не удалось найти столбец "dbo", определяемую пользователем функцию или агрегатную функцию "dbo.procOrderGetXML". Также возможно, имя является неоднозначным (21) Fields(0).Value = Null значит запрос пустой. Я уже говорил, что смоделировал Вашу ситуацию и все прекрасно работает
(1) может проще из SQL выгрузить данные в xml-файл и загрузить в 1С? (3) Они в xml и выгружаются. Мне этот xml надо получить из com объекта.
(4) написал такую команду, но ругается "Не удалось найти столбец dbo, определяемую пользователем функцию или агрегатную функцию.
Написал следующий скрипт, используя MS SQL Management Studio:


А там NULL
В Fields вот такая штука содержится:


Процедура в SQL

(5) Так вроде функция должна возвращать bynary, у Вас @Return_value int - число (17)Из принципа смоделировал - работает(16), правда на последней версии сыкуля на клиенте вынь 10 Это обусловлено тем, что SQL Server не поддерживает тип данных adDBDate. Чтобы устранить эту проблему, измените тип данных параметра @ theDate на adDBTimeStamp. Видимо тип параметра надо другой попробовать. Сейчас почитаю про типы

(19)Скорее дело в версии драйвера odbc, а с админами надо дружить. Обидятся - зарубят вижал студио.
Константа adDBTimeStamp это 135
А можно попробовать и
Declare @DataB datetaime
Declare @DataE datetaime
Set @DataB = Cast('01.01.2016' as datetime)
Set @DataE = Cast('12.31.2016' as datetime)
EXEC procOrderGetXML(@DataB,@DataE)

Но без CreateParameter, а то ADO ругаться будет
и возможно CommandType равно 1 или 8


(20) Заменил тип на 135, процедура отработала, возможно успешно, как и некоторые другие варианты. Как теперь из COMОбъекта получить XML?
(21) Fields(0).Value = Null значит запрос пустой. Я уже говорил, что смоделировал Вашу ситуацию и все прекрасно работает
(23) (24) Косяк был похоже у меня, а я на него не обращал внимания. Изначальный код подключения к базе SQL и ввода команды копировал с сайта какого-то, а там была строка

Как я понимаю до конца формирования xml, отваливалось соединение. Сейчас увидел заветный xml, но единственное, что я пока не понял это то, что после считывания один раз в отладчике поля Fields(0).Value, а может и по другой причине, например по таймауту, Value заNULLяется. Пришлось убрать проверку, что Value <> NULL потому что после проверки уже NULL.

Читайте также: