# CHAPTER 2: インストールとセットアップ

## 2.1 ソフトウェア構成

Empress ODBC クライアントはMS Windows プラットフォームおよび Unix プラットフォームにおいてセットアップをすることができます。 以下はODBC クライアント / サーバーで使用する場合に必要な構成です。

| ODBC クライアント側
MS Windows 上の ODBC クライアント
MS Windows用 Empress ODBC ドライバ
UNIX 上の ODBC クライアント
UNIX 用 Empress ODBC ドライバ (シェアードライブラリまたはアーカイブライブラリ)
| コネクティビティ (ODBC) サーバー側
MS Windows および UNIX 上のコネクティビティ (ODBC) サーバー
Empress RDBMS
MS Windows および UNIX 上のコネクティビティ (ODBC) サーバー

ODBC ローカル アクセスを使用する場合においては以下の構成が必要です。 （サーバーは必要ありません。）

| ODBC クライアント側
MS Windows上の ODBC クライアント
Empress RDBMS
MS Windows用 Empress ODBC ローカル アクセス ドライバ
UNIX上の ODBC クライアント
Empress RDBMS
UNIX用 Empress ODBC ローカル アクセス ドライバ (シェアードライブラリまたはアーカイブライブラリ)

## 2.2 Windows 上での Empress ODBC ドライバ および Empress ODBC ローカル アクセス ドライバのセットアップ

Windows 用 ODBCドライバをセットアップするためには次のステップを実行してください。

1. Windows 用 Empress ODBC ドライバのインストール

   Windows 用 Empress ODBC ドライバ は すべての Empress RDBMS 正式リリース製品に 含まれています。 Empress ODBC ドライバのインストールは、 Empress 製品 CD をWindows マシンの CD-ROM ドライブに挿入すると 自動的にスタートします。

   Windows 用 Empress ODBC ローカル アクセス ドライバ は Windows 用 Empress RDBMS 中に含まれています。

2. ODBC データソースのセットアップ
   - Windows のコントロールパネルの中の Windows ODBC マネージャ （ODBC データソースアドミニストレータ）を開きます。
   - 該当するデータソースタイプを"タブ"から選択し、 データソース追加のための"追加"をクリックします。
   - Empress ODBC インタ−フェイスまたは Empress ODBC ローカル アクセス インターフェイスを選択し、"完了"をクリックします。
   - 以下のように"Empress ODBC データソース設定" ダイアログボックスが表示されます。

   - 以下の表は "Empress ODBC データソース設定" ダイアログボックスについての情報を提供します。

`データソース名` | ODBC データソース名を定義します。
`詳細` | データソースの説明を定義します。
`サーバー名` | サーバーマシンの ドメイン名あるいは IP アドレスを定義します。 このフィールドは ODBC ローカル アクセス ドライバでは定義できません。
`ポート番号` | ODBCサービスポート番号を定義します。 このフィールドは ODBC ローカル アクセス ドライバでは定義できません。
`データベース` | 論理データベース名、またはEmpress データベースへの物理的なフルパス を定義します。 論理データベース名は ODBC クライアント / サーバーでの使用でのみ指定できます。また、指定された場合、 コネクティビティ(OBDC)サーバーコンフィグレーションファイル中に マップしなくてはなりません。
`UID` | デフォルトのログイン名を定義します。
`PWD` | デフォルトのパスワードを定義します。
`トランスレーション` | ODBC ドライバのトランスレーションライブラリを定義します。
`トレース` | ODBC ドライバのトレースファイルを定義します。 ODBC クライアント/サーバーのシナリオやマルチスレッドクライアント環境に おいてはいくつかのトレースログファイルを生成することがあります。 例えば、ユーザーが「データソース設定」に「trace.log」と入力し、 ３つのスレッドのマルチスレッドアプリケーションを実行した場合、 「trace.log」ファイルは EmpressODBCインターフェイスを使用する第１のスレッドに関連します。 また、「trace.log.002」はEmpress ODBC インターフェースを使用する 第2のスレッドに関連します。 「trace.log.003」はEmpress ODBC インターフェースを使用する 第3のスレッドに関連します。 ODBC ローカル アクセスでのマルチスレッドクライアント環境 においては"tracel.log"ファイルのみ作成され、複数され作成されません。
`トレースレベル` | トレースレベル(1-3) を設定します。 トレースレベルはトレースメッセージの制御のために使われます。 この数が大きいほどより詳細なメッセージが生成されます。
`ODBC 3.x` | このボックスに設定された場合、 Empress ODBC ドライバは マイクロソフト ODBC 3.52 標準に準拠します。 ※Empress はこのオプションをセットするよう強く推奨します。
`ODBC 2.x Level 2` | このボックスに設定された場合、 Empress ODBC ドライバは マイクロソフト ODBC 2 標準に準拠します。
`ODBC 2.x Level 1` | このボックスに設定された場合 マイクロソフト ODBC 2 標準に従ったODBC 準拠 レベル 1 ドライバ として実行されることをEmpress ODBC ドライバに強制します。
`General Records Buffer` | フェッチされたレコードを格納するためのキャッシュメモリのサイズを定義します。 このサイズがフェッチされたレコードを格納するのに十分ではない場合、 それらを格納するためにファイルが使用されます。 プリフェッチされたレコード・キャッシュの値が 一般的なレコード・バッファの値より大きな場合、 プリフェッチされたレコードはファイルに格納されます。
`Pre-Fetched Records Cache` | SQLFetch が使用される場合にレコードを前もって格納するために使用されるスペースの サイズを定義します。
`Bulk/Text Data Buffer` | Bulk/Text アトリビュートデータのためのキャッシュサイズを定義します。 SQLGetData が呼び出された場合にだけ使用されます。 (例えばSQLBindColは関連しません。)

3. ODBC クライアントプログラムのコンパイルについて

   Empress は ユーザーがODBC クライアントプログラムをコンパイルすることを 支援をするためのユーティリティ `empocc` を提供します。 Empress ローカル アクセス を利用する場合、 `empocc -bcs`を指定しコンパイルします。 (Empress ODBC クライアントサーバー機構へのバイパス、および Empress ローカルデータベースに直接アクセスするために このオプションを指定します。) `empocc` コマンドの詳細はリファレンスを参照してください。

## 2.3 UNIX 上での Empress ODBC ドライバ および Empress ODBC ローカル アクセス ドライバのセットアップ

UNIX のための Empress ODBCドライバをセットアップするためには次のステップを 実行してください。

1. UNIX用の Empress ODBC ライブラリのインストール

Empress ODBC ライブラリは Empress 製品と一緒にインストール されます。 (分けてインストールする必要はありません。)

2. ODBC データソースのセットアップ

ODBC データベースはODBCデータソースファイル内で定義されます。 データソースファイルのデフォルトのファイル名は`odbc.ini`です。 そのファイルはODBCプログラムが起動される同じディレクトリに 置かなくてはなりませんが、ODBCデータソースファイルの名前および位置を 変更したい場合は Empress 変数 MSODBCINIFILEを使用することができます。

サンプルファイル `odbc.ini`

    [Data Source Name]
    DESCRIPTION=
    SERVER=
    PORT=6322
    DATABASE=
    TRACEFILE=
    TRACELEVEL=
    DEFAULTPWD=
    DEFAULTUID=
    ODBCLEVEL=
    ODBCVERSION=
    CACHE_SIZE=65536
    CACHE_BTSIZE=131072
    CACHE_FSIZE=131072

