powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хранимые процедуры
4 сообщений из 4, страница 1 из 1
Хранимые процедуры
    #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
Хранимые процедуры
    #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
Хранимые процедуры
    #33204424
kolobok0,
СПАСИБО ЗА ОГРОМНЫЙ ВАШ ТРУД,
К СОЖАЛЕНИЮ ЭТО ВСЁ СДЕЛАНО,
А ВКРУГЛИНСКИ ЭТОТ ВОПРОС Я НЕ НАШЁЛ
РСВЕЩЕННЫМ.
ИМЕЕТСЯ ЭТА КНИГА У МЕНЯ,
ВОЗМОЖНО ПЛОХО Я ИСКАЛ,
ПОИЩУ ЕЩЁ

СПАСИБО
...
Рейтинг: 0 / 0
Хранимые процедуры
    #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
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Хранимые процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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