Показать сообщение отдельно
Старый 23.12.2004, 13:56   #8  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Готово!
Вот такая хранимая процедура:
PHP код:
DROP PROCEDURE [dbo].[axExp]
GO
CREATE PROCEDURE 
[dbo].[axExp] @Res_ TINYINT OUTPUT AS
BEGIN
    SET 
@Res_22
END 

Вот такой код в Аксапте вызывает эту процедуру и передает/получает из нее значение параметра:
PHP код:

static void DD_StoredProcWithParam(Args _args)
{
    
str     serverName      "AXAPTA-SQL";
    
str     baseName        "AXDB";
    
str     userId          "sa";
    
str     userPassword    "";
    
CCADOConnection         cn;
    
COM                     comCN;
    
COM                     cmd;
    
COM                     paramparams;
    
COMVariant              emptyParam;
    
COMVariant              result;
    ;

    
cn = new CCADOConnection();
    
cn.open(
        
"Provider=SQLOLEDB;"+
        
"Data Source="      serverName    +   ";" +
        
"Initial Catalog="  baseName      +   ";" +
        
"uid="              userId        +   ";" +
        
"pwd="              userPassword);

    
comCN cn.connection();

    
cmd     = new COM("ADODB.Command");
    
param   = new COM("ADODB.Parameter");
    
cmd.activeConnection(comCN);
    
param.Type(16);      //adTinyInt, смотрите броузер объектов в среде VB в Экселе
    
param.Value(55);     //передаем в процедуру число 55
    
param.Name("@Res_"); //для Оракла обязательно передавать имя параметра
    
param.direction(3);  //adParamInputOutput, смотрите броузер объектов в среде VB в Экселе
    
params cmd.Parameters();
    
params.append(param);
    
cmd.commandType(4);  //adCmdStoredProc, смотрите броузер объектов в среде VB в Экселе
    
cmd.CommandText("axExp");
    
emptyParam = new COMVariant(COMVariantInOut::OutCOMVariantType::VT_INT);
    
cmd.Execute (emptyParamparams);
    
result param.Value();
    
info(int2str(result.byte()));
    
cn.close();