Empress Embedded の使用例

6章

第C言語によるプログラミング（1）――初期設定と検索David Zhang
ここでは，Empress Software 社のデータベースを例に，C 言語インターフェースを使ったデータベース・プログラミングの実例について解説する．データベースのオープン，操作，クローズという一連の流れを C 言語で操作できる．データベース専用の言語を知らなくても比較的容易に扱える．
（編集部）

1からダウンロードできます．インストールの詳細についてはデータベースの概要

アーカイブに含まれるドキュメントをご覧ください．なお，使用形態によっては，C コンパイラ，TCP/IP，JDK などが必要● 概要となります．

ここでは Empress Software 社のデータベースである「Empress

ここでは，C 言語インターフェースを使ったデータベース・Embedded」を例に，組み込みデータベースのプログラミングプログラミングの実例を，サンプル・コードを示しながら紹介について解説していきます．このデータベースはテキスト・します．

データとマルチメディア・データの両方を扱えるリレーショナ
ル ・ デ ー タ ベ ー ス（ RDBMS ： Relational Database Manage
ment System）です．画像・音声などを扱うマルチメディア・データベース，あるいは気象，地図情報システム，インター2 データベースの作成と操作● データベースの作成

ネット/イントラネットのコンテンツ管理などで利用されていインストール後，環境変数の設定が終了した時点（再ログイます．

ン）でデータベース操作が可能となります．以下では UNIX 版● 稼働環境と必要資源を例に，操作方法について説明します．
次のコマンドでデータベースを作成できます．

このデータベースは，一般的な UNIX（32 ビット/64 ビット），Linux，各種リアルタイム OS，Windows 2000/XP/2003 で動作# empmkdb testdb
testdb という名前のディレクトリが作成され，その下に図 1します．
今回は，本稿で紹介するデータベース（試用版）とサンプル・プログラムを本誌の Web ページに用意しました．
http://www.cqpub.co.jp/interface/download/

0001.rel
00010001.ix
00100001.dtf
00010004.dtf
00100001.ix
0002.rel
00100001.ixl
00020001.ix
00100011.dtf
00020007.dtf
00020008.dtf
00020009.dtf
00020010.dtf
00020011.dtf
00020014.dtf
00020015.dtf

0003.rel
00030001.ix

00060001.ix
00060008.dtf

00080001.ixl
00080003.dtf

00030001.ixl

00060009.dtf

0009.rel

00030010.dtf

00060011.dtf

00090001.ix

00030011.dtf

00060012.dtf

00090001.ixl

0004.rel
00040001.ix
00040001.ixl
0005.rel
00050001.ix
00050001.ixl
0006.rel

00060016.dtf
0007.rel
00070001.ix
00070004.dtf
00070007.dtf
0008.rel
00080001.ix

00090011.dtf
00090012.dtf
00090013.dtf
00090014.dtf
00090015.dtf
00090016.dtf
00090017.dtfのようなファイルが作成されます．これで，testdb という名前のデータベースが作成されたことになります．この testdb に対する SQL による簡単な操作の例を，図 2 に示します．操作方法

0010.rel_lock_module_trncdinator
dd_cachetabzero図 1 作成されるファイル一覧

86

KEYWORD ―― データベースの作成，mr ルーチン，データベースの検索# empsql testdb
対話型SQLの起動
EMPRESS V8.60(c) Copyright Empress Software Inc. 1983, 1999
1* create testtbl (a1, a2 char, a3 date);
2* display testtbl;
テーブルの作成*** Table: testtbl ***Attributes:
テーブルの表示a1 integer
a2 character(25,1)
a3 date(0)3* stop;
対話型SQLの終了#

図 2 testdb に対する，SQL による簡単な操作

Dec. 2006

C 言語によるプログラミング（1）―― 初期設定と検索

リスト 1 mx ルーチンを使った例#include <mscc.h>msmain(){/* テーブルの Open */mxopen ("database", "table", "u");mxgetbegin ("table", CHARNIL);
while (mxget ())/* 1 レコード入力*/
mxdel("table");/* 1 レコード削除*/
mxgetend ();mxclose ("table");/* テーブルの Close */}がわからないときは，コマンドラインから help と入力すると，ヘルプ画面が表示されます．

● データベースの削除
データベースを削除する場合には，かならず emprmdb コマンドを使用してください．システムのコマンド rm -rf で消去した場合には，予期せぬエラーが発生する場合があります．
# emprmdb testdb
そのほか，データベースの待避を行う empexpt などのユーティリティも用意されています．

6

リスト 2 mr ルーチンを使った例#include <mscc.h>msmain(){addr
tabdesc, recdesc, retdesc;/* テーブルの Open */tabdesc = mropen ("database", "table", 'u');recdesc = mrmkrec (tabdesc);
retdesc = mrgetbegin (ADDRNIL, recdesc, ADDRNIL);
while (mrget (retdesc))/* 1 レコード入力 */mrdel (recdesc);/* 1 レコード削除 */mrgetend (retdesc);
mrdelend (recdesc);
mrfrrec (recdesc);
mrclose (tabdesc);/* テーブルの Close */}リスト 3 SQL を使った例

1#include<mscc.h>
EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION ;charsqls[1024];
EXEC SQL END DECLARE SECTION ;main(){EXEC SQL INIT;
EXEC SQL DATABASE IS "database";
strcpy(sqls, "delete from table;");EXEC SQL EXECUTE IMMEDIATE :sqls;
if( SQLCODE )printf ("++ IMMEDIATE Error ++¥n");
EXEC SQL EXIT ;
:

2
3
4

言語によるデータベース・
3 Cアクセス・アプリケーションの作成● 二つの API，mr ルーチンと mx ルーチン
本データベースは，データベース構造へ直接アクセスするために，「mx ルーチン」と「mr ルーチン」という 2 種類のデータベース API を用意しています．

5

5 テーブル単位の操作

6● テーブルのオープンとクローズテーブルへのアクセスの第 1 ステップは，テーブル記述子を

mx ルーチンは，mr ルーチンよりかなり簡素であり，簡単に取得することです．mropen 関数はテーブルをオープンし，テーアプリケーションを作成できます．逆に複雑なアプリケーショ

ブル記述子を返します．テーブルをオープンできない場合は，ンや，速度が重視されるアプリケーションを作成したい場合は呼び出しプログラムを終了します．

mr ルーチンを使用することを推奨しています．

mropen 関数では，データベースに関する各種情報を保存しここでは比較のために，テーブルの全レコードを削除するてある「データ・ディクショナリ」に設定されているレベルのコーディング例を示します．リスト 1 が mx ルーチン，リストロックをテーブルに施します．たとえばテーブル・レベル・2 が mr ルーチンです．リスト 3 には，参考までに SQL を使っロックが設定されていれば，テーブル全体をロックしようとした例を示します．

ます．そのときすでにロック中であれば，変数 MSLOCKRETRYと MSLOCKSLEEP に設定されている値によって，再度ロックを4

mr ルーチンによるサンプル・プログラム実行します．テーブルをオープンしたあとロックを設定できない場合は，エラー・メッセージを出力し，呼び出しプログラムを終了します．

ここからは，高速にデータベースの操作が行える mr ルーチンの使用方法を詳細に解説します．C 言語によるサンプル・プ
ログラムを使うので，ソースを読み進めていけば，データベースを使ったプログラミングの概要がわかると思います．
以下のサンプル・プログラムでは，論理的なデータベース名として repairs を使用します．データベースの物理的な位置は，システムのいかなる場所であってもかまいません．

Dec. 2006

データベースのオープン関数は次のようなものです．
table_desc = mropen(database_name,table_name,mode);
table_desc = mrtopen（database_name,table_name,mode）;
mropen 関数と mrtopen 関数はよく似ていますが，mropen関数はエラー発生時にプロセスを終了するのに対し， t が付

New Products ―― Oracle，データベース・セキュリティ・ソフトウェアを発表
Oracle 社は，データやアプリケーション・ソフトウェアを保護するセキュリティ・ソフトウェア「Oracle Database Vault」を発表した．権限が 1 点に集中することで生じるリスクを解消したという．
「Oracle Database 10g」に組み込んで利用する．

87

78