Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
Нужно вызвать из сохраненки эрефси функцию из SAP/R3

Как это сделать на T-SQL?


Спасибо.
22 сен 04, 12:13    [978038]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Extended Stored Proc / COM
22 сен 04, 12:39    [978162]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
А поподробнее можно где нибуть прочитать?

Url там, примеры..
22 сен 04, 12:53    [978236]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
up
22 сен 04, 16:18    [979565]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Crimean
Member

Откуда:
Сообщений: 13148
BOL / MSDN , там - в поиск
По extended stored proc - прям так и искать, по COM - sp_OA_create и т.д.
22 сен 04, 16:43    [979730]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
Очень был бы благодарен на кусок примера через sp_OA_create

Вызов RFC функции с параметрами и чтение результата во времянку.


Спасибо.
12 окт 04, 12:18    [1026047]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
NewGuest2
Очень был бы благодарен на кусок примера через sp_OA_create

Вызов RFC функции с параметрами и чтение результата во времянку.


Спасибо.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_oa-oz_9k2t.asp
12 окт 04, 12:21    [1026063]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
автор
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_oa-oz_9k2t.asp


Это я читаю, но у меня не получается вызвать процедуру.
сам object SAP.Functions вызывается.

я прошу кусок реального примера кто вызывал саповскую функцию
и передовал параметры и читал результат.
12 окт 04, 12:41    [1026177]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Glory
Member

Откуда:
Сообщений: 104764
???
Examples
A. Call a method
This example calls the Connect method of the previously created SQLServer object.

EXEC @hr = sp_OAMethod @object, 'Connect', NULL, 'my_server',
    'my_login', 'my_password'
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
12 окт 04, 12:43    [1026194]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
Вот рабочий код на DELPHI

Как бы правильно выглядел на T-SQL

  SAPFunc := CreateOleObject('SAP.Functions');
  Conn := SAPFunc.Connection;
  Conn.Destination := 'ServerName';
  Conn.Client := '00';
  Conn.Language := '0';
  Conn.User := 'UserName';
  Conn.Password := 'Password';
   If Conn.Logon(0, True) <> True Then  
        ShowMessage('Error Logon');
        Exit;
  End; //If
  oFunc := SAPFunc.Add('FunctionName');
  oFunc.Exports('Parametr1') :='21312312312';
   If Not oFunc.Call Then Begin
    ShowMessage ('Not call Function');
    Exit;
  End; 

Tabl := oFunc.Tables.Item('Table');
12 окт 04, 12:52    [1026263]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
Трудности вот тут
SAPFunc := CreateOleObject('SAP.Functions');
  Conn := SAPFunc.Connection;
  Conn.Destination := 'ServerName';
  Conn.Client := '00';
  Conn.Language := '0';
  Conn.User := 'UserName';
  Conn.Password := 'Password';

сам object 'SAP.Functions' вызывается нормально
а вот передача property

 Conn.Destination := 'ServerName';
  Conn.Client := '00';
  Conn.Language := '0';
  Conn.User := 'UserName';

вызывает ошибку Traversal string: An object return value was required but not supplied.


Пример кода который пытаемся создать


DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
EXEC @hr = sp_OACreate 'SAP.Functions', @object OUT



IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
   RETURN


END
else
begin
  DECLARE @property varchar(255)
  DECLARE @hp int
  
EXEC @hp = sp_OAGetProperty @object, 'Connection.Destination', @property OUT
  IF @hp <> 0
  BEGIN
    EXEC sp_OAGetErrorInfo @object
    RETURN
  END
  
  select @property
  
  EXEC @hp = sp_OASetProperty @object, 'Connection.Destination', 'odin'
  IF @hp <> 0
  BEGIN
   EXEC sp_OAGetErrorInfo @object
   RETURN
  END


так вот, Set Property и неработает
12 окт 04, 13:35    [1026485]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
В догонку...
Получается, что Connection - это ComObject.
Получить Connection.Destination я могу, а вот установить немогу.

Др. свойства SAP.Functions считываются и записываются без проблем.
12 окт 04, 13:49    [1026564]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Glory
Member

Откуда:
Сообщений: 104764
Получается, что Connection - это ComObject.
Вот-вот. Поэтому и нужно получить его сначала как объект

EXEC @hp = sp_OAGetProperty @object, 'Connection', @conn_object OUT
IF @hp <> 0
12 окт 04, 14:07    [1026672]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
Спасибо Glory за помощь - удалось.

Но еще у меня сомнения, правильно ли вызываю вот такую ф-ю:
Conn.Logon(0, True) -- Delphi


declare @ret int
EXEC @hr = sp_OAMethod @hprop, 'Logon', @ret OUT, 0, 1
12 окт 04, 15:30    [1027066]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
up

Оченю срочно нужен ответ.
12 окт 04, 15:50    [1027170]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Glory
Member

Откуда:
Сообщений: 104764
Ну если вызов правильно отрабатывает, то значит все правильно передается.

Хотя в общем случае конечно могут быть заморочки от того какого типа опредлены входные параметры у метода COM объекта.