`Data Source Name` | ODBCデータソース名を定義します。
`DESCRIPTION` | データソースの説明を定義します。
`SERVER` | サーバーマシンの ドメイン名あるいは IP アドレスを定義します。 ODBC ローカル アクセスの場合、この値は LOCAL を設定します。
`PORT` | ODBC サービスポート番号を定義します。 ODBC ローカル アクセス データソースではこのフィールドは無視されます。
`DATABASE` | 論理データベース名、またはEmpress データベースへの物理的なフルパス を定義します。 論理データベース名は ODBC クライアント / サーバーでの使用でのみ指定できます。また、指定された場合、 コネクティビティ(OBDC)サーバーコンフィグレーションファイル中に マップしなくてはなりません。
`DEFAULTUID` | デフォルトログイン名を定義します。
`DEFAULTPWD` | デフォルトパスワードを定義します。
`TRACEFILE` | ODBC ドライバトレースファイルを定義します。 ODBC クライアント/サーバーのシナリオやマルチスレッドクライアント環境に おいてはいくつかのトレースログファイルを生成することがあります。 例えば、ユーザーが「TRACEFILE」に「trace.log」と設定し、 ３つのスレッドのマルチスレッドアプリケーションを実行した場合、 「trace.log」ファイルは EmpressODBCインターフェイスを使用する第１のスレッドに関連します。 また、「trace.log.002」はEmpress ODBC インターフェースを使用する 第2のスレッドに関連します。 「trace.log.003」はEmpress ODBC インターフェースを使用する 第3のスレッドに関連します。 ODBC ローカル アクセスでのマルチスレッドクライアント環境 においては"tracel.log"ファイルのみ作成され、複数され作成されません。
`TRACELEVEL` | トレースレベルはトレースメッセージの制御のために使われます。 この数が大きいほどより詳細なメッセージが生成されます。
`ODBCVERSION` | Empress ODBC ドライバが準拠するマイクロソフト ODBC 標準のバージョンを定義します。 値は 03.52 か 02.50 だけを設定することができます。 Empress では `ODBCVERSION` に`` 03.52をセットすることを推奨します。
`ODBCLEVEL` | Empress ODBC ドライバが実行するマイクロソフト準拠レベルを設定します。 値は `ODBCVERSION`が 02.50 をセットされた場合に 1 か 2 だけを設定することができます。 `ODBCVERSION`に 03.52 がセットされている場合は無視します。
`CACHE_FSIZE` | フェッチされたレコードを格納するためのキャッシュメモリのサイズを定義します。 このサイズがフェッチされたレコードを格納するのに十分ではない場合、 それらを格納するためにファイルが使用されます。 プリフェッチされたレコード・キャッシュの値が 一般的なレコード・バッファの値より大きな場合、 プリフェッチされたレコードはファイルに格納されます。
`CACHE_SIZE` | SQLFetch が使用される場合にレコードを前もって格納するために使用されるスペースの サイズを定義します。
`CACHE_BTSIZE` | Bulk/Text アトリビュートデータのためのキャッシュサイズを定義します。 SQLGetData が呼び出された場合にだけ使用されます。 (例えばSQLBindColは関連しません。)

ODBCクライアントのためのトレース情報は環境変数によってセットすることも できます。 UNIXでは、 `EMPODRV_TRACEFILE` および `EMPODRV_TRACELEVEL` の２つの環境変数をセットすることで、 `TRACEFILE` および `TRACELEVEL`の値に上書きされます。 例えば　C シェルの環境では:

      setenv EMPODRV_TRACELEVEL 2
      setenv EMPODRV_TRACEFILE ./drv2.log

上記では トレースレベルを 2、トレースファイルは drv2.logに設定しています。

3. ODBC クライアントプログラムのコンパイルについて

Empress は ユーザーがODBC クライアントプログラムをコンパイルすることを 支援をするためのユーティリティ `empocc` を提供します。 Empress ローカル アクセス を利用する場合、 `empocc -bcs`を指定しコンパイルします。 (Empress ODBC クライアントサーバー機構へのバイパス、および Empress ローカルデータベースに直接アクセスするために このオプションを指定します。) `empocc` コマンドの詳細はリファレンスを参照してください。

## 2.4 UNIX 上での Empress コネクティビティ (ODBC) サーバーのセットアップ

UNIX 用の Empress コネクティビティ(ODBC) サーバーをセットアップするためには 次のステップを実行してください。

1. 既にEmpress RDBMSをインストールされている環境として説明します。

