langEnglish
ホーム > RT-DBA > プログラミング
ピックアップ
-コラム
社長からの一言
- RT-DBAのプログラミング -
 データアクセス方式プログラミング
書込みや、読み込み等の目的に応じたAPIを呼び出してDBへアクセスするプログラミング方式です。
● API一覧
No メソッド 機能
1 RtdbOpen DBへ接続する。
2 RtdbClose DBを切断する。
3 RtdbWrite DBへデータを書き込む。
4 RtdbSetReader DBの読み込み先を指定する。
5 RtdbRead DBからデータを読み込む。
6 RtdbGet DBから読込んだ値を取り出す。
7 RtdbClearReader DBの読み込みを終了する。

● サンプルコード
DBからデータの読み書きをするサンプルプログラムを下記に紹介します。
/*****************************************************************************
*
* FILE NAME:        DbaHSmpl.c
*
* DESCRIPTION:        メインプログラムモジュール
*
\*****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <rt.h>
#include <RtDbaH.h>


/*****************************************************************************
*
* FUNCTION:            main
*
* DESCRIPTION:        メイン
*
*
\*****************************************************************************/
void        main(int argc, char* argv[])
{
    int         inRtn;                      // 戻り値の取得用
    RTHANDLE    hDB;                        // DBハンドル格納用
    int         inSql;                      // SQL管理番号格納用
    DWORD       dwCnt;                      // レコード数
    WORD        woTO = 3000;                // タイムアウト時間
    char        chReadVal[32];              // DBから読込んだ値
    char        chWriteVal[32];             // DBへ書込む値
    char        chSql[128];                 // SQL文格納用

    // DBへ接続する
    inRtn = RtdbOpen ( "rtdbawork",        // Data Source Name
                     "",                    // データベース名
                     "",                    // 接続ユーザー名
                     "",                    // ユーザーパスワード
                     &hDB);                 // データベースハンドルを取得
    if (0 > inRtn){
        printf("RtdbOpen Error: ST[%d]\n", inRtn);
        return;
    }

    // DBからデータの読み込み先を指定する
    inRtn = RtdbSetReader (hDB, "DBA_TABLE01", "NUM_VAL01", "");
    if (0 > inRtn){
        printf("RtdbSetReader Error: ST[%d]\n", inRtn);
        return;
    }

    // データを読み込み、値を取り出す
    while (TRUE == RtdbRead (hDB)){
        inRtn = RtdbGet(hDB, "NUM_VAL01", chReadVal, sizeof(chReadVal));
        if (0 > inRtn){
            printf("RtdbGet Error: ST[%d]\n", inRtn);
            return;
        }
    }

    // 最後に読込んだ値に1加算した値をDBへ書き込む
    sprintf(chWriteVal, "%d", atoi(chReadVal) + 1);
    inRtn = RtdbWrite(hDB, "DBA_TABLE01", "NUM_VAL01", chWriteVal);
    if (0 > inRtn){
        printf("RtdbGet Error: ST[%d]\n", inRtn);
        return;
    }


    inRtn = RtdbClearReader (hDB);          // 読み込みを終了する
    if (0 > inRtn){
        printf("RtdbClearReader Error: ST[%d]\n", inRtn);
        return;
    }

    inRtn = RtdbClose (hDB);                // DBを切断する
    if (0 > inRtn){
        printf("RtdbClose Error: ST[%d]\n", inRtn);
        return;
    }

}
 埋め込みSQL方式プログラミング
