Имя: Пароль:
1C
1С v8
Внешние источники данных вызов функции
0 Наська72
 
27.05.14
09:09
Добрый день!

Есть внешний источник данных SQL БД, подключаюсь к ней драйвером SQL Server Native Client 10.0. Работаю с таблицами. Всё хорошо.

И вот возник вопрос: могу ли вызывать функции прописанные в БД? Как туда передавать параметры?

Перерыла все, ничего не нашла.

Попробовала в источник данных добавить вручную таблицу с именем функции, но что-то не представляю как потом в нее параметры передавать.

Будьте добры, помогите.
1 vmv
 
27.05.14
09:32
ежик и ужик в естественной среде не скрещиваються

это можно сделать только неприродным путем
2 Наська72
 
27.05.14
09:35
(1) Расскажите про неприродный путь. Уже на все согласна. Проще функцию вызвать, чем эти жуткие связи проследить.
3 Наська72
 
27.05.14
09:48
(1) Допустим подключимся через СОМ:
Connection                     = Новый COMОбъект("ADODB.Connection");
    СтрокаПодключения             = "Provider=SQLOLEDB.1;Password=ПАРОЛЬ;Persist Security Info=True;User ID=ЮЗЕР;Initial Catalog=ИМЯБАЗЫ; Data Source=СЕРВЕР;";
    
    Результат                     = Новый COMОбъект("ADODB.Command");
    Результат.ActiveConnection     = Connection;
    Результат.CommandType         = "fGetPowTrN";

В последней строке пишу имя функции. Как в нее параметры поместить?
4 ДенисЧ
 
27.05.14
09:52
(3) .Parameters.Add() ?
5 ДенисЧ
 
27.05.14
09:52
.Append(), пардон


' Open Connection Conn
set ccmd = CreateObject("ADODB.Command")
ccmd.Activeconnection= Conn

ccmd.CommandText="SPWithParam"
ccmd.commandType = 4 'adCmdStoredProc

ccmd.parameters.Append ccmd.CreateParameter(, adInteger, adParamReturnValue, , NULL)   ' return value
ccmd.parameters.Append ccmd.CreateParameter("InParam", adVarChar, adParamInput, 20, "hello world")   ' input parameter
ccmd.parameters.Append ccmd.CreateParameter("OutParam", adVarChar, adParamOuput, 20, NULL)   ' output parameter

ccmd.execute()

' Access ccmd.parameters(0) as return value of this stored procedure
' Access ccmd.parameters("OutParam") as the output parameter of this stored procedure.


http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms675869(v=vs.85).aspx
6 Наська72
 
27.05.14
12:47
(5) Спасибо.
Но есть проблемка. Функция принимает два параметра типа integer. Результат текст.

ФункцияfGetNameIstPitB04                     = Новый COMОбъект("ADODB.Command");
    ФункцияfGetNameIstPitB04.ActiveConnection     = Connection;
    ФункцияfGetNameIstPitB04.CommandText         = "fGetNameIstPitB04";
    //ФункцияfGetPowTrN.CommandType         = 4;
    
    Parameter                             = ФункцияfGetNameIstPitB04.CreateParameter("Id", 14);
    ФункцияfGetNameIstPitB04.Parameters.Append(Parameter);
    Parameter.Value                     = 20;
    
    Parameter1                             = ФункцияfGetNameIstPitB04.CreateParameter("num_ip", 14);
    ФункцияfGetNameIstPitB04.Parameters.Append(Parameter1);
    Parameter1.Value                     = 1;
    
    RecordSet                             = Новый COMОбъект("ADODB.RecordSet");
    RecordSet                             = ФункцияfGetNameIstPitB04.Execute();


Выдает ошибку:
Ошибка при вызове метода контекста (Execute)
    RecordSet                             = ФункцияfGetNameIstPitB04.Execute();
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Недопустимая точность.

Правильно ли я указала тип в ФункцияfGetNameIstPitB04.CreateParameter("Id", 14)?
7 Яйца 1С
 
27.05.14
12:47
(0) Параметры или триггеры?
8 Наська72
 
27.05.14
12:52
(7) Вопрос о передаче Параметров в Функцию.
9 Наська72
 
27.05.14
13:57
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший