 |
Btrieve API Guide (v11) |
 |
|
Open(0)
Open オペレーション(B_OPEN)は、ファイルへのアクセスを可能にします。アプリケーションでファイルにアクセスするには、まず Open オペレーションを実行する必要があります。フル パス名または相対パス名を指定する限り、対象となるファイルが現在のディレクトリに保存されている必要はありません。
パラメーター
|
オペレーション コード
|
ポジション ブロック
|
データ バッファー
|
データ バッファー長
|
キー バッファー
|
キー番号
|
送り値
|
|
|
|
|
|
|
戻り値
|
|
|
|
|
|
|
前提条件
- 開くファイルは、アクセス可能な論理ディスク ドライブ上にあることが必要です。
- そのファイルで使用可能なファイル ハンドルが存在することが必要です。
手順
- オペレーション コードに 0 を設定します。
- ファイルにオーナーが設定されている場合は、データ バッファー パラメーターにオーナー ネームを指定し、末尾にバイナリ 0 を付けます。
- データ バッファー長パラメーターに、バイナリ 0 を含めたオーナー ネームの長さを指定します。
- キー バッファー パラメーターに、開くファイルのパス名を入れます。埋め込みスペースの設定に応じて、パス名の終端はヌル(バイナリ ゼロ)にします。パス名は半角 255 文字までの範囲で指定できます。ヌル終端文字を含む完全修飾 UNC(Unified Naming Convention)パス名は、半角 255 文字までの範囲で指定できます。
- トランザクショナル インターフェイスは通常、ファイル名を完全修飾 UNC ファイル名に拡張します。たとえば、J:¥Data¥File.dat は ¥¥サーバー名¥共有名¥Data¥File.dat に変換されます。この拡張されたファイル名が、ヌル終端文字を含めて半角 255 文字までにならなければなりません。『Pervasive PSQL Programmer's Guide』の「データベース URI」 も参照してください。
- ただし、Btrieve の Open 要求がローカル エンジンに送られる場合は、MIF はローカルのドライブ文字をコンピューター名および共有名に置き換えません。ローカルで開く場合にもっと長い名前でも受け入れられたとしても、リモート クライアントではそのファイルを開けないことがあります。
- クライアントの設定オプション[スペースを含むファイル/ディレクトリ名]によって、埋め込みスペースを含むファイル名がサポートされます。デフォルトでは、この設定パラメーターはオンになっています。つまり、スペースはパスの一部と見なされます。この設定がオンの場合、ファイル名はヌル バイトで区切る必要があります。この設定がオフの場合、埋め込みスペースを含むファイル("
C:
¥
My Folder
¥
my file.mkd
" など)を使用することはできません。『Advanced Operations Guide』の長いファイル名と埋め込みスペースのサポートを参照してください。 - Pervasive PSQL クライアントでサポートするパス名の詳細については、『Getting Started with Pervasive PSQL』の Pervasive リクエスターでサポートするネットワーク パスの形式を参照してください。
- キー番号パラメーターに、表 24 に記載されているモード値のいずれかを指定します。
詳細
ここでは、サポートされているオープン モードについて説明します。
注意
データベース エンジンは、クライアントがアクセラレイティド モードを使用している間は、クライアントのトランザクション アトミシティ、トランザクション一貫性保守、およびアーカイブ ログの安全性を保証できません。この制約があるのは、ログからの復元が必要な場合に、完全な復元を行うために十分な情報がログに含まれていない可能性があるからです。なぜなら、ログは、1 つのデータ ファイル上で行った操作の部分的な記録でしかないからです。
たとえば、アクセラレイティド モードを使用して追加を実行中のクライアントと、ノーマル モードを使用して更新を実行中のクライアントが同じファイルへアクセス中にシステム障害が発生した場合、メモリ上のアクセラレイティドの追加操作はディスクに書き出されませんが、トランザクショナルな更新操作はトランザクション ログに書き込まれるため、データ ファイルにまだ存在していないレコードに対する更新がトランザクション ログに含まれる可能性があります。
この操作の組み合わせを含むアーカイブ ログをロール フォワードしようとすると、失敗します。
ファイルを開く際に、オープン モードによって、ローカル エンジンとリモート エンジンのどちらを使用するかをトランザクショナル インターフェイスに指示できます。キー番号パラメーターにオープン モードの値を指定します。
メモ
ローカル エンジンでファイルを開くように指定する場合は、ワークグループ エンジンでも、サーバー エンジンでも、Open オペレーションに何ら違いはありません。
表 24 オープン モード
説明
|
選択しない
|
ローカル エンジンで実行
|
リモート エンジンで実行
|
ノーマル
|
0
|
6
|
99
|
アクセラレイティド 特定のファイルでのパフォーマンスを向上するために、ファイルをアクセラレイティド モードで開くことができます(6.x トランザクショナル インターフェイスでもアクセラレイティド モードで開くことはできましたが、ノーマル モードで開いたものと解釈されました)。アクセラレイティド モードでファイルを開くと、トランザクショナル インターフェイスは、そのファイルに対するトランザクション ログを実行しません。上記の「注意」を参照してください。
|
-1
|
7
|
100
|
リードオンリー リードオンリー モードでファイルを開くと、ファイルは読み取ることしかできず、更新できなくなります。このモードを使うと、トランザクショナル インターフェイスでは自動的に回復できない破損データを含むファイルを開くことができます。ファイルのインデックスのデータが壊れている場合は、リードオンリー モードでファイルを開き、Step Next(24)オペレーションを使用することによって、レコードを取得できます。
|
-2
|
8
|
101
|
ベリファイ このモードは無視されます。トランザクショナル インターフェイスではこのモードを指定しても、ファイルはノーマル モードで開かれます。以前のバージョンのトランザクショナル インターフェイスでは、ベリファイ モードを指定すると、ディスクに書き込まれたデータが正しいかどうかが検証されました。
|
-3
|
適用外
|
適用外
|
エクスクルーシブ エクスクルーシブ モードはファイルに対する排他的なアクセスを可能にします。あるアプリケーションが排他的にアクセスしているファイルは、閉じるまで、ほかのアプリケーションから開くことができなくなります。
|
-4
|
10
|
103
|
開いているファイルの最大数について定められた制限はありません。同時に開くことができるファイルの数は、使用可能なメモリに応じて変わります。
ファイルは、トランザクショナル インターフェイスによって 1 回だけ開かれます。(トランザクショナル インターフェイスは、複数のクライアントが同時に 1 つのファイルを開いている状況や、単独のクライアントがファイルのポジション ブロックを複数持っている状況を認識し、処理します。)拡張ファイルを開くとき、トランザクショナル インターフェイスでは 1 つのハンドルが使用され、ベース ファイルとすべてのエクステンション ファイルが開かれます。
結果
Open オペレーションが正常に終了した場合、トランザクショナル インターフェイスでは目的のファイルにファイル ハンドルが割り当てられ、新しく開いたファイルの Open 呼び出しで渡したポジション ブロックが予約されて、そのファイルがアクセス可能な状態になります。
Open オペレーションが正常に実行されなかった場合は、トランザクショナル インターフェイスから次のステータス コードのいずれかが返されます。
2
|
アプリケーションで I/O エラーが発生しました。
|
11
|
指定されたファイル名は不正です。
|
12
|
トランザクショナル インターフェイスは指定されたファイルを見つけられません。
|
20
|
トランザクショナル インターフェイスまたは Btrieve リクエスターが非アクティブです。
|
46
|
要求したファイルへのアクセスは拒否されました。
|
84
|
レコードまたはページがロックされています。
|
85
|
ファイルはロックされています。
|
86
|
ファイル テーブルがいっぱいです。
|
87
|
ハンドル テーブルがいっぱいです。
|
88
|
アプリケーションでモードの不一致エラーが発生しました。
|
次の表には、ローカル クライアントで使用可能なオープン モードの組み合わせを示します。
表 25 ローカル クライアントのオープン モードの組み合わせ
ローカル クライアント 1 のオープン モード
|
ローカル クライアント 2 のオープン モード
|
結果
|
ノーマル
|
ノーマル
|
正常終了
|
|
リードオンリー
|
正常終了
|
|
エクスクルーシブ
|
ステータス コード 88
|
|
アクセラレイティド
|
正常終了
|
リードオンリー
|
ノーマル
|
正常終了
|
|
リードオンリー
|
正常終了
|
|
エクスクルーシブ
|
ステータス コード 88
|
|
アクセラレイティド
|
正常終了
|
エクスクルーシブ
|
ノーマル
|
ステータス コード 88
|
|
リードオンリー
|
ステータス コード 88
|
|
エクスクルーシブ
|
ステータス コード 88
|
|
アクセラレイティド
|
ステータス コード 88
|
アクセラレイティド
|
ノーマル
|
正常終了
|
|
リードオンリー
|
正常終了
|
|
エクスクルーシブ
|
ステータス コード 88
|
|
アクセラレイティド
|
正常終了
|
ポジショニング
Open オペレーションを実行しても、ポジショニングは確立しません。ただし、次の物理レコードがファイルの先頭の物理レコードになります。
 Login/Logout(78) |
 Reset(28) |
|