2. `emppassword`ユーティリティを使い Empress パスワード ファイル 中の Empress コネクティビティ(ODBC) サーバーにアクセスするためのユーザーの 設定とファイルの作成をおこないます。

   1. コネクティビティ サーバーは 以下のように作成されたパスワードファイルを必要とします。

              emppassword -f パスワードファイル create

   2. パスワードファイルにユーザーを追加する必要があります。

              emppassword -f パスワードファイル add ユーザーログイン名

      パスワードファイルに名前およびパスワードを追加してください。 Empress サーバーの管理者は$USERによって示され、 サーバーを起動したユーザーであることに注意してください。 Empress サーバーの起動を行うユーザーは パスワードファイルにログイン名および パスワードを持っていなければなりません。
   注意:
     新しく Empress パスワード ファイルの作成したくない場合、 現在のオペレーティングシステムのパスワードファイルを Empress コネクティビティ サーバーのパスワードファイルとして 利用することができます。 このファイルは通常`/etc/passwd`です。 `emppassword`ユーティリィティでは このファイルを編集することができません。また、 このファイルのコピーを使用することができないこと に注意してください。

3. ネットワーク サーバー コンフィグレーション ファイル (`netserver.cfg`).
   のセットアップをします。デフォルトでは `netserver.cfg`です。

           EMPRESSPATH/config/netserver.cfg

   $HOME/.empress ディレクトリーにこのファイルをコピーし、 そのファイルに変更を加えることができます。 属性内のコロン(`:`)の削除により いくつかのコンフィグレーション属性のコメントを外す必要があるかもしれません。 属性のセットはそれらの値を「XXX」にセットすることにより設定されます。 また、属性をセットしないことは、属性の値から「XXX」を削除することにより行われます。
   1. コネクティビティ(ODBC) サーバーのユーザーのための セキュリティチェックが必要でない場合、 SECURITY_CHECK_PASSWORD　コンフィグレーション属性を コメントアウトするか、または値をセットしないことで セキュリティチェックをおこなわないようにすることができます。

              MSNETSERVER
              :
              : common
              :
                  NAME=empodbcsv
                  TYPE=odbc
                  HOST=localhost
                   ....
                  SECURITY_CHECK_PASSWORD=
              :   SECURITY_PASSWORD_FILE=パスワードファイルの位置
                   ....
              MSNETSERVEREND

   2. 任意のユーザに対し、サーバーの使用を許可しないようにするために ユーザーをチェックをする必要がある場合、 このファイルの変更すべき点は、 ODBC(`TYPE=odbc`があるもの)と関係するブロックに属する属性 `SECURITY_PASSWORD_FILE`の値をセットします。 前のステップで作成したパスワードファイルをこの属性にセットします。

              MSNETSERVER
              :
              : common
              :
                  NAME=empodbcsv
                  TYPE=odbc
                  HOST=localhost
                   ....
               :  SECURITY_CHECK_PASSWORD=
                  SECURITY_PASSWORD_FILE=パスワードファイルの位置 ....
              MSNETSERVEREND

   `netserver.cfg`の名前を示す環境変数は `MSNETSERVERCONFIGFILE`です。 これは次の`EMPRESSPATH/config/inifile`ファイルの中で定義されます。

          MSNETSERVERCONFIGFILE=netserver.cfg

   注意:

   1. このファイルの中の `NAME` 属性に新しい名前を設定することにより、 デフォルトのコネクティビティ(ODBC)サーバーの名前を変更することできます。
   2. `netserver.cfg`を別の異なった ネットワーク サーバー コンフィグレーション ファイル の名前に変更したい場合、 環境変数`MSNETSERVERCONFIGFILE`に新しい名前をセットすることで 可能です。例えば C シェルでは:

              setenv MSNETSERVERCONFIGFILE new_netserver.cfg

   3. ネットワーク サーバー コンフィグレーション ファイルは、環境変数 `MSCONFIGFILEPATH` にセットしたパスによりサーチされます。 以下はデフォルトの値です。

             MSCONFIGFILEPATH="$HOME/.empress;$HOME;${EMPRESSPATH}/config"

      他のディレクトリにこのファイルをコピーした場合、 `MSCONFIGFILEPATH`にコピー先のパスを含めることで認識されます。 例えば C シェルでは ：

             setenv MSCONFIGFILEPATH "newpath"

   4. 新しく Empress パスワード ファイルを作成したくない場合、 現在のオペレーティングシステムのパスワードファイルを Empress コネクティビティ サーバーのパスワードファイルとして 利用することができます。 次のように SECURITY_PASSWORD_FILE にセットします。

              SECURITY_PASSWORD_FILE=/etc/password

      詳細な情報は [パスワード ファイル ユーティリティ] を参照してください。

4. コネクティビティ(ODBC)サーバーコンフィグレーション のデフォルトを変更する必要がある場合は、 コネクティビティ(ODBC)サーバーコンフィグレーションファイルを 任意に作成してください。

5. サーバー側において以下のコマンドを使用し、 Empress コネクティビティ(ODBC)サーバーを起動してください。

      $EMPRESSPATH/bin/empsvadm odbcサーバー名 start -f odbcサーバーコンフィグレーションファイル

odbc サーバー名は、 ネットワーク サービス コンフィグレーション ファイルの中の`NAME` に設定したコネクティビティ (ODBC) サーバーの名前です。 デフォルトのコネクティビティ (ODBC)サーバー名はempodbcsvです。
(注意として前のステップで Empress コネクティビティ (ODBC) サーバー コンフィグレーション ファイル を作成した場合のみ `-f odbcサーバーコンフィグレーションファイル` の指定が必要になります。)

> 注意：Empressは、各サーバーマシン上でひとつだけ Empress コネクティビティ(ODBC)サーバーの起動を認めます。 （1台で複数のコネクティビティサーバーの起動は認めていません）

サーバー上でのコネクティビティ(ODBC)サーバーを起動は データベース管理者がおこなうことを推奨します。 これはEmpress RDBMS ファイルのための保護レベルを維持し、 また他のユーザが所有しているEmpress RDBMSファイルへの ODBCクライアントアプリケーションによる無許可のアクセスを防ぐのに有効です。

Empress コネクティビティ(ODBC)サーバーの管理は個別のマニュアルの中で説明されます。 Empress サーバーまた、 特にODBC(コネクティビティ)サーバーの使用法に関する詳細な情報は [Empress Servers]を参照してください。

## 2.5 Windows 上での Empress コネクティビティ (ODBC) サーバーのセットアップ

Empress コネクティビティ (ODBC) サーバー管理者は サーバー管理ユーティリティを使って設定をすることができます。
Empress コネクティビティ (ODBC) サーバーは サーバー管理ユーティリティから開始することができます。 また、Windows のコントロールパネル内の サービス設定 および DOS プロンプトから開始することができます。
Empress コネクティビティ (ODBC) サーバー管理ユーティリティ あるいは Windows のコントロールパネル中のサービス設定で Empress コネクティビティ (ODBC) サーバーの開始するために システムは以下のことを要求します。

1. Empress コネクティビティ (ODBC) サーバー管理ユーティリティ のネットワーク設定内の「ADMINISTRATOR」フィールドには 「SYSTEM」が設定され、また「PASSWORD」フィールドは 空に設定しなければなりません。
2. Empress コネクティビティ(ODBC)サーバー管理ユーティリィティの ユーザー設定内に空のパスワードを持った「SYSTEM」という名前の ユーザーを設定しなければなりません。

システムのインストールの間に上記の設定はデフォルトで作成されます。
DOSプロンプトからのコネクティビティ (ODBC) サーバーの開始は UNIX上の Empress コネクティビティ (ODBC) サーバーのセットアップを参照してください。

## 2.6 追加情報について

「マイクロソフト ODBC 3.0プログラマーズ リファレンスおよび SDK ガイド」 は ODBC 3.0 標準 のための開発ガイドと完全なインターフェイス説明が含まれています。

## 2.7 C 言語で記述されたサンプルアプリケーション

