DB Engine 再探求 PJ #1B


スケルトンサンプル:説明

DB エンジンに関する行について、簡単な説明を作ってみました。

(私が理解している範囲でですので、変な場合にはツッコミを入れてください..)



#include "dbapi.h"        // for DB Engine
DB エンジンを使うために必要なことは、DBAPI.H をインクルードするだけです。 特に LINK が必要なモジュールもありません。

#define    MAX_CARD_WNDS    16
char far *SysMgrPtrs[MAX_CARD_WNDS + 27];  // シスマネ管理 far_pointer_table
これは、main() のところにある、

 m_reg_far(&SysMgrPtrs, countof(SysMgrPtrs), 4);    // far_pointer_Table 登録
で使われます。 far pointer table は、シスマネが、必要な時に自動的にメンテします。 DB エンジンも far pointer を使うため、タスクスイッチ等の際のセグメント 移動に対処して pointer を書き換えることが必要であり、この行が入っています。 m_reg_far() 自体は DB エンジン専用ではありません。

DBBLOCK dblk;        // DBブロック構造体
この構造体は、データベースの各種情報を管理します。 DB エンジンの各関数はこれを通じて各種アクションを制御しています。

char    db_filename[50] =    "c:\\_dat\\phone.pdb";      // DBファイル名
char    filetype        =    'D';                        // タイプ == GDB
char    paswd[]         =    "";                         // パスワード
DB file open に必要な変数です。 filetype の種類は、 GDB, PDB : D WDB : W NDB : N ADB : 2 で、各指定をします。

    if (DB_Open(&dblk, db_filename, filetype, NULL, paswd, 0, 0) < 0)
データベースファイルをオープンします。 filetype や password の指定があることが、通常のファイルオープンと違って います。

    if (DB_SetCurrentViewpt(&dblk, 0) < 0) {    //View_Ptr_Table を 0 に選択
データベースアプリでいう Subset の先頭のものを選択しています。 この関数で Subset の切り替えができます。

void main(void)
…
    DB_Init();                    //DBの初期化
DB エンジンの初期化です。 アプリ起動時に1回だけ必要です。

    DB_open_and_setvpt();        //DBオープン,と View_Pointer_Table セット
…
    DB_Close(&dblk);            //DBクローズ
DB ファイルのオープンとクローズは、このようにイベントループの外側で 行い、処理を軽くしています。

    while (!Done)                    //以下イベントループ
    {
        DB_FlushFile(&dblk);        //DB(バッファ内)データ書き込み
イベントループでは、まず、DBのフラッシュを行います。 書き込みバッファに残っているデータのファイル書きだしです。 この行は、アプリハング等にデータを損失しないために必要です。

            case E_REFRESH:
                DB_Reactivate(&dblk);            //DB再アクティブ化
  …
            case E_DEACT:
                DB_Deactivate(&dblk);            //DB非アクティブ化
  …
タスク切り替えをするとき、帰ってくるとき、の対処にこの処理をします。 具体的には DB ファイルの DOS ファイルハンドラーをクローズして開放して います。 これにより、他のアプリでファイルハンドラー不足が生じる心配はなくなり ます。 また、Deact 時にその DB ファイルを read only 属性をつけます。 これにより、他のアプリがそのファイルを書き換える心配はなくなります。 --------------------------------------------------------------------- ※ 細かい点は別にして、それほど難しくないと思います。 これ以外に、PC-Card が抜かれたことへの対処を入れておくとより安全です。

Count (03/27/1999) ->

update 03/27/1999, since 06/28/1998(original)
Copyright (c) 1999
by guel. All rights reserved.