ページの先頭行へ戻る
Symfoware Server V11.0.x SQLリファレンス
Symfoware

7.3.1 SQLDynSetCallback

機能

コールバック関数を動的に登録します。このコールバック関数は、利用者が作成します。

記述形式

SQLRETURN SQLDynSetCallback ( SQLHDBS ses_id )

一般規則

異常時の対処

復帰コード

意味

対処

SQLRDB_NORMAL

正常終了

SQLRDB_NORMAL以外の任意の値

異常終了

コールバック関数の登録に失敗しました。

使用例

INSERT文、UPDATE文、DELETE文および単一行SELECT文に対するコールバック関数を実行時に登録します。


登録用DLLのプログラム

#include <stdio.h>
#include "sqlrdbei.h"

/* コールバック関数の動的登録関数定義 */
/* コールバック関数のプロトタイプ */

/* INSERT文用 */
SQLRETURN CFInsert( SQLHDBS, char *, char *, void *, SQLCALL_T * );

/* UPDATE文用 */
SQLRETURN CFUpdate( SQLHDBS, char *, char *, void *, SQLCALL_T * );

/* DELETE文用 */
SQLRETURN CFDelete( SQLHDBS, char *, char *, void *, SQLCALL_T * );

/* 単一行SELECT文用 */
SQLRETURN CFSelect( SQLHDBS, char *, char *, void *, SQLCALL_T * );

SQLRETURN SQLDynSetCallback( SQLHDBS  sid )
{
    SQLRETURN    ret;
    short        kind_list[2];

    /* INSERT文の入口コールバック関数 */
    kind_list[0] = SQLRDB_CF_INSERT;
    kind_list[1] = 0;
    ret = SQLSetCallback( sid, CFInsert, NULL, kind_list, SQLRDB_CALL_IN );
    if ( ret != SQLRDB_NORMAL ) {
        return( ret );
    }

    /* UPDATE文の入口コールバック関数 */
    kind_list[0] = SQLRDB_CF_UPDATE_SEARCH;
    kind_list[1] = 0;
    ret = SQLSetCallback( sid, CFUpdate, NULL, kind_list, SQLRDB_CALL_IN );
    if ( ret != SQLRDB_NORMAL ) {
        return( ret );
    }

    /* DELETE文の入口コールバック関数 */
    kind_list[0] = SQLRDB_CF_DELETE_SEARCH;
    kind_list[1] = 0;
    ret = SQLSetCallback( sid, CFDelete, NULL, kind_list, SQLRDB_CALL_IN );
    if ( ret != SQLRDB_NORMAL ) {
        return( ret );
    }

    /* 単一行SELECT文の入口コールバック関数 */
    kind_list[0] = SQLRDB_CF_SELECT;
    kind_list[1] = 0;
    ret = SQLSetCallback( sid, CFSelect, NULL, kind_list, SQLRDB_CALL_IN );
    if ( ret != SQLRDB_NORMAL ) {
        return( ret );
    }

    return( SQLRDB_NORMAL );
}

SQLRETURN CFInsert(    SQLHDBS        sid,
                            char        *sqlstate,
                            char        *sqlmsg,
                            void        *area,
                            SQLCALL_T    *sql_dat)
{
    SQLDATA_T        param;
    short            roop;

    char            sqlstr[1024];

    printf( "ファイル名 : %s\n", sql_dat->application );
    printf( "SQL文      : %s\n", sql_dat->sql_stmt );

    return ( SQLRDB_CONTINUE );
}

SQLRETURN CFUpdate(    SQLHDBS        sid,
                            char        *sqlstate,
                            char        *sqlmsg,
                            void        *area,
                            SQLCALL_T    *sql_dat)
{
    SQLDATA_T        param;
    short            roop;

    char            sqlstr[1024];

    printf( "ファイル名 : %s\n", sql_dat->application );
    printf( "SQL文      : %s\n", sql_dat->sql_stmt );

    return ( SQLRDB_CONTINUE );
}

SQLRETURN CFDelete( SQLHDBS     sid,
                    char        *sqlstate,
                    char        *sqlmsg,
                    void        *area,
                    SQLCALL_T   *sql_dat)
{
    SQLDATA_T        param;
    short            roop;

    char            sqlstr[1024];

    printf( "ファイル名 : %s\n", sql_dat->application );
    printf( "SQL文      : %s\n", sql_dat->sql_stmt );

    return ( SQLRDB_CONTINUE );
}

SQLRETURN CFSelect( SQLHDBS     sid,
                    char        *sqlstate,
                    char        *sqlmsg,
                    void        *area,
                    SQLCALL_T   *sql_dat)
{
    SQLDATA_T        param;
    short            roop;

    char            sqlstr[1024];

    printf( "ファイル名 : %s\n", sql_dat->application );
    printf( "SQL文      : %s\n", sql_dat->sql_stmt );

    return ( SQLRDB_CONTINUE );
}