Empress は 製品 CD に含まれるサンプル ODBC プログラムを提供します。 このファイルは Empress のインストールが成功した後に

     $EMPRESSPATH/odbccl/example

ディレクトリにコピーされます。

アプリケーション動作の基本的なステップを示します。

1. ODBC 環境の初期化とデータソースに接続します。
2. SQL ステートメントを処理します。
3. 接続を終了します。

サンプルプログラムの一部は以下のとおりです。

    main () {

        short   i;
        char    valsr[STRING_LEN];
        long    vallr;
        RETCODE err;

        /* Environment allocation */
        check("SQLAllocEnv",SQLAllocEnv(&henv));

         /* Data Base Connection allocation */
         check("SQLAllocConnect",SQLAllocConnect(henv, &hdbc));

          /* Establish a connection to a Data Source */
          /* NOTE: You must specify [empress] data source section in odbc.ini file */
         check("SQLConnect",SQLConnect(hdbc, (UCHAR FAR *)"empress", SQL_NTS,
                               (UCHAR FAR *)LOGINNAME, SQL_NTS, (UCHAR FAR *)"", SQL_NTS));

         /* Statement allocation */
         check("SQLAllocStmt",SQLAllocStmt(hdbc, &hstmt));

         /* Create a test table t with couple records */
         check("create t (ID longinteger, name char)",SQLExecDirect(hstmt,
                (UCHAR FAR *)"create t (ID longinteger, name char)", SQL_NTS));
         check("insert into t values (1, 'ana')",SQLExecDirect(hstmt,
                (UCHAR FAR *)"insert into t values (1, 'ana')", SQL_NTS));
         check("insert into t values (2, 'fred')",SQLExecDirect(hstmt,
                (UCHAR FAR *)"insert into t values (2, 'fred')", SQL_NTS));
         check("insert into t values (3, 'bill')",SQLExecDirect(hstmt,
                (UCHAR FAR *)"insert into t values (3, 'bill')", SQL_NTS));

         check("SQLBindCol",SQLBindCol(hstmt, 1, SQL_C_LONG, &vallr, 0, &cbLenL));

         /* Assign the storage and data type for the second column in a result set */
         check("SQLBindCol",SQLBindCol(hstmt, 2, SQL_C_CHAR, valsr, STRING_LEN, &cbLenC));

         /* retrieve records from table t */
         check("select from t",SQLExecDirect(hstmt, (UCHAR FAR *)"select from t", SQL_NTS));

         i=1;
         while (1)
            {
                 /* Fetch records */
                 check("SQLFetch", err = SQLFetch(hstmt));
                 if (err) break;

                 /* print table attributes from each fetched row */
                 printf("Row %d .. ID: %ld Name: \"%s\" \n", i++,vallr,valsr);
            }

         /* Drop a test table t */
         check("drop table t",SQLExecDirect(hstmt, (UCHAR FAR *)"drop table t", SQL_NTS));

         /* Free Statement allocation */
         check("SQLFreeStmt",SQLFreeStmt(hstmt, SQL_DROP));

         /* Disconnect status */
         check("SQLDisconnect",SQLDisconnect(hdbc));

         /* Free Data Base Connection allocation */
         check("SQLFreeConnect",SQLFreeConnect(hdbc));

         /* Free Environment allocation */
         check("SQLFreeEnv",SQLFreeEnv(henv));

        return 0;
    }

プログラミングのよい習慣としてODBC 関数のそれぞれの呼び出しの後に 返り値をチェックすることです。 一般に返り値は下記のいずれかになります。

    SQL_SUCCESS
    SQL_NO_DATA_FOUND
    SQL_INVALID_HANDLE
    SQL_NEED_DATA
    SQL_SUCCESS_WITH_INFO
    SQL_ERROR
    SQL_STILL_EXECUTING

ODBC 関数の呼び出しチェックにおいて 取得可能な付加情報を得るために `SQLError` を呼ぶことを推奨します。

このテストプログラムは 他のSQL コマンド、また ODBC API 関数コールのチェックとして 修正して利用することができます。