プログラム内にSQL文を記述してDBにアクセスするプログラミング方式です。
● API一覧
No メソッド 機能
1 RtdbConnect DBへ接続する。
2 RtdbDisconnect DBを切断する。
3 RtdbCreateDataTable SELECT文を発行してDataTableを生成する。
4 RtdbGetString SELECT結果から指定したフィールドの値を文字列で取得する。
5 RtdbGetInt SELECT結果から指定したフィールドの値をINT型の値で取得する。
6 RtdbGetLong SELECT結果から指定したフィールドの値をLONG型の値で取得する。
7 RtdbExecuteSql INSERT、UPDATE、DELETE文を発行する。
8 RtdbExecuteFunction ストアドプロシージャを発行する。
9 RtdbClearSqlResult RtdbCreateDataTable、RtdbExecuteSql、RtdbExecuteFunctionの実行結果を解放する。
10 RtdbBeginTransaction DBのトランザクションを開始する。
11 RtdbCommitTransaction DBのトランザクションを完了する。
12 RtdbRollbackTransaction DBのトランザクションをロールバックする。
13 RtdbGetSarviceStatus DBのサービスとの接続状態を取得する。
14 RtdbGetConnectStatus DB通信プロセスとの通信状態を取得する。
15 RtdbGetRec SELECT結果から指定した1レコードを取得する。
16 RtdbGetRec SELECT結果から指定した1レコードを取得する。

● サンプルコード
DBからデータの読み書きをするサンプルプログラムを下記に紹介します。
/*****************************************************************************
*
* FILE NAME:        DbaLSmpl.c
*
* DESCRIPTION:        メインプログラムモジュール
*
\*****************************************************************************/

#include <stdio.h>
#include <stdio.h>
#include <rt.h>
#include <RtDbaL.h>

/*****************************************************************************
*
* FUNCTION:            main
*
* DESCRIPTION:        メイン
*
*
\*****************************************************************************/
void        main(int argc, char* argv[])
{
    int         inRtn;                         // 戻り値の取得用
    RTHANDLE    hDB;                           // DBハンドル格納用
    int         inSql;                         // SQL管理番号格納用
    DWORD       dwCnt;                         // レコード数
    WORD        woTO = 3000;                   // タイムアウト時間
    int         inVal;                         // DBから読込んだ値
    char        chSql[128];                    // SQL文格納用

    // DBへ接続する
    inRtn = RtdbConnect("rtdbawork",          // Data Source Name
                        "",                    // データベース名
                        "",                    // 接続ユーザー名
                        "",                    // ユーザーパスワード
                        &hDB,                  // データベースハンドルを取得
                        woTO);                 // タイムアウト(ミリ秒)
    if (0 > inRtn){
        printf("RtdbConnect Error: ST[%d]\n", inRtn);
        return;
    }

    // DBのテーブルから値の最大値を読込む
    inSql = RtdbCreateDataTable(hDB,
            "SELECT MAX(NUM_VAL01) AS MAX_NUM01 FROM DBA_TABLE01", woTO ,&dwCnt);
    if (0 > inSql){
        printf("RtdbCreateDataTable Error: ST[%d]\n", inSql);
        return;
    }

    // SELECT結果から値を取得する
    inRtn = RtdbGetInt(hDB, inSql, 0, "MAX_NUM01", &inVal, woTO);
    if (0 > inRtn){
        printf("RtdbGetInt Error: ST[%d]\n", inRtn);
        return;
    }

    // SELECT結果を解放する
    inRtn = RtdbClearSqlResult(hDB, inSql, woTO);
    if (0 > inRtn){
        printf("RtdbClearSqlResult Error: ST[%d]\n", inRtn);
        return;
    }

    // DBのテーブルへ最大値へ1加算した値を書込みます
    sprintf(chSql, "INSERT INTO DBA_TABLE01(NUM_VAL01)VALUES(%d)", (inVal + 1));
    inRtn = RtdbExecuteSql(hDB, chSql, woTO);
    if (0 > inRtn){
        printf("RtdbExecuteSql Error: ST[%d]\n", inRtn);
        return;
    }

    // DBを切断する
    inRtn = RtdbDisconnect(hDB, woTO);
    if (0 > inRtn){
        printf("RtdbDisconnect Error: ST[%d]\n", inRtn);
        return;
    }
}

- PLCプログラム -
INplc用として、ファンクションブロック形式でAPIと同等の機能を提供します。
INplcから呼び出すFBの一部をサンプルとして下記に紹介します。
 データアクセス方式FWL

● サンプルコード
High-Level FWL
 埋め込みSQL方式FWL

● サンプルコード
Low-Level FWL