|
このチュートリアルでは、Btrieve データ ファイルがあり、そのレポートを作成するために ODBC アクセスを提供する必要があります。
これを行うには、その Btrieve ファイル用のテーブル定義を作成する必要があります。テーブル定義はデータベースの DDF ファイルに格納されます。ご存知のとおり、この Btrieve ファイル用のテーブル定義はないので最初から作成します。
このチュートリアルの目的は、テーブル定義のない Btrieve ファイルへリレーショナル アクセスを提供するために必要な手順を実践することです。このチュートリアルの目的を達成するためには、DDF Builder を使用して以下の作業を実行します。
ヒント
テーブル定義の作成手順を通して、DDF Builder を使用するための基本的な作業を学習します。このチュートリアルは、手順の中でその基本的な作業を実践するよう設計されているので、DDF Builder を使用するための一般的な作業についてよく理解することができます。
DDF Builder でテーブル定義の作成や変更作業を行うときは、そのデータの構造についてある程度の知識が必要です。このレコード長やインデックス情報などいくつかの情報は Btrieve ファイル自身に保存されます。しかし、列情報は Btrieve ファイルに保存されません。この列情報はソフトウェア ベンダーやアプリケーション開発者から提供される場合もあります。データを入念に調べてテーブル定義の作成や変更を試みることもできますが、データの構造について十分な知識を持っていない場合はこのユーティリティを使用しないようにしてください。
このチュートリアルの場合、データの構造はわかっています。このファイルの構造を見てみましょう。
CREATE_NEW.MKD という名前の Btrieve データ ファイルがあります。このファイルのレコード長は 110 バイトで 6 個のフィールドがあります。このフィールドは次のように定義されています。
フィールド
|
サイズ
|
データ型
|
桁数
|
小数位
|
ヌル
|
大小文字無視
|
インデックス
|
---|---|---|---|---|---|---|---|
ID
|
4
|
Integer
|
|
|
×
|
|
○
|
First Name
|
20
|
String
|
|
|
○
|
○
|
|
Last Name
|
20
|
String
|
|
|
×
|
○
|
|
DOB
|
4
|
Date
|
|
|
○
|
|
|
Address
|
50
|
String
|
|
|
○
|
○
|
|
Income
|
8
|
Currency
|
8
|
2
|
○
|
|
|
このファイルには、ID フィールドに設定された重複のないキー(一意のインデックス)があり、そのインデックスには indx_id という名前が付けられています。
データ構造について理解できたら、作業を開始することができます。DDF Builder を使用して空のデータベースを作成することから始めます。これは Btrieve ファイル用に定義する空の DDF のセットを提供します。
既存の Btrieve ファイル用に DDF を作成する前に、まずはデータベースを作成する必要があります。DDF Builder をまだ実行していない場合は[スタート]メニューからアクセスして起動します。
データベースを作成するには
新しいデータベースを作成するための[データベースの新規作成]ダイアログ ボックスが表示されます。
[データベースの新規作成]ダイアログは次のようになります。
ヒント
これらの手順でデータベースを作成すると、データ ソース名(DSN)も作成されます。チュートリアルの作業が終了したら、ここで作成された DSN とデータベースは削除してもかまいません。
データベースが作成されると、データ ソース エクスプローラーのデータベース ツリーにそのデータベースが新しいノードとして表示されます。
このデータベース ノードには、[データ パス]、[SQL テーブル]および[システム オブジェクト]フォルダーがあります。[データ パス]フォルダーには Btrieve ファイルの場所が含まれています。[SQL テーブル]フォルダーにはデータベースのリレーショナル テーブルが含まれ(この時点ではありません)、[システム オブジェクト]フォルダーはシステム辞書テーブル用および、この場合は空のデータ辞書ファイル用のフォルダーになります。
これらの要素を使用して PSQL データベースを作成することが、Btrieve ファイル用のテーブル定義を作成する最初の手順です。先程作成されたデータベースには辞書ファイル(DDF)がありますが、現時点でこれらのファイルには DDF 自身の構造用の定義しか含まれていません。DDF Builder で Btrieve ファイルを開いたら、このデータベース用に作成された DDF へテーブル定義を追加し、その Btrieve ファイルのデータにアクセスできるようにします。
このデータベースには SQL テーブルが含まれていないので注意してください。含まれているのはこのチュートリアルで使用する CREATE_NEW.MKD Btrieve ファイルのみです。これは定義済みのユーザー テーブルがないからです。データ ファイルとは別に、空の DDF が[システム オブジェクト]フォルダーに置かれています。テーブル定義を作成すると、そのテーブル定義に一致する SQL テーブルも作成されます。この SQL テーブルはテーブル定義にアクセスします。引き続き、DDF Builder で Btrieve ファイルを開く作業に進みます。
Btrieve ファイルと同じ場所に DDF ファイルを作成したら、DDF Builder でそのファイルを開いてデータ構造がどのように解読されるかを見ます。
Btrieve ファイルを開くには
データ ソース エクスプローラーはデータ パスの一覧を表示して、mkd ファイルがインストールされたディレクトリを示します。これはデータベースを作成した場所と同じディレクトリです。データ ソース エクスプローラーで TUTORIAL1 データベース ディレクトリの構造は次のようになります。
テーブル定義を作成する場合、DDF Builder では新しいテーブル名とこのテーブル定義のセットを関連付けるための[テーブル定義の新規作成]ダイアログを表示します。このテーブルはトランザクショナル ファイルに対応するリレーショナル テーブルと考えてください。テーブル定義の作成が終了すると、SQL テーブルは元の Btrieve ファイルと同じ構造を正確に反映しているはずです。
テーブルの名前を指定して[OK]をクリックすると、DDF Builder では Btrieve ファイルを開くことができるようにするために、そのファイルの分析を開始します。 DDF Builder ではファイル内に認識できるキーやインデックスがあるかを判断し、その結果をテーブル定義エディター内に表示します。テーブル定義エディターの表示は次のようになります。
ファイルを開くことができたら、DDF Builder の調査結果をより詳しく見ていきます。
DDF Builder ではファイルの一般的な統計情報と既知のキーまたはインデックスを基にデータを分析します。DDF Builder による分析では、このファイルのレコードの先頭 4 バイトはキーであり、そのキーは Btrieve データ型で Integer であることを検出しています。このキーはテーブル定義エディターの先頭列でキー アイコンとして示されています。
レコード内のキー以外の残りの部分は DDF Builder で解読できないため 1 つのグループにまとめられ、テーブル定義エディターで疑問符アイコンとして示し Btrieve 型には不明(Unknown)が割り当てられます。
Btrieve ファイル用のテーブル定義を作成するにあたり、DDF Builder で検出された不明なフィールドを必要に応じてさまざまなフィールドへ分割するという作業が生じます。このまま先に進めば、各フィールドを詳細に定義します。
レコード フィールドの定義を始める前に、テーブル定義エディターでヌルがどのように扱われるかを理解しておいてください。
メモ
このチュートリアルでは真のヌルを使用しますが、旧バージョンの Pervasive.SQL と Scalable SQL では真のヌルをサポートしていなかったことに注意してください。サポートしていたのはレガシー ヌルのみです。真のヌルは Pervasive.SQL 2000 で初めて導入されました。Pervasive.SQL 2000 より前に作成されたファイルで作業する場合、ヌルに関する次のセクションは省いても構いません。
このチュートリアルでレコード フィールドを定義する場合、フィールドにヌル値を許可するかどうかについて留意することが重要です。なぜなら、レコードの一部分でヌル値を許可する場合、1 バイトが余分にフィールドへ追加されるからです。Btrieve ファイルでは、ヌル値が許可されるレコード部分はヌル インジケーター バイトによって指定されます。ヌル インジケーター バイトは、テーブル定義エディターの未加工データ ビューでフィールドまたは列の直前のバイトに該当します。[ヌル]チェック ボックスが選択されると、ヌル インジケーター バイトがアクティブになり、そのヌル インジケーター バイト分を確保するためフィールドのサイズは自動的に 1 バイト削減されます。
サイズが 50 バイトでヌル値を許可するフィールドを作成するとします。ヌル インジケーター バイトを確保するためにはフィールドのサイズを 51 バイトとして選択します。フィールドにヌル値を許可すると、そのサイズは自動的に 50 バイトに削減されます。
この情報はレコードのフィールドを定義する際に役立ちます。
メモ
DDF Builder でヌルを扱う作業の詳細については、DDF Builder におけるレガシー ヌルおよび DDF Builder における真のヌルを参照してください。
既にご覧になったように、Btrieve ファイルを開くと DDF Builder では 4 バイトのインデックスとそれ以外を 106 バイトの不明なフィールドと判断します。不明なフィールドをレコード フィールドに定義します。
レコード フィールドを定義するには
DDF Builder は先頭フィールドのほとんどの属性を判断しましたが、フィールド名は判断できませんでした。このため、まずは先頭フィールドに名前を付けてください。
これで不明なデータを解析して定義する準備ができました。
次のフィールドはヌル値を許可するよう定義します。次の手順では未加工データ ビューでデータを選択し、そのデータからヌル値を許可する列を作成する方法について説明します。
ヒント
オフセット 4 を特定するには、未加工データ ビューで先頭レコードのすぐ上にある疑問符マークを見つけるか、[オフセット]インジケーターの値が 4 になる場所にカーソルを置きます。
ヒント
列を 1 つ作成すると、未加工データ ビューとグリッド データ ビューのどちらにも、レコードの残りのバイトをまとめた新しい列が自動的に作成されます。
Btrieve 型を設定してそのフィールドが定義されると、それ以降、グリッド データ ビューには不明なフィールド インジケーターが表示されなくなるので注意してください。
引き続き、グリッド データ ビュー内で不明な行を複数の列に分割して、ファイル内の不明なフィールドを定義します。
列を分割する場合、分割される 2 つの列のサイズはそれぞれ同等か、ほぼ同等になるようにします。これは、85 バイトの列を 2 つの列に分割した場合、一方の列は 42 バイトでもう一方の列は 43バイトになるということです。
サイズを 42 から 20 に変更すると、DDF Builder では "フィールド3" 行に余分の 22 バイトを追加します。
SQL プレビュー列には定義されたデータが表示されていることがわかります。ここでは、テーブル定義に基づき DDF Builder がデータがどのように解釈したかをプレビューしています。
フィールド3 を定義します。このフィールドにはヌル値を許可します。
テーブル定義は次のようになります。
サイズを 4 に変更すると、DDF Builder では残りのバイト数を次のフィールドに含めます。
この時点で、60 バイトの不明なフィールドが残っています。データ構造ではさらに 2 つのフィールドの定義が必要であることを示しています。未加工データ ビューを使用して、その列を作成します。
ヒント
オフセット 50 を特定するには、未加工データ ビューで先頭レコードのすぐ上にある疑問符マークを見つけるか、[オフセット]インジケーターの値が 50 になる場所にカーソルを置きます。
ヌル値を許可しない列を作成しましたが、本当に必要なのはヌル値を許可する列です。グリッド データ ビューを使用して、この列をヌル値を許可する列に変更します。
[ヌル]チェックボックスをチェックすると、ヌル バイト インジケーターを確保するのでサイズが 50 バイトに減少します。
テーブル定義は次のようになります。
最後に、ファイルの最後のフィールドを定義します。
最初に[ヌル]チェックボックスを選択することによって、サイズは自動的に修正されます。最初にサイズを 8 に変更すると、DDF Builder では最後に残った 1 バイトから不明な列を新たに作成してしまいます。
これで、ファイルのフィールドに対する定義が終了しました。テーブル定義は次のようになります。
作業を進める前に、テーブル定義を保存しておいてください。
これで DDF にテーブル定義を作成することができました。作業を保存すると、データ ソース エクスプローラーで[SQL テーブル]ノードの下にその SQL テーブルが作成されます。
テーブル定義を作成したので、インデックスを見てみましょう。
DDF Builder がファイルで検出したインデックスを見てみましょう。
DDF Builder ではファイルに作成されているインデックスを検出することができますが、Btrieve はインデックス名を使用しないため、DDF Builder でインデックスに関連付ける名前はありません。
[インデックス]ページは主に読み取り専用ですが、インデックス名については変更可能です。
DDF Builder でインデックスに対して行うことができるのはこれだけです。
テーブル定義を終えたらそのデータを必ずプレビューするようにしてください。
次に、作成したテーブル定義用のファイルにあるデータを再度確認します。
おめでとうございます。これでチュートリアル 1 は完了し、リレーショナル アクセスを使用して Btrieve ファイルのデータにアクセスできる DDF のセットを持つことができました。
ヒント
このチュートリアルではデータベースと DSN を新規作成しました。システムからこれらを削除する必要がある場合は、この時点で削除しても構いません。
|