Ибо для MSSQL константы 0 и 1 - это тип integer. А для вашего Logon - кто знает.
12 окт 04, 15:52    [1027178]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
На самом деле получилось все до Logon.

вот сам logon и не получился как раз.
Функция отработалась.
EXEC @hr = sp_OACreate 'SAP.Functions', @object OUT
  EXEC @hp = sp_OAGetProperty @object, 'Connection', @hprop OUT
  EXEC @hp = sp_OASetProperty @hprop, 'Destination', '?'
  EXEC @hp = sp_OASetProperty @hprop, 'Client', '?'
  EXEC @hp = sp_OASetProperty @hprop, 'Language', '?'
  EXEC @hp = sp_OASetProperty @hprop, 'User', '?'
  EXEC @hp = sp_OASetProperty @hprop, 'Password', '?'
  EXEC @hr = sp_OAMethod @hprop, 'Logon(0, True)', @ret OUT --, 0, True

Пробовали и

EXEC @hr = sp_OAMethod @hprop, 'Logon', @ret OUT  0, True 
при попытке пойти дальше



  declare @Funct int
  EXEC @hr = sp_OAMethod @hprop, 'Add', null,'FunctionName'

появляется сообщение
что нет коннекта к сапу.
12 окт 04, 15:58    [1027214]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
вообщем предыдущей вопрос решен.

Новый затык.

Передать коллекцию


код на DELPHI

oFunc.Exports('Parameters') :='blablabla';


как правильно это сделать через t-sql
12 окт 04, 16:29    [1027382]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Glory
Member

Откуда:
Сообщений: 104764
Передать коллекцию
Циклом по всем параметрам. Если число параметров неизвестно.
12 окт 04, 16:31    [1027391]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
А как это сделать на t-Sql?

тоесть циклы я делать умею на t-SQL, вопрос только в сочетание
c ole объектом. Как?
12 окт 04, 16:42    [1027459]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Glory
Member

Откуда:
Сообщений: 104764
У правильного СОМ объекта
- любая коллекция должна иметь свойство Count
- любая коллекция должна поддреживать обращение к элементу коллекции по его номеру/индексу

Так что читаете свойство Count и в цикле каждому параметру по его индексу делаете sp_OASetProperty
12 окт 04, 16:48    [1027493]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest
У правильного СОМ объекта
- любая коллекция должна иметь свойство Count
- любая коллекция должна поддреживать обращение к элементу коллекции по его номеру/индексу

А вот это поподробнее можно?

Получить кол-во можно. А как мне получить индекс целочисленный, если у меня именованый?
Дело в том, что sp_OASetProperty поддерживает, если я неошибся, колекции:
параметр: index
Is an index parameter. If specified, it must be a value of the appropriate data type.

Some properties have parameters. These properties are called indexed properties, and the parameters are called index parameters. A property can have multiple index parameters.

Но:
Note The parameters for this stored procedure are specified by position, not name.

Я немогу получить ниодно извеcтное мне свойство с CollectionItem, кроме Count.
12 окт 04, 17:12    [1027621]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Glory
Member

Откуда:
Сообщений: 104764
Дело в том, что sp_OASetProperty поддерживает, если я неошибся, колекции:
sp_OASetProperty всего лишь процедура, а не сам СОМ объект. Она не может поддерживать или не поддерживать коллекции.

Вот тут
declare @Funct int
EXEC @hr = sp_OAMethod @hprop, 'Add', null,'FunctionName'
нужно получить ссылку на объект Function
declare @Funct int
EXEC @hr = sp_OAMethod @hprop, 'Add', @Funct OUT,'FunctionName'

затем получить ссылку на коллекцию Parameters

declare @Param int
EXEC @hp = sp_OAGetProperty @Funct, 'Parameters', @param OUT

затем получить число элементов в коллекции Parameters
EXEC @hp = sp_OAGetProperty @Param, 'Count', @param_cnt OUT

а затем уже организовать цикл с выполнением sp_OASetProperty для каждого параметра.
12 окт 04, 17:22    [1027670]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
NewGuest2
Guest

а затем уже организовать цикл с выполнением sp_OASetProperty для каждого параметра.


А в sp_OASetProperty имя проперти какое указывать?

Мне ведь известен только индекс с именем ParamName и cделать
EXEC @hp = sp_OASetProperty @Collection, 'ParamName', 'Value'
я немогу: "Неверно задана вызываемая строка"

Я могу получить
EXEC @hp = sp_OAGetProperty @Collection, 'ParamName', @probi OUT
но это CollectionItem, вроде...

А дальше штопор...
12 окт 04, 17:45    [1027779]     Ответить | Цитировать Сообщить модератору
 Re: StoredProcedure и SAP R/3  [new]
Glory
Member

Откуда:
Сообщений: 104764
EXEC @hp = sp_OASetProperty @Params_Collection, 'Value', <any value>, @Index
Где @Index есть переменная из цикла
12 окт 04, 17:52    [1027810]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить