Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хранимые процедуры / 4 сообщений из 4, страница 1 из 1
05.08.2005, 10:47
    #33203397
Хранимые процедуры
На базе данных типа Sybase SQL Anywhere
“Paydesk.db”
имеется сохранённая процедура, имя которой -
“my_name_procedure” – учебная процедура, ДЛЯ ЕКСПЕРИМЕНТА

Код: plaintext
1.
2.
3.
4.
5.
alter procedure my_name_procedure as select postvydpokaci_etalon_copy.num_docum,
  postvydpokaci_etalon_copy.datepldor,postvydpokaci_etalon_copy.fio,
  postvydpokaci_etalon_copy.assign,
  postvydpokaci_etalon_copy.sign,
  postvydpokaci_etalon_copy.summa_1
  from PostVydPoKaci_Etalon_copy

В результате выполнения извлеченоі 3295 записей из таблицы в 6 столбцов

Как запустить эту процедуру из приложения на Visual C++ 6.0 ? Код прикрепить к командной кнопке на диалоговом окне, или к пункту / подпункту меню. ТИП ПРИЛОЖЕНИЯ – SDI or MDI

СПАСИБО
...
Рейтинг: 0 / 0
05.08.2005, 14:27
    #33204295
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры
Новосибирск....имеется сохранённая процедура.....Как запустить эту процедуру из приложения на Visual C++ 6.0 ? Код прикрепить к командной кнопке на диалоговом окне, или к пункту / подпункту меню. ....

1) Хранимая у Вас находиться в БД. Значит в проекте Вам потребуеться обеспечить
а) конекшен к базе.
б) выполнить требуемый запрос...
в) обработать результат запроса к БД
2) Обычно запуск хранимых процедур проивходиться посредством вызова в SELECT (не строго) выражении.
3) Прикрепить к кнопки - очень просто. Необходимо создать обработчик события поступившего от кнопки. Например клик или дабл клик. В обработчике можете вставлять свой код. В вижуал среде этот процесс автоматизирован (создание обработчика).
4) Вызывать "создание конекшенна" на обработчике кнопки - не совсем гуд. Инициализацию конекшенна лучше перевести на фазу подьёма(инициализации) Вашего приложения, либо документа (в терминологии SDI or MDI) - это не аксиома, а ближе к "правильному поведению".
5) Если юзаете MFC библиотеку - то рекомендую взглянуть на классы CDatabase и CRecordset - эти классы обеспечивают доступ к БД.
6) По MFC рекомендую купить книжку Круглинского (кажеться название) "Использование MFC в VC++ 4". Хоть и для 4 но думаю Вы найдёте много чего полезного там.


удачи Вам
(круглый)
...
Рейтинг: 0 / 0
05.08.2005, 15:08
    #33204424
Хранимые процедуры
kolobok0,
СПАСИБО ЗА ОГРОМНЫЙ ВАШ ТРУД,
К СОЖАЛЕНИЮ ЭТО ВСЁ СДЕЛАНО,
А ВКРУГЛИНСКИ ЭТОТ ВОПРОС Я НЕ НАШЁЛ
РСВЕЩЕННЫМ.
ИМЕЕТСЯ ЭТА КНИГА У МЕНЯ,
ВОЗМОЖНО ПЛОХО Я ИСКАЛ,
ПОИЩУ ЕЩЁ

СПАСИБО
...
Рейтинг: 0 / 0
05.08.2005, 20:11
    #33205003
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимые процедуры
я конечно не силен в Sybase, но судя по синтаксису проедура должна только создаться. А если она есть то вызываться должна несколько инача типа :

Код: plaintext
1.
EXEC my_name_procedure @arg1, @arg2, @arg3, @arg4, @arg5 OUT

