DB エンジンに関する行について、簡単な説明を作ってみました。 (私が理解している範囲でですので、変な場合にはツッコミを入れてください..)DB エンジンを使うために必要なことは、DBAPI.H をインクルードするだけです。 特に LINK が必要なモジュールもありません。
#include "dbapi.h" // for DB Engineこれは、main() のところにある、
#define MAX_CARD_WNDS 16 char far *SysMgrPtrs[MAX_CARD_WNDS + 27]; // シスマネ管理 far_pointer_tableで使われます。 far pointer table は、シスマネが、必要な時に自動的にメンテします。 DB エンジンも far pointer を使うため、タスクスイッチ等の際のセグメント 移動に対処して pointer を書き換えることが必要であり、この行が入っています。 m_reg_far() 自体は DB エンジン専用ではありません。
m_reg_far(&SysMgrPtrs, countof(SysMgrPtrs), 4); // far_pointer_Table 登録この構造体は、データベースの各種情報を管理します。 DB エンジンの各関数はこれを通じて各種アクションを制御しています。
DBBLOCK dblk; // DBブロック構造体DB file open に必要な変数です。 filetype の種類は、 GDB, PDB : D WDB : W NDB : N ADB : 2 で、各指定をします。
char db_filename[50] = "c:\\_dat\\phone.pdb"; // DBファイル名 char filetype = 'D'; // タイプ == GDB char paswd[] = ""; // パスワードデータベースファイルをオープンします。 filetype や password の指定があることが、通常のファイルオープンと違って います。
if (DB_Open(&dblk, db_filename, filetype, NULL, paswd, 0, 0) < 0)データベースアプリでいう Subset の先頭のものを選択しています。 この関数で Subset の切り替えができます。
if (DB_SetCurrentViewpt(&dblk, 0) < 0) { //View_Ptr_Table を 0 に選択DB エンジンの初期化です。 アプリ起動時に1回だけ必要です。
void main(void) … DB_Init(); //DBの初期化DB ファイルのオープンとクローズは、このようにイベントループの外側で 行い、処理を軽くしています。
DB_open_and_setvpt(); //DBオープン,と View_Pointer_Table セット … DB_Close(&dblk); //DBクローズイベントループでは、まず、DBのフラッシュを行います。 書き込みバッファに残っているデータのファイル書きだしです。 この行は、アプリハング等にデータを損失しないために必要です。
while (!Done) //以下イベントループ { DB_FlushFile(&dblk); //DB(バッファ内)データ書き込みタスク切り替えをするとき、帰ってくるとき、の対処にこの処理をします。 具体的には DB ファイルの DOS ファイルハンドラーをクローズして開放して います。 これにより、他のアプリでファイルハンドラー不足が生じる心配はなくなり ます。 また、Deact 時にその DB ファイルを read only 属性をつけます。 これにより、他のアプリがそのファイルを書き換える心配はなくなります。 --------------------------------------------------------------------- ※ 細かい点は別にして、それほど難しくないと思います。 これ以外に、PC-Card が抜かれたことへの対処を入れておくとより安全です。
case E_REFRESH: DB_Reactivate(&dblk); //DB再アクティブ化 … case E_DEACT: DB_Deactivate(&dblk); //DB非アクティブ化 …
Count (03/27/1999) ->
update 03/27/1999, since 06/28/1998(original)
Copyright (c) 1999 by guel. All rights reserved.