DDF Builder チュートリアル
 
このページをシェアする                  
DDF Builder チュートリアル
DDF Builder を使用するためのサンプル ガイド
以下のトピックでは DDF Builder を使用するための学習資料を提供します。
DDF Builder チュートリアルの使用
チュートリアル 1 - DDF Builder でテーブル定義を作成する
チュートリアル 2 - DDF Builder でテーブル定義–変更する
レッスン 1 - v3.00 の DDF を使った作業
レッスン 2 - v6.x より前のファイル形式での作業
レッスン 3 - 不正なデータ型とサイズ
レッスン 4 – 列の定義の重複
レッスン 5 - ファイル/フィールド フラグの不一致
レッスン 6 – インデックスの不一致
レッスン 7 – 可変長レコードの不一致
レッスン 8 – レコード長の不一致
DDF Builder チュートリアルの使用
この章では、DDF Builder を使用した 2 つのチュートリアルを提供します。各チュートリアルでは、データの構造に関する基本的な情報、ファイルを使用したサンプル シナリオ、チュートリアルの目的、および各演習の目的を達成するために必要となる一般的な手順を提供します。
メモ:DDF Builder でテーブル定義を作成または変更するには、データの構造についてある程度の知識が必要です。Btrieve ファイルの列の定義、またフィールドのオフセットやサイズを知っていると役に立ちます。DDF Builder では列定義の構造を導こうと試みますが、どの程度それを提供できるかについては限りがあります。
チュートリアル 1 の概要
最初のチュートリアルでは、Btrieve ファイルはあるが、リレーショナル アクセスを可能にするために必要なテーブル定義がないという状況を解決します。Btrieve ファイル用の DDF がないため、まずは DDF を作成しなければいけません。このチュートリアルでは、空の DDF を使用してデータベースを新規作成し、Btrieve ファイル用のテーブル定義をその DDF に追加する手順を示します。
また、このチュートリアルの実行を通して、DDF Builder インターフェイスで作業するための基本的な知識も提供します。このチュートリアルで初めて DDF Builder を使用する場合は、第 2DDF Builder の使用をもう一度読んで、インターフェイスやコンポーネントが置かれている場所についてよく理解しておくとよいでしょう。
チュートリアル 2 の概要
2 番目のチュートリアルでは、既存のテーブル定義に古い定義あるいは不正な定義情報が含まれているため、そのテーブル定義を修正するという少し複雑な状況を解決します。このチュートリアルでは、既存のテーブル定義を見直して Btrieve ファイルのセットに関連付けられている DDF に対して必要な変更を行う手順を示します。
この 2 番目のチュートリアルはさまざまなレッスンで構成されています。各レッスンでは DDF Builder を使用して DDF を変更しようとする場合に発生する可能性がある問題に焦点を当てています。DDF Builder で自動的に解決される問題もありますが、手動で変更を行う必要がある問題もあります。
事前の確認
チュートリアルを開始する前に行うことがいくつかあります。このセクションでは、本章のチュートリアルを開始する前に行っておく必要がある事項を確認します。
ファイルのバックアップ
DDF Builder でテーブル定義を作成したり変更することによって、データベースの構造が変更されます。用心のために、作業対象のファイルを必ずバックアップしておいてください。この作業対象ファイルにはデータ ファイルと既存の辞書ファイルの両方が含まれます。
DDF Builder では Btrieve ファイルを開きますが、DDF への変更を行うだけで既存の Btrieve ファイルへの変更は行いません。しかし、すべてのファイルをバックアップしておくことや、コピーしたファイルで作業することをお勧めします。DDF の部分的な変更によって既存のテーブル定義が破損してしまい、作業中の定義が壊れて使用できなくなることもあります。
メモ:リレーショナル アクセスを提供する既存の Btrieve ファイルおよび DDF を変更するつもりであれば、DDF Builder を使用する必要はありません。Zen Control Center を使用すれば、DDF や Btrieve ファイルを変更することができます。

DDF Builder では IN DICTIONARY 呼び出しを使用してテーブル定義を DDF へ書き込みます。DDF Builder を使用した場合は、Btrieve ファイルに書き込みが行われることはありません。
データ ファイルをバックアップするか、作業対象ファイルのコピーを作成したら、チュートリアルで使用されるファイルの所在を確認する準備が整います。
チュートリアル ファイルの所在確認
DDF Builder のインストール時には、この章に含まれているチュートリアルを使用するためのフォルダーやファイルがシステム上に作成されます。このチュートリアル ファイルはデフォルトの Application Data ディレクトリで以下の場所にインストールされます。
<Application Data>\DDFBuilder
DDF Builder アプリケーション ファイル
<Application Data>\DDFBuilder\tutorials\tutorial1
チュートリアル 1 のファイル
<Application Data>\DDFBuilder\tutorials\tutorial2\v3
チュートリアル 2 のファイル(レッスン 1 とレッスン 2)
<Application Data>\DDFBuilder\tutorials\tutorial2
チュートリアル 2 のファイル(レッスン 3 から 8)
メモ:Zen のデフォルトのインストール ディレクトリの詳細については、『Getting Started with Zen』のファイルはどこにインストールされますか?を参照してください。
データ ソース名(DSN)の作成
DDF Builder 内でチュートリアルのデータベースにアクセスするには、各データベースに対して関連付けられたデータ ソース名(DSN)が作成されていること確かめておく必要があります。
チュートリアル 1 では、データベースを作成する時点で DSN を作成します。チュートリアル 1 は Btrieve ファイルしかない状態から始めるため、データベースも、DDF、DSN もすべて 1 から作成する必要があります。
チュートルアル 2 では、DDF Builder インターフェイス内でファイルとフォルダーを見るために 2 つの DSN を作成する必要があります。一方の DSN はチュートリアル 2 のデータベースを指し、もう一方の DSN は Tutorial2 フォルダーにある V3 データベースを指します。
次の表では ODBC データ ソース アドミニストレーターで Tutorial 2 および V3 データベースの DSN を作成するためのオプションを示します。
データ ソース名
説明
データベース名
Tutorial2
ODBC アクセス
Tutorial2
V3
ODBC アクセス
V3
ヒント: ODBC データ ソース アドミニストレーターを使って DSN を作成する必要がある場合は、『Zen User's Guide』を参考にしてください。
ファイルをバックアップし、チュートリアルのファイルの所在を確認し、DSN を作成したら、チュートリアル 1 を開始する準備が整いました。
チュートリアル 1 - DDF Builder でテーブル定義を作成する
シナリオ
このチュートリアルでは、Btrieve データ ファイルがあり、そのレポートを作成するために ODBC アクセスを提供する必要があります。
これを行うには、その Btrieve ファイル用のテーブル定義を作成する必要があります。テーブル定義はデータベースの DDF ファイルに格納されます。ご存知のとおり、この Btrieve ファイル用のテーブル定義はないので最初から作成します。
目的
このチュートリアルの目的は、テーブル定義のない Btrieve ファイルへリレーショナル アクセスを提供するために必要な手順を実践することです。このチュートリアルの目的を達成するためには、DDF Builder を使用して以下の作業を実行します。
*Zen データベースを作成する
*既存の Btrieve ファイルを開く
*DDF Builder による調査結果を検証する
*レコード フィールドを定義する
*テーブル定義を保存する
*インデックス情報を検証する
*定義したデータをプレビューする
ヒント: テーブル定義の作成手順を通して、DDF Builder を使用するための基本的な作業を学習します。このチュートリアルは、手順の中でその基本的な作業を実践するよう設計されているので、DDF Builder を使用するための一般的な作業についてよく理解することができます。
必要な知識
DDF Builder でテーブル定義の作成や変更作業を行うときは、そのデータの構造についてある程度の知識が必要です。このレコード長やインデックス情報などいくつかの情報は Btrieve ファイル自身に保存されます。しかし、列情報は Btrieve ファイルに保存されません。この列情報はソフトウェア ベンダーやアプリケーション開発者から提供される場合もあります。データを入念に調べてテーブル定義の作成や変更を試みることもできますが、データの構造について十分な知識を持っていない場合はこのユーティリティを使用しないようにしてください。
このチュートリアルの場合、データの構造はわかっています。このファイルの構造を見てみましょう。
CREATE_NEW.MKD という名前の Btrieve データ ファイルがあります。このファイルのレコード長は 110 バイトで 6 個のフィールドがあります。このフィールドは次のように定義されています。
表 8 作成する DDF のデータ構造
フィールド
サイズ
データ型
桁数
小数位
ヌル
大小文字無視
インデックス
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 のセットを提供します。
Zen データベースを作成する
既存の Btrieve ファイル用に DDF を作成する前に、まずはデータベースを作成する必要があります。DDF Builder をまだ実行していない場合は起動します。DDF Builder の起動を参照してください。
データベースを作成するには
1 データ ソース エクスプローラーで、データベースを作成するマシンのツリーを展開します。これは DDF Builder がインストールされている同じマシンです。
2 データベース]アイコンを右クリックし、次に[データベースの追加]をクリックします。
新しいデータベースを作成するための[データベースの新規作成]ダイアログ ボックスが開きます。
3 [データベースの新規作成]ウィザードで、以下のパラメーターを指定します。
データベース名:Tutorial1
場所:
<Application Data>\DDFBuilder\tutorials\tutorial1\
バウンド:チェックしない
辞書ファイルの作成:チェックする
関係整合性の設定:チェックする
長いメタデータ(V2 メタデータ):チェックする
データベース コード ページ:サーバーのデフォルト
32 ビット エンジン DSN の作成:チェックする
[データベースの新規作成]ダイアログは次のようになります。
ヒント: これらの手順でデータベースを作成すると、データ ソース名(DSN)も作成されます。チュートリアルの作業が終了したら、ここで作成された DSN とデータベースは削除してもかまいません。
4 完了]をクリックすると、指定した場所にデータベースと空の DDF ファイルが作成されます。
データベースが作成されると、データ ソース エクスプローラーのデータベース ツリーにそのデータベースが新しいノードとして現れます。
このデータベース ノードには、[データ パス]、[SQL テーブル]および[システム オブジェクト]フォルダーがあります。[データ パス]フォルダーには Btrieve ファイルの場所が含まれています。[SQL テーブル]フォルダーにはデータベースのリレーショナル テーブルが含まれ(この時点ではありません)、[システム オブジェクト]フォルダーはシステム辞書テーブル用および、この場合は空のデータ辞書ファイル用のフォルダーになります。
これらの要素を使用して Zen データベースを作成することが、Btrieve ファイル用のテーブル定義を作成する最初の手順です。先程作成されたデータベースには辞書ファイル(DDF)がありますが、現時点でこれらのファイルには DDF 自身の構造用の定義しか含まれていません。DDF Builder で Btrieve ファイルを開いたら、このデータベース用に作成された DDF へテーブル定義を追加し、その Btrieve ファイルのデータにアクセスできるようにします。
このデータベースには SQL テーブルが含まれていないので注意してください。含まれているのはこのチュートリアルで使用する CREATE_NEW.MKD Btrieve ファイルのみです。これは定義済みのユーザー テーブルがないからです。データ ファイルとは別に、空の DDF が[システム オブジェクト]フォルダーに置かれています。テーブル定義を作成すると、そのテーブル定義に一致する SQL テーブルも作成されます。この SQL テーブルはテーブル定義にアクセスします。引き続き、DDF Builder で Btrieve ファイルを開く作業に進みます。
既存の Btrieve ファイルを開く
Btrieve ファイルと同じ場所に DDF ファイルを作成したら、DDF Builder でそのファイルを開いてデータ構造がどのように解読されるかを見ます。
Btrieve ファイルを開くには
1 DDF Builder で、ローカル マシンを選択し、作成したデータベースを選択します。
データ ソース エクスプローラーはデータ パスの一覧を表示して、mkd ファイルがインストールされたディレクトリを示します。これはデータベースを作成した場所と同じディレクトリです。データ ソース エクスプローラーで TUTORIAL1 データベース ディレクトリの構造は次のようになります。
2 ファイルが含まれる CREATE_NEW.MKD フォルダーを右クリックし、[テーブル定義の作成]をクリックします。
テーブル定義を作成する場合、DDF Builder では新しいテーブル名とこのテーブル定義のセットを関連付けるための[テーブル定義の新規作成]ダイアログを表示します。このテーブルはトランザクショナル ファイルに対応するリレーショナル テーブルと考えてください。テーブル定義の作成が終了すると、SQL テーブルは元の Btrieve ファイルと同じ構造を正確に反映しているはずです。
3 テーブル名としてデフォルトの「CREATE_NEW」を使用し、[OK]をクリックします。
テーブルの名前を指定して[OK]をクリックすると、DDF Builder では Btrieve ファイルを開くことができるようにするために、そのファイルの分析を開始します。DDF Builder ではファイル内に認識できるキーやインデックスがあるかを判断し、その結果をテーブル定義エディター内に表示します。テーブル定義エディターの表示は次のようになります。
ファイルを開くことができたら、DDF Builder の調査結果をより詳しく見ていきます。
DDF Builder による調査結果を検証する
DDF Builder ではファイルの一般的な統計情報と既知のキーまたはインデックスを基にデータを分析します。DDF Builder による分析では、このファイルのレコードの先頭 4 バイトはキーであり、そのキーは Btrieve データ型で Integer であることを検出しています。このキーはテーブル定義エディターの先頭列でキー アイコンとして示されています。
レコード内のキー以外の残りの部分は DDF Builder で解読できないため 1 つのグループにまとめられ、テーブル定義エディターで疑問符アイコンとして示し Btrieve 型には不明(Unknown)が割り当てられます。
Btrieve ファイル用のテーブル定義を作成するにあたり、DDF Builder で検出された不明なフィールドを必要に応じてさまざまなフィールドへ分割するという作業が生じます。このまま先に進めば、各フィールドを詳細に定義します。
レコード フィールドの定義を始める前に、テーブル定義エディターでヌルがどのように扱われるかを理解しておいてください。
メモ:このチュートリアルでは真のヌルを使用しますが、かなり古いバージョンの Zen では真のヌルをサポートしていなかったことに注意してください。サポートしていたのはレガシー ヌルのみです。真のヌルは 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 は先頭フィールドのほとんどの属性を判断しましたが、フィールド名は判断できませんでした。このため、まずは先頭フィールドに名前を付けてください。
フィールドに名前を付ける
1 グリッド データ ビューで、"フィールド0" の行を選択し、以下の情報を反映するために必要な値を入力します。
フィールド:ID
ヌル:チェックしない
位置:0
サイズ:4
Btrieve 型:Integer
SQL 型:INTEGER
桁数:0
小数位:0
大小文字無視:チェックしない
DDF Builder ではこの行のほとんどの属性を判断しているので、変更が必要な値のみ入力してください。この行の値をすべて確認してください。
グリッド データ ビューの画面では、"ID" という名前を付けたキー行と DDF Builder で検出された "フィールド1" という 2 つの行が示されます。
これで不明なデータを解析して定義する準備ができました。
次のフィールドはヌル値を許可するよう定義します。次の手順では未加工データ ビューでデータを選択し、そのデータからヌル値を許可する列を作成する方法について説明します。
未加工データ ビューでヌル値を許可する列を作成する
2 未加工データ ビューでオフセット 4 から 21 バイト分のデータを選択します。
ヒント: オフセット 4 を特定するには、未加工データ ビューで先頭レコードのすぐ上にある疑問符マークを見つけるか、[オフセット]インジケーターの値が 4 になる場所にカーソルを置きます。
3 右クリックして[ヌル値を許可する列の作成]を選択します。
ヒント: 列を 1 つ作成すると、未加工データ ビューとグリッド データ ビューのどちらにも、レコードの残りのバイトをまとめた新しい列が自動的に作成されます。
21 バイト分を選択したはずですが、グリッド データ ビューでそのサイズが 20 バイトと表示されることに注目してください。これは前に説明したヌル インジケーターによるものです。ヌル インジケーター バイトは未加工データ ビューに § 記号で示され、追加バイトとして割り当てられます。
エディターには、4 バイトの整数値(ID)、前の手順で作成したヌル値を許可する列(フィールド1)、そして新たに残りのバイトをまとめた不明なフィールド(フィールド2)という 3 つのフィールドが表示されます。
作業を進める前に、ヌル値を許可する列の定義を済ませてください。
4 グリッド データ ビューで "フィールド1" の行を選択します。
5 以下の情報を反映するために必要な値を入力します。
フィールド:FirstName
ヌル:チェックする
位置:5
サイズ:20
Btrieve 型:String
SQL 型:CHAR(20)
桁数:0
小数位:0
大小文字無視:チェックする
ヒント: 未加工データ ビューで選択したバイト数と、この列をヌル値を許可する列として作成していることから、サイズとヌルの選択はあらかじめ決定しています。また、このサイズでは列に対して選択できるデータ型が限定されます。
Btrieve 型を設定してそのフィールドが定義されると、それ以降、グリッド データ ビューには不明なフィールド インジケーターが表示されなくなるので注意してください。
引き続き、グリッド データ ビュー内で不明な行を複数の列に分割して、ファイル内の不明なフィールドを定義します。
グリッド データ ビューで列を分割する
6 グリッド データ ビューで " フィールド2" の行を選択します。
7 右クリックして[列の分割]を選択します。
列を分割する場合、分割される 2 つの列のサイズはそれぞれ同等か、ほぼ同等になるようにします。これは、85 バイトの列を 2 つの列に分割した場合、一方の列は 42 バイトでもう一方の列は 43 バイトになるということです。
8 "フィールド2" の行を選択します。
9 以下の情報を反映するために必要な値を入力します。
フィールド:LastName
ヌル:チェックしない
位置:25
サイズ:20
Btrieve 型:String
SQL 型:CHAR(20)
桁数:0
小数位:0
大小文字無視:チェックする
サイズを 42 から 20 に変更すると、DDF Builder では "フィールド3" 行に余分の 22 バイトを追加します。
SQL プレビュー列には定義されたデータが表示されていることがわかります。ここでは、テーブル定義に基づき DDF Builder がデータがどのように解釈したかをプレビューしています。
10 "フィールド3" の行を右クリックして[列の分割]を選択し、この行を分割します。
この列を分割すると、フィールド3 は 32 バイトに変更され、33 バイトのフィールド4 が作成されます。
フィールド3 を定義します。このフィールドにはヌル値を許可します。
11 ヌル]チェック ボックスを選択して、フィールドの先頭をヌル インジケーター バイトで予約します。
[ヌル]チェックボックスを選択すると、自動的にサイズが 31 に減少するので注意してください。
12 "フィールド3" の行を選択します。
13 以下の情報を反映するために必要な値を入力します。
フィールド:DOB
ヌル:チェックする
位置:46
サイズ:4
Btrieve 型:Date
SQL 型:Date
桁数:0
小数位:0
大小文字無視:チェックしない
テーブル定義は次のようになります。
サイズを 4 に変更すると、DDF Builder では残りのバイト数を次のフィールドに含めます。
この時点で、60 バイトの不明なフィールドが残っています。データ構造ではさらに 2 つのフィールドの定義が必要であることを示しています。未加工データ ビューを使用して、その列を作成します。
未加工データ ビューから列を作成する
14 未加工データ ビューでオフセット 50 から 51 バイト分のデータを選択します。
ヒント: オフセット 50 を特定するには、未加工データ ビューで先頭レコードのすぐ上にある疑問符マークを見つけるか、[オフセット]インジケーターの値が 50 になる場所にカーソルを置きます。
15 右クリックして[列の作成]を選択します。
ヌル値を許可しない列を作成しましたが、本当に必要なのはヌル値を許可する列です。グリッド データ ビューを使用して、この列をヌル値を許可する列に変更します。
グリッド データ ビューでヌル値不可の列をヌル値を許可する列に変更する
16 "フィールド4" の行を選択して、[ヌル]チェックボックスを選択します。
[ヌル]チェックボックスをチェックすると、ヌル バイト インジケーターを確保するのでサイズが 50 バイトに減少します。
17 この他、以下のフィールド情報を反映するために必要な値を入力します。
フィールド:Address
ヌル:チェックする
位置:51
サイズ:50
Btrieve 型:String
SQL 型:CHAR(50)
大小文字無視:チェックする
テーブル定義は次のようになります。
最後に、ファイルの最後のフィールドを定義します。
18 グリッド データ ビューで "フィールド5" の行を選択し、以下の変更をこの順番で行います。
ヌル:チェックする
フィールド:Income
Btrieve 型:Currency
最初に[ヌル]チェックボックスを選択することによって、サイズは自動的に修正されます。最初にサイズを 8 に変更すると、DDF Builder では最後に残った 1 バイトから不明な列を新たに作成してしまいます。
これで、ファイルのフィールドに対する定義が終了しました。テーブル定義は次のようになります。
作業を進める前に、テーブル定義を保存しておいてください。
19 ファイル]>[保管]または、ツールバーの[保存]アイコンをクリックして変更を保存します。
これで DDF にテーブル定義を作成することができました。作業を保存すると、データ ソース エクスプローラーで[SQL テーブル]ノードの下にその SQL テーブルが作成されます。
テーブル定義を作成したので、インデックスを見てみましょう。
インデックス情報を見直す
DDF Builder がファイルで検出したインデックスを見てみましょう。
1 テーブル定義エディターで[インデックス]タブをクリックします。
DDF Builder ではファイルに作成されているインデックスを検出することができますが、Btrieve はインデックス名を使用しないため、DDF Builder でインデックスに関連付ける名前はありません。
[インデックス]ページは主に読み取り専用ですが、インデックス名については変更可能です。
インデックスの名前を付ける
2 [インデックス]列の "インデックス0" エントリをダブルクリックして選択します。
3 データ構造から、インデックス名として「indx_id」と入力します。
4 作業を進める前に、インデックスの変更を保存しておいてください。[ファイル]>[保管]をクリックして保存します。
DDF Builder でインデックスに対して行うことができるのはこれだけです。
テーブル定義を終えたらそのデータを必ずプレビューするようにしてください。
定義したデータをプレビューする
次に、作成したテーブル定義用のファイルにあるデータを再度確認します。
1 DDF Builder が起動していれば、テーブル定義エディターで[プレビュー]タブをクリックします。
[プレビュー]ページは次のようになっているはずです。
[プレビュー]ページでは、作成したテーブル定義を使用して書式設定されたファイルのデータを見ることができます。見てわかるように、すべてのデータが列名やデータ型に応じて適正に表示されています。
このページの下部にあるボタンを使用すると、データを移動して全レコードを検証することができます。場合によっては予期しない書式のデータが見つかり、テーブル定義を完成させるために対処する必要があるかもしれません。
予測どおりに表示されていないデータが見つかった場合は、次のセクションのチュートリアル 2 - DDF Builder でテーブル定義–変更するを参照してください。
既に保存済みのテーブル定義に対して変更を行う場合、DDF Builder を閉じる前には作業を必ず保存してください。
終わりに
おめでとうございます。これでチュートリアル 1 は完了し、リレーショナル アクセスを使用して Btrieve ファイルのデータにアクセスできる DDF のセットを持つことができました。
次のチュートリアルでは Btrieve ファイル用に作成されている DDF のセットに対する変更に取り組みます。また、DDF Builder で自動的に検出される DDF に伴ういくつかの問題についても取り上げます。
ヒント: このチュートリアルではデータベースと DSN を新規作成しました。システムからこれらを削除する必要がある場合は、この時点で削除してもかまいません。
チュートリアル 2 - DDF Builder でテーブル定義–変更する
古い DDF または不正な DDF を処理する場合にはさまざまなシナリオが発生するので、このチュートリアルではそれぞれのシナリオについて余すところなく取り上げています。そのため、このチュートリアルはさまざまなレッスンで構成され、Btrieve ファイルや既存のテーブル定義で作業するときに発生する可能性のある特定の状況をレッスンごとに詳しく述べています。各レッスンは、混乱を招かないよう 1 つの問題に専念して解決できるよう設計されています。
このチュートリアルは、処理しやすい単位で分割した課題をレッスンごとに取り組むことができるよう整理されています。また、このチュートリアルはトラブルシューティング調査として参照し、発生する可能性がある状況を見つけるということにも利用できます。レッスンの一覧から、探している状況について取り上げているレッスンに進み、有効な解決策を調べることができます。
シナリオ
使用可能な DDF を持つ Btrieve データ ファイルの一群があります。しかし、その DDF のテーブル定義は古いもので変更する必要があります。これはベンダーから古いファイルを受け取った、あるいはアプリケーションが変更されても DDF が適切に更新されていなかったという状況が考えられます。
目的
このチュートリアルの目的は、すべての Btrieve ファイルと既存のテーブル定義を開くことです。DDF Builder の調査結果を検証して必要であれば変更を行い、DDF Builder でそのテーブル定義を保存します。このテーブル定義はデータベース スキーマをミラー化するので、Btrieve ファイルのデータを厳密に表示できます。
このチュートリアルの各レッスン内容は次のとおりです。
レッスン 1 - v3.00 の DDF を使った作業
レッスン 2 - v6.x より前のファイル形式での作業
レッスン 3 - 不正なデータ型とサイズ
レッスン 4 – 列の定義の重複
レッスン 5 - ファイル/フィールド フラグの不一致
レッスン 6 – インデックスの不一致
レッスン 7 – 可変長レコードの不一致
レッスン 8 – レコード長の不一致
レッスン 1 - v3.00 の DDF を使った作業
シナリオ
このレッスンでは、既存のテーブル定義セットを持つ 1 つのデータベースがあります。このテーブル定義はかなり古いバージョンの Zen で作成されたもので、今回リリースされた DDF Builder でサポートされる Pervasive.SQL 2000 とはもう互換性がありません。
注意: DDF Builder ではバージョン 4.xx の DDF をサポートしますが、Scalable SQL バージョン 4.xx より前に作成された DDF はサポートしません。
目的
このレッスンの目的は、DDF Builder でその DDF を開くことです。このチュートリアルでは、DDF Builder でこれらのファイルがどのように処理されるかを説明し、またそのファイルを DDF Builder と互換性を持つファイルへ変換できるようにする解決策を提供します。
必要な知識
このレッスンで使用するファイルは V3 という名前のフォルダーにあります。デフォルトのインストール先にインストールしている場合、このフォルダーは次の場所にあります。
<Application Data>\DDFBuilder\tutorials\tutorial2\v3
作業を続ける前に、このデータベース用の DSN を作成する必要があります。
メモ:DSN の作成について情報が必要な場合は、データ ソース名(DSN)の作成を参照してください。
Btrieve ファイルを開く
DDF Builder をまだ実行していない場合は起動します。
1 DDF Builder のデータ ソース エクスプローラーで、[データベース]ノードを展開して使用可能データベースをすべて表示します。
2 一覧から V3 データベースを見つけます。
3 V3 データベース アイコンをダブルクリックします。
次のメッセージが表示されます。
4 OK]をクリックしてこのメッセージ ウィンドウを閉じます。
本来、これらのファイルは、現在ではサポートされていないバージョンの製品で作成されているため開くことができません。
警告メッセージを理解する
DDF Builder では Scalable SQL v3.00 のデータ辞書ファイルを開くことができません。これはその時点(Scalable SQL 3.01)で使用されていたフォーマットが現在サポートされていないからです。
ヒント: DDF Builder は PSQL v9 以上のバージョンでサポートされます。Scalable SQL v4.00 以上で作成された DDF は Btrieve データ ファイル v6.x 以上と一緒にサポートされます。
ファイルを変換する方法
古い DDF がある場合はそれらを新しいフォーマットに変換する必要があります。以下の手順を使用します。
1 既存の古いデータベースをバックアップするため、データ ファイルと DDF を別の保存場所にコピーします。
2 Zen Control Center(ZenCC)を使用して古いデータベースの全テーブルのテーブル スキーマをエクスポートします。『Zen User's Guide』のデータベース スキーマをエクスポートするにはを参照してください。["IN DICTIONARY" 句を CREATE ステートメントに追加する]エクスポート オプションを必ず選択しておいてください。
3 エクスポート ファイルの CREATE INDEX ステートメントで、各テーブルのインデックス セグメントが正しい順序で置かれていることを確認してください。
テーブルのインデックスは元のデータ ファイルと同じ順序になっていなければなりません。エクスポートされるテーブル スキーマはインデックスをアルファベット順に置くので、このステートメントを並べ替える必要があるかもしれません。
インデックスの順序を調べるには、元のデータ ファイルに対して butil -stat コマンドを使用します。『Advanced Operations Guide』のデータ ファイル情報の表示を参照してください。また、dbo.fSQLStatistics カタログ関数を使用して調べることもできます。『SQL Engine Reference』の dbo.fSQLStatistics を参照してください。
4 一般的には、古いファイルを変換するので、次の行をエクスポート スキーマ ファイルの先頭行として追加する必要があります。
SET TRUENULLCREATE = OFF;
次の行を、ファイルの最終行として追加します。
SET TRUENULLCREATE = ON;
5 ZenCC で新しいデータベースを作成します。『Zen User's Guide』の新規データベースを作成するにはを参照してください。
6 ZenCC の SQL Editor で、エクスポート スキーマ ファイルの CREATE TABLE SQL ステートメントを新しいデータベースに対して実行し、すべてのテーブルを作成します。『Zen User's Guide』の SQL スクリプトを開くにはを参照してください。
7 古いデータベースから古い Zen データ ファイル(DDF 以外)を、新しいデータベース データ ファイル用の保存場所にコピーします。
SQL を使用(ZenCC などを使用)して既存のデータにアクセスできるようになります。
8 DDF Builder を使用して、定義がなかった Btrieve ファイルに対しテーブル定義を作成し、また問題のある定義を修正します。変換に関する注意も参照してください。
9 必要であれば、データ ファイルをリビルドします(6.x 以前のファイル形式の場合に必要となる可能性があります)。Btrieve データ ファイルのリビルドの詳細については、次のセクション、レッスン 2 - v6.x より前のファイル形式での作業に進んでください。
変換に関する注意
上記の手順は、シンプルなデータ ファイルに対する最も基本的な作業です。まずはこの手順を試して変換の結果を調べてください。
以下の 2 つの状況がある場合は、さらに作業が必要です。
オルタネート コレーティング シーケンス
ZenCC および DDF Builder の使用を必要とするテーブル定義
オルタネート コレーティング シーケンス
テーブルの列がオルタネート コレーティング シーケンス(ACS)を使用する場合、CREATE TABLE ステートメントを手動で変更する必要があります。ZenCC ではテーブル スキーマをエクスポートするときに ACS を含めません。
列が ACS を使用しているかどうかを調べるには、DDF Builder でテーブルの一貫性を確認します(テーブルの一貫性のチェックを参照)。属性と物理キーファイル セグメントが一致しないというメッセージが通知された場合、その列は ACS を使用しています。
次の例は変更済みの CREATE TABLE ステートメントで、コレーティングが手動で追加されています。
SET TRUENULLCREATE = OFF;
CREATE TABLE "PATAPP" IN DICTIONARY USING 'PATAPP.DTA' (
    "ID" CHAR(6) NOT NULL COLLATE 'UPPER.alt',
    "Appointment Date" DATE NOT NULL,
    "Appointment Time" TIME NOT NULL,
    "AMPM" CHAR(4) NOT NULL COLLATE 'UPPER.alt',
    "Doctor" CHAR(12) NOT NULL,
    "Code" CHAR(3) NOT NULL COLLATE 'UPPER.alt',
    "Amount Paid" MONEY(14,2) NOT NULL,
    "Date Paid" DATE NOT NULL);
CREATE INDEX "index_0" IN DICTIONARY ON "PATAPP" (
    "Appointment Date" ,
    "AMPM" ,
    "Appointment Time" );
CREATE INDEX "index_1" IN DICTIONARY ON "PATAPP" (
    "ID" );
CREATE INDEX "index_2" IN DICTIONARY ON "PATAPP" (
    "Code" );
SET TRUENULLCREATE = ON;
また、インデックスの順序がテーブルに対して正しくない場合は、CREATE INDEX ステートメントを並び替えて正しい順序でインデックス セグメントを置く必要があります。
ZenCC および DDF Builder の使用を必要とするテーブル定義
テーブル定義によっては、解決が困難なため ZenCC と DDF Builder の両方を使用する必要がある場合もあります。列が DDF Builder で "不明" と示された場合は、ZenCC の Table Editor でその列が含まれるテーブルを表示し、DDF Builder 側でその列を同様に定義する必要があります。両方のユーティリティを用いて作業することにより、テーブル定義を完了させることができます。
終わりに
このレッスンでは、DDF Builder で Scalable SQL v3.01 の DDF がどのように処理されるかをご紹介し、またそれら DDF を本ソフトウェアの現行バージョンで作業できるように変換するための解決策も提供しました。
また、Scalable SQL v3.01 の DDF で作成されたデータベースには、v6.x より前のファイル形式の Btrieve データ ファイルが含まれている可能性があるので、それらのファイルも DDF Builder を使用する前にリビルドしておく必要があることも学習しました。
レッスン 2 - v6.x より前のファイル形式での作業
シナリオ
このレッスンでは、既存のテーブル定義セットを持つ Btrieve ファイルがあります。この Btrieve ファイルは v6.x より前のファイル形式で、本リリースの DDF Builder でサポートされている Zen とはもう互換性がありません。
注意: DDF Builder ではバージョン 6.x のファイルをサポートしますが、バージョン 6.x より前に作成されたファイルはサポートしません。
目的
このレッスンの目的は、DDF Builder でそのファイルを開くことです。ここでは、DDF Builder で v6.x より前のファイル形式と v6.x 以上のファイル形式がどのように処理されるかを説明します。また、v6.x より前の Btrieve ファイルを DDF Builder に対応させるための解決策も提供します。
必要な知識
このレッスンで使用するファイル、および残りのレッスンで使用するファイルは Tutorial2 というフォルダーにあります。デフォルトのインストール先にインストールしている場合、このフォルダーは次の場所にあります。
<Application Data>\DDFBuilder\tutorials\tutorial2
作業を続ける前に、このデータベース用の DSN を作成する必要があります。
このレッスンで作業対象となるファイルは KO.BTRKO.MKD です。
メモ:DSN の作成について情報が必要な場合は、データ ソース名(DSN)の作成を参照してください。
Btrieve ファイルを開く
DDF Builder をまだ実行していない場合は起動します。
1 DDF Builder のデータ ソース エクスプローラーで、[データベース]ノードを展開して使用可能データベースをすべて表示します。
2 一覧から Tutorial2 データベースを見つけます。
3 Tutorial2 データベース アイコンをダブルクリックします。
次のメッセージが表示されます。
4 OK]をクリックしてこのメッセージ ウィンドウを閉じます。
フォルダー内にあるいくつかのファイルが v6.x より前の形式であったため、全ファイルを開くことができませんでした。
警告メッセージを理解する
DDF Builder ではバージョン 5.x 以下の形式のファイルが完全にサポートされなくなったので、そのファイルは開くことができません。v6.x より前の形式のファイルを使用するには、そのファイルをバージョン 6.x 以上のファイル形式にリビルドする必要があります。
ヒント: DDF Builder は PSQL v9 以上でサポートされます。
バージョン 5.x 以下のファイルをリビルドする前にログ ファイルを確認し、リビルドする必要があるファイルを特定してください。
ログ ファイルを表示する
リビルドする必要があるファイルは DDF Builder ログ ファイルに記録されています。
ログ ファイルにアクセスするには
1 DDF Builder のメニュー バーで[ヘルプ]をクリックします。
2 DDF Builder のログを表示]をクリックします。
ログ ファイルは、ご使用のシステムでデフォルト設定されているテキスト エディターに表示されます。次の画面は、このレッスン用のログ ファイルのサンプルです。
ログ ファイルには v6.x より前の形式のファイルがリストアップされ、そのファイルの完全なデータ パスも記録されています。このデータ パスを使用して、リビルドが必要なファイルの場所を見つけることができます。
ファイルをリビルドする方法
Zen Rebuild ユーティリティを使用して、ファイルをバージョン 6.x 以上にリビルドします。Rebuild ユーティリティは Zen における中心的なユーティリティの 1 つとしてインストールされるもので、Zen Control Center の[ツール]メニューから使用することができます。
次に行うこと
Rebuild ユーティリティは Zen Control Center から使用できます。このユーティリティの使用法については、『Advanced Operations Guide』の「データ ファイルの変換」の章を参照してください。
終わりに
このレッスンでは、DDF Builder で 6.x より前のファイル形式がどのように処理されるかをご紹介し、またそれらを DDF Builder で作業できるようにリビルドするための解決策も提供しました。
レッスン 3 - 不正なデータ型とサイズ
シナリオ
このレッスンでは、不正なデータ型とサイズを持つ Btrieve ファイルがあります。この結果、データは理解できるような書式に設定されません。
目的
このレッスンの目的は、DDF Builder で Btrieve ファイルの既存のテーブル定義を開くことです。Btrieve 型ビューですべてのデータ型とサイズを調べて必要な変更を行い、フィールドのサイズに対して的確なデータ型でデータが書式設定されるようにします。
必要な知識
このレッスンでは、TYPE_SIZE.MKD というファイルを使用します。このファイルは Tutorial2 フォルダー内にあります。デフォルトのインストール先にインストールしている場合、このフォルダーは次の場所にあります。
<Application Data>\DDFBuilder\tutorials\tutorial2
このフォルダーは Tutorial2 データベースの一部です。
メモ:このチュートリアルのデータにアクセスするためには、このデータベースを指し示す DSN(データ ソース名)が必要です。まだ DSN を作成していない場合は、データ ソース名(DSN)の作成を参照してください。
Btrieve ファイルを開く
すぐ前のレッスンから引き続き作業していれば DDF Builder は起動しているはずです。終了していた場合は、DDF Builder を起動してください。
1 DDF Builder のデータ ソース エクスプローラーで、[データベース]ノードを展開し、一覧から Tutorial2 データベースを見つけます。
2 TUTORIAL2 データベース アイコンをダブルクリックしてそのノードを展開します。
3 ノードをさらに展開して TYPE_SIZE.MKD ファイルを探し、それに関連付けられている SQL テーブルを表示します。
4 type_size SQL テーブル名をダブルクリックするか、右クリックして[テーブル定義の編集]をクリックします。
テーブル定義エディターでは、次のメッセージが表示されます。
このメッセージは、DDF Builder で既存のテーブル定義を分析したら、その定義に問題があったということを知らせています。この結果、DDF Builder で既存のテーブル定義を開いて表示するために、いくつか修正を行う必要がありました。
5 OK]をクリックすると、このメッセージがクリアされテーブル定義が表示されます。
ヒント: 発生する可能性がある定義エラーの詳細については、テーブル定義エラーを参照してください。
不一致を探す
まずは DDF Builder インターフェイスで処理対象の不一致を確認します。特に、グリッド データ ビューと定義エラー ビューを見てください。
テーブル定義エディターのグリッド データ ビューでは、既存のテーブル定義に対して DDF Builder が行った変更を反映したテーブル定義が表示されています。
メモ:DDF Builder が行った変更は自動的に保存されません。DDF Builder による修正は保存する必要があります。
この例で、DDF Builder は新たに作成したフィールドや、DDF Builder がデータ型を「不明」に変更したフィールドに対して不明な列インジケーターを追加することにより、注目すべき列を視覚的に示しています。
ヒント: グリッド データ ビューにおける属性の詳細については、グリッド データ ビューでのフィールド属性を参照してください。
定義エラー ビューでは DDF Builder によって検出および変更された問題を表示します。
DDF Builder によって変更が行われる前の元のテーブル定義は、元の定義ビューで見ることができます。
エラーについて理解する
定義エラー ビューでは以下のことを通知します。
問題が発生した場所
DDF Builder で検出された問題
DDF Builder で元のテーブル定義に対して行った変更事項
定義エラーでは次の 3 つの問題を挙げています。
問題が発生した場所
DDF Builder で検出された問題
必要な対処
列:フィールド6
DDFBLDR-6:テーブル定義内に未定義のバイトがあります。不明な列を追加しました。
DDF Builder が未定義のバイトを明らかにするために追加した不明な列を定義する必要があります。
列:Age
DDFBLDR-11:SQL 列の型が列サイズに適合していません。列の型を "Unknown" に変更しました。
DDF Builder が "Unknown"(不明)に変更した列の型を定義する必要があります。
列:dob
DDFBLDR-11:SQL 列の型が列サイズに適合していません。列の型を "Unknown" に変更しました。
DDF Builder が "Unknown"(不明)に変更した列の型を定義する必要があります。
1 番目のエラーは、元のテーブル定義では定義されていないバイト群がファイルに含まれていることを示しています。DDF Builder はこれら未定義のバイトを新しい列として作成し、その列に "フィールド6" という名前を付けました。
また、このファイルには列のデータ型がその列のサイズに対して不正な 2 つのフィールド(Age と dob)があります。どちらも、フィールドの型が "Unknown"(不明)に変更されています。Age 列について詳しく見る前に、まず DDF Builder で判断できることとできないことを確認します。
不正なデータ型とサイズ
DDF Builder では、指定したデータ型に対して有効なサイズを確かめることはできませんが、指定したサイズに対して有効なデータ型を検証することはできます。DDF Builder では問題を検出して一般的な変更を行い、その変更を記録することはできますが、選択されたデータ型が正しいかどうかを判断することはできません。
DDF Builder ではフィールドのサイズに応じて選択できるデータ型が制限されます。たとえば Age 列の不正なデータ型とサイズについて見てみると、サイズが 4 バイトになっています。グリッド データ ビューの[Btrieve 型]リストには、4 バイトのサイズに対して適用可能なデータ型のみが設定されます。DDF Builder で選択可能なデータ型を 1 つずつ試してみるのではなく、Btrieve 型ビューや[プレビュー]ページでそのデータを見て適切なデータ型を判断してください。
次に、4 バイトのサイズに対して適用可能なデータ型を調べ、ファイルのデータをプレビューしてどのデータ型が最も適しているかを見ます。
データ型とサイズを検証する
フィールド サイズに対して有効なデータ型で書式設定されたデータを見るには、テーブル定義エディターの左側にある[Btrieve 型]タブの Btrieve 型ビューを使用します。
1 テーブル定義エディターで Age 列をクリックして選択します。
ヒント: テーブル定義の Age 列を選択すると、次で説明しているように[Btrieve 型]タブで特定のデータを見ることができます。
2 DDF Builder インターフェイスの左側にある[Btrieve 型]タブをクリックを表示します。[Btrieve 型]タブは次のように表示されます。
ヒント: Btrieve 型ビューの詳細については、Btrieve 型を参照してください。
3 Btrieve 型ビューの[プレビュー]列に表示されるデータを注意深く見てください。
Btrieve 型ビューでは、サイズが 4 バイトの場合に設定可能なデータ型のみを表示します。このように表示することで、その他の不正なデータ型をすべて除外することができるため非常に役に立ちます。
その列が年齢を表すものでサイズが 4 バイトであることを知っていれば、そのデータに対して妥当なのは 3 種類のデータ型のみであることがわかります。
次に、Auto Increment を妥当なデータ型の対象から除外します。これは Auto Increment データ型を使用すると新しいレコードごとに値が自動的に 1 ずつ増えるためです。自分の年齢に 1 を足す人はいないでしょう。
この除外によって Btrieve 型の一覧の中から Integer と Unsigned Binary という 2 つのデータ型に絞り込まれました。
Integer および Unsigned Binary データ型は実際によく似ています。これらのデータ型を試してみて、データがどのように解釈されるかを確認します。まず、Age 列の Btrieve 型として Integer を選択します。
4 [Btrieve 型]リストから "Integer" を選択します。
グリッド データ ビューの[プレビュー]列では、データが適切に受け入れられているように見えます。[プレビュー]ページでファイルのすべてのデータを見るようにしてください。
5 テーブル定義エディターで[プレビュー]タブをクリックします。ファイルの全データを読みやすいレイアウトで見ることができます。
ファイルの全データを見ることによって全レコードをすばやく調査できるので、不正なデータ型かどうかをより確実に見極めるのに役立ちます。
Integer データ型を使用すると、データが適切に書式設定されているように見えることが確認できます。念のため、Unsigned Binary データ型も使用して同じように検証してください。
6 [Btrieve 型]リストから "Unsigned Binary" を選択します。
同様に、グリッド データ ビューの[プレビュー]列には適切な書式でデータが表示されています。確認のため、Integer データ型を使用したときと同じように、[プレビュー]ページでファイルの全データを見ます。
7 テーブル定義エディターでで[プレビュー]タブをクリックして、ファイルの全データを読みやすいレイアウトで表示します。
Integer および Unsigned Binary データ型はいずれもデータを適切に受け入れて理解できるように書式設定します。また、どちらのデータ型も 1、2、4 および 8 バイトをサポートします。このため、どちらかのデータ型を選択するための決定的な理由はないように思われます。この例は、テーブル定義を作成または変更する場合には、データの基本的な構造を知っておく必要があることを端的に示しています。
最終的な変更を行う
有効なデータ型と書式設定されたデータを再検討し、Age 列には Integer データ型を選択することにします。
これで 1 番目のテーブル定義エラーが解決されました。しかし、ほかのエラーを解決するまではテーブル定義を保存することができません。
ヒント: データ型が "Unknown"(不明)になっているものをすべて解決し、レコード内の未定義バイトを明確に割り当てるまで、テーブル定義を保存することはできません。
次のエラー対象の 2 つのフィールドは並んでいるので集合的に見ることができます。残りの 2 つのテーブル定義エラーを解決するには、これらを単一のエラーとして考える必要があります。
まず、dob フィールドに定義されていたデータ型(Date)は 2 バイトの列サイズに対して有効ではない、という点に DDF Builder が注目したことがわかります。その結果、DDF Builder はこのデータ型を "Unknown"(不明)に変更しました。
次に、元のテーブル定義では定義されていない 2 バイトがあります。DDF Builder はこれらの 2 バイトから新しい列(フィールド6)を作成し、"Unknown" データ型を割り当てました。
dob フィールドの用途に適したデータ型は Date ですが、この Date データ型は 4 バイトのフィールドが必要です。"dob" 列" と "フィールド6" 列をマージすれば、Date データ型に適合する 4 バイトのフィールドを作成できます。2 つの列をマージして Date データ型を使用した場合、1 番目のエラーでも行ったように、そのデータが適切に受け入れられ理解できるような書式になっているかどうかを検証する必要があります。
1 テーブル定義エディターで、"dob" 列と "フィールド6" 列の両方を(Shift キーを使って)選択します。
2 右クリックして[列のマージ]を選択します。
2 つの列が 1 つにマージされ、4 バイトの列が作成されます。
3 [Btrieve 型]リストから "Date" を選択します。
この情報の入力後に残りの列フィールドを見てみると、Date データ型を追加したことによってレコードのデータが適切に書式設定されることがわかります。
[プレビュー]ページで、Date データ型で書式設定されたデータがどのように処理されるかを確認することをお勧めします。
4 グリッド データ ビューの下部にある[プレビュー]タブをクリックします。
[プレビュー]ページの dob 列を見て、全データが適切に受け入れられ理解できる書式で設定されていることを確認できます。
テーブル定義を保存する
これでテーブル定義が完了したので、この作業を保存して変更を有効にしてください。作業を保存する前に、もう一度テーブル定義を見直してください。データ グリッド ビューは次のようになります。
Btrieve 型がすべて定義されていること、未定義のフィールドが残っていないこと、またすべてのバイトが明確に割り当てられていることが一目でわかります。これでテーブル定義を保存できます。
1 メニューから、[ファイル]>[保管]を選択します。
終わりに
このレッスンでは、データ型とサイズが適合しない場合に DDF Builder でどのように処理されるかをご紹介しました。不正なデータ型やサイズが既存のテーブル定義内でどのように表示されるかを示し、サイズとデータ型が適合して情報が適切に正しく表示できるようテーブル定義を変更するための解決例をいくつか提供しました。
レッスン 4 – 列の定義の重複
シナリオ
このレッスンでは、既存のテーブル定義があり、ファイル内で同じバイトを共有する 2 つの列定義が含まれています。これは重複する列定義を作成することになるので修正が必要です。
目的
このレッスンの目的は、DDF Builder でファイルを開き、DDF Builder によってこの定義になんらかの変更が行われるかどうかを確認することです。DDF Builder が実施する変更を調べ、重複している列定義を修正するために必要となる変更について検討します。
メモ:DDF Builder はファイル内の重複する列定義を修正するための解決策を提示し、それらの変更を保存できるようにします。
必要な知識
このレッスンでは、OVERLAP.MKD というファイルを使用します。このファイルは Tutorial2 フォルダー内にあります。デフォルトのインストール先にインストールしている場合、このフォルダーは次の場所にあります。
<Application Data>\DDFBuilder\tutorials\tutorial2
このフォルダーは Tutorial2 データベースの一部です。
メモ:このチュートリアルのデータにアクセスするためには、このデータベースを指し示す DSN(データ ソース名)が必要です。まだ DSN を作成していない場合は、データ ソース名(DSN)の作成を参照してください。
Btrieve ファイルを開く
すぐ前のレッスンから引き続き作業していれば DDF Builder は起動しているはずです。終了していた場合は、DDF Builder を起動してください。
1 DDF Builder のデータ ソース エクスプローラーで、[データベース]ノードを展開し、一覧から Tutorial2 データベースを見つけます。
2 TUTORIAL2 データベース アイコンをダブルクリックしてそのノードを展開します。
3 ノードをさらに展開して OVERLAP.MKD ファイルを探し、それに関連付けられている SQL テーブルを表示します。
4 overlap SQL テーブル名をダブルクリックするか、右クリックして[テーブル定義の編集]をクリックします。
テーブル定義エディターでは、次のメッセージが表示されます。
このメッセージは、DDF Builder で既存のテーブル定義を分析したら、その定義に問題があったということを知らせています。この結果、DDF Builder で既存のテーブル定義を開いて表示するために、いくつか修正を行う必要がありました。
5 OK]をクリックすると、このメッセージがクリアされテーブル定義が表示されます。
ヒント: 発生する可能性がある定義エラーの詳細については、テーブル定義エラーを参照してください。
不一致を探す
まずは DDF Builder インターフェイスで、元の定義と DDF Builder による変更後の定義との違いを確認し、報告されたエラーについても再調査します。
テーブル定義エディターのグリッド データ ビューでは、既存のテーブル定義に対して DDF Builder が行った変更を反映したテーブル定義が表示されます。
変更または追加されたフィールドであること示す不明アイコンやその他の視覚的なインジケーターはありません。
定義エラー ビューでは DDF Builder によって検出および変更された問題を表示します。
DDF Builder によって変更が行われる前の元のテーブル定義は、元の定義ビューでいつでも見ることができます。
メモ:DDF Builder が行った変更は自動的に保存されません。DDF Builder による修正は保存する必要があります。
元の定義と変更後の定義はすぐに比較できますが、最初は DDF Builder によって報告されるエラーを見てください。
エラーについて理解する
定義エラー ビューでは以下のことを通知します。
問題が発生した場所
DDF Builder で検出された問題
DDF Builder で元のテーブル定義に対して行った変更事項
定義エラー ビューでは次の 1 つの問題が挙げられています。この問題について詳しく見てみましょう。
問題が発生した場所
DDF Builder で検出された問題
必要な対処
列:firstName
DDFBLDR-4:SQL 列がほかの列にオーバーラップしています。列のサイズを切り詰めました。
DDF Builder が指名した列(firstName)はほかの列と重なっています。重複する列をなくし、テーブル定義と Btrieve ファイルが同じレコード長になるようにするために、DDF Builder は列のサイズを短くしました。
DDF Builder によって報告されたエラーは列定義の重複です、これは、テーブル定義に同じバイトを共有する 2 つの列の定義が含まれていることを意味します。
DDF Builder では、firstName 列が次の列と重ならないようにするために、この列のサイズを自動的に削減します。これで列の長さが一致し、複数の列にわたって定義されているバイトがなくなります。
グリッド データ ビューと元の定義を見比べると、重複している列を確認することができます。
変更後の定義で firstName フィールドのサイズが 20 であるのに対し、元の定義ではサイズが 30 になっていることに注目してください。元の定義では、[プレビュー]列にファースト ネームの "Joe" とラスト ネームの "Smith" の両方が表示されています。変更後の定義ではこのフィールドのサイズが小さくなり、[プレビュー]列にはファースト ネームのみが適切に表示されています。
変更を受け入れるまたは拒否する
元の定義と DDF Builder によって変更された定義を比較し、それに加えてデータがどのように書式設定されたかを検証することは、DDF Builder によって行われた変更を受け付けるかどうかを判断するのに役立ちます。
DDF Builder が行った変更の結果、データが期待どおりの書式で表示され、列の長さも一致することが確認できます。
両ファイルの違いを調べ、DDF Builder による変更を理解し、データが適切であることを検証できたら、いつでもその変更を受け入れることができます。
テーブル定義を保存する
テーブル定義の変更を行ったのが、ユーザーであろうと DDF Builder であろうと、その変更を有効にするためにはそれを保存する必要があります。テーブル定義を保存する前に、もう一度テーブル定義と[プレビュー]タブを見て、すべてのフィールドが定義済みで各バイトが明確にされていることを確認すると良いでしょう。
メモ:テーブル定義で Btrieve 型が "Unknown"(不明)であったり、明確に割り当てられていないバイトが含まれているフィールドがあると、そのテーブル定義は保存することができません。
すべての Btrieve 型が定義済みで、レコード内のすべてのバイトが明確に割り当てられていることがわかります。これでテーブル定義を保存できます。
1 メニューから、[ファイル]>[保管]を選択するとテーブル定義が保存されます。
これで、列定義の重複を修正するために DDF Builder が変更したテーブル定義は、現在の定義として保存できました。
終わりに
このレッスンでは、列定義の重複が DDF Builder でどのように処理されるか、また列の重複を解決するために DDF Builder が実施する変更についてご紹介しました。DDF Builder によって変更された定義と元の定義を比較して、その変更を受け入れるか、あるいは拒否するかを判断する方法も示しました。
レッスン 5 - ファイル/フィールド フラグの不一致
シナリオ
このレッスンでは、テーブル定義で設定されている SQL 列フラグと一致しないフラグ設定のフィールドを持つ Btrieve ファイルがあります。
目的
このレッスンの目的は、DDF Builder でファイルを開き、DDF Builder によってこの定義になんらかの変更が行われるかどうかを確認することです。DDF Builder が実施する変更を調べ、フラグの不一致を修正するために必要な変更があればその変更について検討します。
必要な知識
このレッスンでは、FLAGS.MKD というファイルを使用します。このファイルは Tutorial2 フォルダー内にあります。デフォルトのインストール先にインストールしている場合、このフォルダーは次の場所にあります。
<Application Data>\DDFBuilder\tutorials\tutorial2
このフォルダーは Tutorial2 データベースの一部です。
メモ:このチュートリアルのデータにアクセスするためには、このデータベースを指し示す DSN(データ ソース名)が必要です。まだ DSN を作成していない場合は、データ ソース名(DSN)の作成を参照してください。
Btrieve ファイルを開く
すぐ前のレッスンから引き続き作業していれば DDF Builder は起動しているはずです。終了していた場合は、DDF Builder を起動してください。
1 DDF Builder のデータ ソース エクスプローラーで、[データベース]ノードを展開し、一覧から Tutorial2 データベースを見つけます。
2 TUTORIAL2 データベース アイコンをダブルクリックしてそのノードを展開します。
3 ノードをさらに展開して FLAGS.MKD ファイルを探し、それに関連付けられている SQL テーブルを表示します。
4 flags SQL テーブル名をダブルクリックするか、右クリックして[テーブル定義の編集]をクリックします。
テーブル定義エディターでは、次のメッセージが表示されます。
このメッセージは、DDF Builder で既存のテーブル定義を分析したら、その定義に問題があったということを知らせています。この結果、DDF Builder で既存のテーブル定義を開いて表示するために、いくつか修正を行う必要がありました。
5 OK]をクリックすると、このメッセージがクリアされテーブル定義が表示されます。
ヒント: 発生する可能性がある定義エラーの詳細については、テーブル定義エラーを参照してください。
不一致を探す
まずは DDF Builder インターフェイスで処理対象の不一致を確認します。まずは、グリッド データ ビューと定義エラー ビューを見てください。
テーブル定義エディターのグリッド データ ビューでは、既存のテーブル定義に対して DDF Builder が行った変更を反映したテーブル定義が表示されています。
メモ:DDF Builder が行った変更は自動的に保存されません。DDF Builder による修正は保存する必要があります。
このレッスンの場合、DDF Builder は注目すべき列について視覚的なインジケーターを何も示しません。フィールドが変更されていることを示す不明な列インジケーターはありません。
ヒント: グリッド データ ビューにおける属性の詳細については、グリッド データ ビューでのフィールド属性を参照してください。
定義エラー ビューでは DDF Builder によって検出および変更された問題を表示します。
ここで、元のテーブル定義を見てみましょう。DDF Builder によって変更が行われる前の元のテーブル定義は、元の定義ビューで見ることができます。
テーブル定義の不一致の詳しい説明に進む前に、DDF Builder によって報告された定義エラーを理解しておいてください。
エラーについて理解する
定義エラー ビューでは以下のことを通知します。
問題が発生した場所
DDF Builder で検出された問題
DDF Builder で元のテーブル定義に対して行った変更事項
定義エラーでは次の 1 つの問題を挙げています。
問題が発生した場所
DDF Builder で検出された問題
必要な対処
列:lastName
DDFBLDR-9:SQL 列の大小文字無視フラグが Btrieve セグメントの大小文字無視フラグと一致していません。列の大小文字無視フラグが変更されます。
エラー対象のフィールドに大小文字無視フラグを設定するかどうかを検証し、DDF Builder による変更を受け入れるか、または拒否する必要があります。
このエラーは、SQL 列に対して大小文字無視フラグが設定されているが、対応する Btreive セグメントにはこのフラグが設定されていないことを示しています。DDF Builder は Btrieve ファイルを変更しないので、SQL テーブルは Btrieve ファイルの仕様に一致するよう変更されます。この状況を確かめるには、現在のテーブル定義を元の定義と比較します。
定義エラーでは lastName 列の大小文字無視の設定に問題があることを示しています。現在のテーブル定義と元のテーブル定義の lastName フィールドを比較すると、この違いがすぐにわかります。
この比較によって、以下のことが判断できます。
元の定義では、lastName フィールドに対して大小文字無視フラグが設定されていませんでした
現在の(DDF Builder によって更新された)定義では、lastName フィールドに対して大小文字無視フラグが設定されています
DDF Builder は Btrieve ファイルに基づいて変更を行います。DDF Builder では Btrieve ファイルを変更できません。変更できるのは Btrieve ファイルの構造を決定するテーブル定義のみであることを覚えておいてください。そのような訳で、DDF Builder は(大小文字無視フラグのない)元の定義を変更して、lastName フィールドで大小文字無視フラグを利用できるようにしました。
メモ:lastName フィールドはインデックスとして使用されます。このため、lastName フィールドの大小文字無視フラグの設定をクリアすることはできません。
変更を受け入れるまたは拒否する
定義エラーの原因を究明し、DDF Builder が行った変更について理解しました。ここで、DDF Builder がテーブル定義に対して行った変更を受け入れるか、または拒否する必要があります。
DDF Builder が行った変更が正しくなければ、その変更を拒否して最初からテーブル定義を作成し直してください。これは、インデックスとして指定されているフィールドの大小文字無視の設定は変更できないためです。
ただし、このレッスンの目的は DDF Builder が行った変更を受け入れることです。lastName フィールドには大小文字無視フラグを設定します。
テーブル定義を保存する
テーブル定義エラーと変更について確認できたら、この作業を保存して変更を有効にしてください。作業を保存する前に、もう一度テーブル定義を見直してください。データ グリッド ビューは次のようになります。
Btrieve 型がすべて定義されていること、未定義のフィールドが残っていないこと、またすべてのバイトが明確に割り当てられていることが一目でわかります。これでテーブル定義を保存できます。
1 メニューから、[ファイル]>[保管]を選択するとテーブル定義が保存されます。
更新されたテーブル定義が保存され、lastName フィールドに対して大小文字無視フラグを設定できました。
終わりに
このレッスンでは、Btrieve ファイルと既存のテーブル定義でフラグ設定が異なる場合に DDF Builder でどのように処理されるかをご紹介しました。DDF Builder によって行われた変更を、グリッド データ ビューと元の定義ビューを使用して比較できることも示しました。また、DDF Builder ではインデックスとして設定されているフィールドに対する変更が行えないことも示しました。DDF Builder によって行われた変更を拒否する、または受け入れるための方針についても説明しました。
レッスン 6 – インデックスの不一致
シナリオ
このレッスンでは、テーブル定義のインデックス設定と一致しないインデックス設定を持つ Btrieve ファイルがあります。
目的
このレッスンの目的は、DDF Builder でファイルを開き、DDF Builder によってこの定義になんらかの変更が行われるかどうかを確認することです。DDF Builder が実施する変更を調べ、インデックスの不一致を修正するために必要な変更について検討します。
ヒント: DDF Builder はインデックスの不一致を修正するための解決法を提示し、それらの変更を保存できるようにします。
必要な知識
このレッスンでは、INDEX_INC.MKD というファイルを使用します。このファイルは Tutorial2 フォルダー内にあります。デフォルトのインストール先にインストールしている場合、このフォルダーは次の場所にあります。
<Application Data>\DDFBuilder\tutorials\tutorial2
このフォルダーは Tutorial2 データベースの一部です。
メモ:このチュートリアルのデータにアクセスするためには、このデータベースを指し示す DSN(データ ソース名)が必要です。まだ DSN を作成していない場合は、データ ソース名(DSN)の作成を参照してください。
Btrieve ファイルを開く
すぐ前のレッスンから引き続き作業していれば DDF Builder は起動しているはずです。終了していた場合は、DDF Builder を起動してください。
1 DDF Builder のデータ ソース エクスプローラーで、[データベース]ノードを展開し、一覧から Tutorial2 データベースを見つけます。
2 TUTORIAL2 データベース アイコンをダブルクリックしてそのノードを展開します。
3 ノードをさらに展開して INDEX_INC.MKD ファイルを探し、それに関連付けられている SQL テーブルを表示します。
4 index_inc SQL テーブル名をダブルクリックするか、右クリックして[テーブル定義の編集]をクリックします。
テーブル定義エディターでは、次のメッセージが表示されます。
このメッセージは、DDF Builder で既存のテーブル定義を分析したら、その定義に問題があったということを知らせています。この結果、DDF Builder で既存のテーブル定義を開いて表示するために、いくつか修正を行う必要がありました。
5 OK]をクリックすると、このメッセージがクリアされテーブル定義が表示されます。
ヒント: 発生する可能性がある定義エラーの詳細については、テーブル定義エラーを参照してください。
不一致を探す
まずは DDF Builder インターフェイスで検出された不一致を確認します。これは、グリッド データ ビューと元の定義を比較すればすぐにわかります。
このレッスンの場合、DDF Builder は注目すべき列について視覚的なインジケーターを何も示しません。フィールドが変更されていることを示す不明な列インジケーターはありません。
大変興味深いことに、これらの 2 つのテーブル定義を比較しても違いが見つかりません。DDF Builder では変更を行っていますが、DDF Builder が修正した問題はインデックスに関するものなので、テーブル定義上に表れません。
インデックス情報についてより詳しく見る前に、定義エラー ビューに挙げられている問題を調査しましょう。定義エラー ビューでは DDF Builder によって検出および変更された問題を表示します。
メモ:DDF Builder が行った変更は自動的に保存されません。DDF Builder による修正は保存する必要があります。
エラーについて理解する
定義エラー ビューでは以下のことを通知します。
問題が発生した場所
DDF Builder で検出された問題
DDF Builder で元のテーブル定義に対して行った変更事項
ヒント: DDF Builder では Btrieve ファイルを変更できません。変更は Btrieve ファイルではなくテーブル定義に対して行われます。
定義エラーでは次の 2 つの問題を挙げています。
問題が発生した場所
DDF Builder で検出された問題
必要な対処
インデックス:indx_id
DDFBLDR-1:この SQL インデックスに対応する Btrieve キーがありません。インデックスを無視しました。
テーブル定義で見つかった SQL インデックスに対応するキーが Btrieve ファイルに存在しません。その結果、DDF Builder ではこのインデックスが無視されるため、実行できる操作は DDF Builder による変更の確認のみです。
インデックス:インデックス 0
DDFBLDR-2:この Btrieve キーに対応する SQL インデックスが見つかりません。インデックスを追加しました。
Btrieve ファイルにキーがあるため、それに対応するインデックスが DDF Builder によってテーブル定義に追加されました。テーブル定義のインデックスを検証して、DDF Builder が行った変更を受け入れる必要があります。
1 番目のエラーは、Btrieve ファイルに存在しないインデックスが既存のテーブル定義に含まれていることを示します。DDF Builder はテーブル定義を変更するだけで Btrieve ファイル自体を変更することはできないため、このインデックスは無視されます。これは、存在しないインデックスを使用しないようにするためにも知っておくことが重要です。
2 番目のエラーはこの逆の状況です。既存のテーブル定義に、Btrieve ファイルで定義されているインデックスがありません。DDF Builder は Btrieve ファイルのインデックスを表すために、これまで定義されていなかった SQL インデックスを追加します。
DDF Builder が作成したインデックスに名前を割り当て、そのテーブル定義のインデックスに対する変更を受け入れます。
メモ:DDF Builder によって作成されたインデックスがあり、それがもう必要でない場合は、ファイルおよびテーブル定義からそのインデックスを削除することができます。同様に、DDF Builder がテーブル定義を変更したときに、これまで定義されていなかったインデックスを追加する必要があることに気付くことができます。どちらの場合でも、『Zen Programmer's Guide』でインデックスの追加と削除に関する説明を参照してください。
インデックスに名前を付ける
1 テーブル定義エディターで[インデックス]タブを選択します。
2 [インデックス]列の "インデックス0" エントリをダブルクリックします。
3 インデックスの名前として「index_lname」と入力します。
メモ:Btrieve ファイルに定義されたインデックスを見るには、[統計情報]タブをクリックします。
テーブル定義を保存する
DDF Builder によってテーブル定義に追加されたインデックスを検証したので、この作業を保存して変更を有効にしてください。作業を保存する前に、もう一度テーブル定義を見直してください。
Btrieve 型はすべて定義され、不明なフィールドも無く、またすべてのバイトが明確に割り当てられています。これでテーブル定義を保存できます。
1 メニューから、[ファイル]>[保管]を選択するとテーブル定義が保存されます。
終わりに
おめでとうございます。これでテーブル定義の保存が成功しました。このレッスンでは、DDF Builder が認識したインデックスの不一致についてご紹介しました。また、DDF Builder が行った変更と更新されたテーブル定義の保存方法についても説明しました。
レッスン 7 – 可変長レコードの不一致
シナリオ
このレッスンでは、テーブル定義で設定されている可変長レコードとは異なる可変長レコードを持つ Btrieve ファイルがあります。
目的
このレッスンの目的は、DDF Builder でファイルを開き、DDF Builder によってこの定義になんらかの変更が行われるかどうかを確認することです。DDF Builder が実施する変更を調べ、可変長レコードの不一致を修正するために必要となる変更について検討します。
メモ:現在、DDF Builder は可変長レコードの不一致を修正するための解決策を提示していません。
必要な知識
このレッスンでは、VARTABLE.MKD というファイルを使用します。このファイルは Tutorial2 フォルダー内にあります。デフォルトのインストール先にインストールしている場合、このフォルダーは次の場所にあります。
<Application Data>\DDFBuilder\tutorials\tutorial2
このフォルダーは Tutorial2 データベースの一部です。
メモ:このチュートリアルのデータにアクセスするためには、このデータベースを指し示す DSN(データ ソース名)が必要です。まだ DSN を作成していない場合は、データ ソース名(DSN)の作成を参照してください。
Btrieve ファイルを開く
すぐ前のレッスンから引き続き作業していれば DDF Builder は起動しているはずです。終了していた場合は、DDF Builder を起動してください。
1 DDF Builder のデータ ソース エクスプローラーで、[データベース]ノードを展開し、一覧から Tutorial2 データベースを見つけます。
2 TUTORIAL2 データベース アイコンをダブルクリックしてそのノードを展開します。
3 ノードをさらに展開して VARTABLE.MKD ファイルを探し、それに関連付けられている SQL テーブルを表示します。
4 varTable SQL テーブル名をダブルクリックするか、右クリックして[テーブル定義の編集]をクリックします。
テーブル定義エディターでは、次のメッセージが表示されます。
このメッセージは、DDF Builder で既存のテーブル定義を分析したら、その定義に問題があったということを知らせています。この結果、DDF Builder で既存のテーブル定義を開いて表示するために、いくつか修正を行う必要がありました。
5 OK]をクリックすると、このメッセージがクリアされテーブル定義が表示されます。
ヒント: 発生する可能性がある定義エラーの詳細については、テーブル定義エラーを参照してください。
不一致を探す
まずは DDF Builder インターフェイスで、元の定義と DDF Builder による変更後の定義との違いを確認し、報告されたエラーについても再調査します。
テーブル定義エディターのグリッド データ ビューでは、変更済みのテーブル定義が示されます。
メモ:DDF Builder が行った変更は自動的に保存されません。DDF Builder による修正は保存する必要があります。
DDF Builder では、変更または追加されたフィールドに対して不明な列インジケーターを追加し、注目すべき列であることを視覚的に示します。また、可変長列インジケーターが可変長の列に追加されます。
ヒント: グリッド データ ビューにおける属性の詳細については、グリッド データ ビューでのフィールド属性を参照してください。
定義エラー ビューでは DDF Builder によって検出および変更された問題を表示します。
DDF Builder によって変更が行われる前の元のテーブル定義は、元の定義ビューで見ることができます。
エラーについて理解する
定義エラー ビューでは以下のことを通知します。
問題が発生した場所
DDF Builder で検出された問題
DDF Builder で元のテーブル定義に対して行った変更事項
定義エラーでは次の 2 つの問題を挙げています。
問題が発生した場所
DDF Builder で検出された問題
必要な対処
列:Name
DDFBLDR-12:可変長列にできるのはテーブル内の最後の列だけです。列の型を "Unknown" に変更しました。
既存の SQL テーブル定義にはレコードの途中に NOTE または LVAR データ型があります。DDF Builder では、可変長列はレコード内の最後に配置する必要があると判断し、このデータ型を "Unknown"(不明)に変更します。DDF Builder が "Unknown"(不明)に変更した列を定義する必要があります。
インデックス:UK_ID
DDFBLDR-1:この SQL インデックスに対応する Btrieve キーがありません。インデックスを無視しました。
テーブル定義で見つかった SQL インデックスに対応するキーが Btrieve ファイルに存在しません。その結果、DDF Builder ではこのインデックスが無視されるため、実行できる操作は DDF Builder による変更の確認のみです。
DDFBLDR-12 エラーは、テーブル定義の最後の列ではない可変長フィールドが原因で発生しています。このファイルにはレコードの最後の列以外の位置に可変長フィールドがあるため、DDF Builder ではこのフィールドのデータ型を "Unknown"(不明)に変更します。
ヒント: レッスン 3 - 不正なデータ型とサイズでは、列のデータ型がその列のサイズに対して不正だった場合の具体的な対処手順を提供しています。
可変長フィールドの問題を修正するには、不明なフィールドを適切なデータ型で定義します。これは次のセクションで説明します。
最後に報告されたエラーは、DDF Builder が既存のテーブル定義でインデックスを検出したが、それに対応するキーが Btrieve ファイルにはないという事象です。このレッスンの過程で、このエラーは解決されません。解決されるのは可変長フィールドについてだけです。インデックスに関するエラーを解決するためには、レッスン 6 – インデックスの不一致を参照してください。
不明なフィールドを定義する
テーブル定義エディターのグリッド データ ビューで、不明なフィールドを定義します。
1 Name フィールドをクリックして選択します。
2 [Btrieve 型]リストから "String" を選択します。
メモ:テーブル定義に BLOB または CLOB データ型が含まれている場合、テーブルの可変長部分にある列を編集することはお勧めしません。
テーブル定義を保存する
不明なフィールドを定義し、すべての問題を修正したら、テーブル定義を保存できます。
作業を保存する前に、もう一度テーブル定義を見直してください。
テーブル定義に未定義のフィールドがなく、すべてのバイトが明確に割り当てられています。これでテーブル定義を保存できます。
1 メニューから、[ファイル]>[保管]を選択するとテーブル定義が保存されます。
終わりに
おめでとうございます。テーブル定義が保存され、可変長フィールドの修正に成功しました。このレッスンでは、レコードの最後にない可変長フィールドを DDF Builder でどのように処理するかをご紹介しました。また、フィールドを定義する方法と、ファイルに対して有効なテーブル定義を作成する方法についても説明しました。
レッスン 8 – レコード長の不一致
シナリオ
このレッスンでは、テーブル定義で設定されているレコード長とは異なるレコード長を持つ Btrieve ファイルがあります。
目的
このレッスンの目的は、DDF Builder でファイルを開き、DDF Builder によってこの定義になんらかの変更が行われるかどうかを確認することです。DDF Builder が実施する変更を調べ、レコード長の不一致を修正するために必要な変更について検討します。
ヒント: DDF Builder はレコード長の不一致を修正するための解決策を提示し、それらの変更を保存できるようにします。
必要な知識
このレッスンでは、rec_length.mkd というファイルを使用します。このファイルは Tutorial2 フォルダー内にあります。デフォルトのインストール先にインストールしている場合、このフォルダーは次の場所にあります。
<Application Data>\DDFBuilder\tutorials\tutorial2
このフォルダーは Tutorial2 データベースの一部です。
メモ:このチュートリアルのデータにアクセスするためには、このデータベースを指し示す DSN(データ ソース名)が必要です。まだ DSN を作成していない場合は、データ ソース名(DSN)の作成を参照してください。
Btrieve ファイルを開く
すぐ前のレッスンから引き続き作業していれば DDF Builder は起動しているはずです。終了していた場合は、DDF Builder を起動してください。
1 DDF Builder のデータ ソース エクスプローラーで、[データベース]ノードを展開し、一覧から Tutorial2 データベースを見つけます。
2 TUTORIAL2 データベース アイコンをダブルクリックしてそのノードを展開します。
3 ノードをさらに展開して REC_LENGTH.MKD ファイルを探し、それに関連付けられている SQL テーブルを表示します。
4 rec_length SQL テーブル名をダブルクリックするか、右クリックして[テーブル定義の編集]をクリックします。
テーブル定義エディターでは、次のメッセージが表示されます。
このメッセージは、DDF Builder で既存のテーブル定義を分析したら、その定義に問題があったということを知らせています。この結果、DDF Builder で既存のテーブル定義を開いて表示するために、いくつか修正を行う必要がありました。
5 OK]をクリックすると、このメッセージがクリアされテーブル定義が表示されます。
ヒント: 発生する可能性がある定義エラーの詳細については、テーブル定義エラーを参照してください。
不一致を探す
まずは DDF Builder インターフェイスで、元の定義と DDF Builder による変更後の定義との違いを確認し、報告されたエラーについても再調査します。
テーブル定義エディターのグリッド データ ビューでは、変更済みのテーブル定義が示されます。
メモ:DDF Builder が行った変更は自動的に保存されません。DDF Builder による修正は保存する必要があります。
DDF Builder では、変更または追加されたフィールドに対して不明な列インジケーターを追加し、注目すべき列であることを視覚的に示します。
ヒント: グリッド データ ビューにおける属性の詳細については、グリッド データ ビューでのフィールド属性を参照してください。
定義エラー ビューでは DDF Builder によって検出および変更された問題を表示します。
DDF Builder によって変更が行われる前の元のテーブル定義は、元の定義ビューで見ることができます。
エラーについて理解する
定義エラー ビューでは以下のことを通知します。
問題が発生した場所
DDF Builder で検出された問題
DDF Builder で元のテーブル定義に対して行った変更事項
定義エラーでは次の 1 つの問題を挙げています。
問題が発生した場所
DDF Builder で検出された問題
必要な対処
列:フィールド6
DDFBLDR-6:テーブル定義内に未定義のバイトがあります。不明な列を追加しました。
DDF Builder が未定義のバイトを明らかにするために追加した不明な列を定義する必要があります。
DDF Builder によって報告されたエラーは、レコード長の不一致を示しています。
ヒント: 統計情報]タブをクリックすると、Btrieve ファイルの元のレコード長を調べることができます。
これは、レコードのすべてのバイトに当たるフィールドがテーブル定義に含まれていなかったことを意味します。このようなバイトを明らかにするために、DDF Builder は新しい列を不明なデータ型として作成しました。
すべてのバイトを定義して明確に割り当て、Btrieve ファイルと正確に一致するテーブル定義を作成します。グリッド データ ビューの下部にある "フィールド6" の行を見てください。
レコード長が Btrieve ファイルとテーブル定義で一致するよう、不明なフィールドを定義することができます。
フィールドを定義する
次に、テーブル定義エディターのグリッド データ ビューで、不明のフィールドを定義します。
1 グリッド データ ビューで最後の行をクリックして選択します。
2 "フィールド6" フィールドを選択し、フィールド名として「City」と入力します。
3 ヌル]チェック ボックスのチェックをオンにします。
4 サイズ]で値を 50 バイトに変更してください。
5 Btrieve 型]列のリストから "String" を選択します。
6 大小文字無視]チェック ボックスをオンにします。
テーブル定義は次のようになります。
7 グリッド データ ビューで " フィールド7" 行をクリックして選択します。
8 "フィールド7" フィールドを選択し、フィールド名として「Income」と入力します。
9 Btrieve 型]列のリストから "Money" を選択します。
10 桁数]の値は 10 に、[小数位]の値は 2 にします。
テーブル定義は次のようになります。
これで不明なフィールドはすべて定義され、すべてのバイトは明確に割り当てられたので、テーブル定義を保存します。
定義を保存する
行った変更を保存して適用できるようテーブル定義を保存します。
1 メニューから、[ファイル]>[保管]を選択するとテーブル定義が保存されます。
終わりに
おめでとうございます。テーブル定義が保存され、レコード長の不一致が適切に修正されました。このレッスンでは、レコード長が異なる場合に DDF Builder でどのように処理されるかをご紹介しました。また、フィールドを定義する方法や、サイズを変更して列を分割したり、ファイルに対して有効なテーブル定義を作成する方法についても説明しました。