ну например примерно так . Это правда для MSSQL2000

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
//---------------------------------------------------------------------------------------------------------------------
static bool CallSp( const char *lpszServiceName, const string HostName, 
                     const unsigned short wUDPPort, const unsigned int internalBES_id, 
                     const unsigned long wPID, RIMStream &DBNSrequest, 
                     const char * lpszdbConnectString, unsigned int service_timeout )
{
    const char * db_fcn = "CallSp";
    bool bSuccess = true;

    _CommandPtr    pCmd;
    _RecordsetPtr  pRS;

    _ConnectionPtr  pConnection = NULL;
    try
    {
        // Initialize the command object
        HRESULT hr = pCmd.CreateInstance( CLSID_Command );
        if( FAILED(hr) ) 
        {
            bSuccess = false;
        } 

        TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
        pConnection->Open ( lpszdbConnectString, "", "", adConnectUnspecified );

        // Set all the command parameters and execute the command
        pCmd->ActiveConnection = pConnection;

        pCmd->CommandText = (_bstr_t)"my_name_procedure";
        pCmd->CommandType = adCmdStoredProc;

        // wrap rim data
        _variant_t vData;
        const size_t buffer_len = StreamWrapper( vData, DBNSrequest );

        vector<DBNSRequest> lstTest;
        //unsigned char *ptrData  = (unsigned char *)vData.parray->pvData;

        long version =  0 ;
        if( buffer_len >  0  )
        {
            _ParameterPtr  pParm0 = pCmd->CreateParameter( "", adVarChar,   adParamInput,  10 ,   lpszServiceName );
            _ParameterPtr  pParm1 = pCmd->CreateParameter( "", adVarChar,   adParamInput,  255 ,  HostName.c_str() );
            _ParameterPtr  pParm2 = pCmd->CreateParameter( "", adInteger,   adParamInput,  0 ,    (long)wUDPPort );
            _ParameterPtr  pParm3 = pCmd->CreateParameter( "", adInteger,   adParamInput,  0 ,    (long)internalBES_id );
            _ParameterPtr  pParm4 = pCmd->CreateParameter( "", adInteger,   adParamInput,  0 ,    (long)wPID );
            _ParameterPtr  pParm5 = pCmd->CreateParameter( "", adVarBinary, adParamInput, buffer_len, vData );
            _ParameterPtr  pParm6 = pCmd->CreateParameter( "", adInteger,   adParamInput,  0 ,    (long)service_timeout );
            _ParameterPtr  pParm7 = pCmd->CreateParameter( _bstr_t("version"), adInteger,   adParamOutput, 0 ,    version );

            pCmd->Parameters->Append( pParm0 );
            pCmd->Parameters->Append( pParm1 );
            pCmd->Parameters->Append( pParm2 );
            pCmd->Parameters->Append( pParm3 );
            pCmd->Parameters->Append( pParm4 );
            pCmd->Parameters->Append( pParm5 );
            pCmd->Parameters->Append( pParm6 );
            pCmd->Parameters->Append( pParm7 );

            hr = pCmd->Execute(  0 ,  0 , adCmdStoredProc );
            if( FAILED(hr) )
            {
                bSuccess = false;
            }
            pParm7 = pCmd->Parameters->GetItem(_bstr_t("version"));
            version = pParm7->GetValue();

            if( version < DBNS_VERSION && version ==  0  )
            {
                bSuccess = false;
            }
        }
    }
    catch(_com_error comerr)
    {
        DebugLog::Printf( DebugLog::LOG_INFORMATIONAL, IDE_35007, LoadString( IDE_35007 ), db_fcn,
            comerr.Error(), comerr.ErrorMessage(), (LPCTSTR)(_bstr_t)comerr.Source(), (LPCTSTR)(_bstr_t)comerr.Description(), "my_name_procedure" );
        bSuccess = false;
    }
    catch( ... )
    {
        DebugLog::Printf(DebugLog::LOG_INFORMATIONAL, IDE_35003, LoadString( IDE_35003 ), db_fcn);
        bSuccess = false;
    }
    if( pConnection )
    {
        if( pConnection->State == adStateOpen )
        {
            pConnection->Close();
        }
    }

    return bSuccess;
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хранимые процедуры / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]