バージョン 6.3.3
 —  ファーストステップ  —

データベースへのアクセス

特定のデータをデータベースファイルから読み込み、対応する出力を表示する簡単なプログラムを作成します。

以下の演習を完了すると、サンプルのアプリケーションは 1 つのモジュールでのみ構成されます(プログラムで使用されるデータフィールドはプログラム内で定義されます)。

Application structure

このドキュメントには次の演習が含まれています。


デモデータベースの開始

デモデータベース SAG-DEMO-DB は自動的に開始されません。 このチュートリアルの演習に進む前に、デモデータベースが開始していることを確認する必要があります。 デモデータベースが開始していないと、例が動作しません。

次の説明は、Adabas を Windows でローカルにインストールした場合に適用されます。 UNIX バージョンを使用し、デモデータベースが稼動していない場合は、開始するよう UNIX 管理者に依頼してください。

Start of instruction setデモデータベースを開始するには

  1. [スタート]メニューから、[プログラム]>[Adabas n.n]>[DBA Workbench]を選択します。

    デモデータベースのステータスは、結果のデータベースリストに表示されます。 ステータスが "Active" の場合、以下の手順は不要となり、[DBA Workbench]アプリケーションウィンドウを閉じることができます。

    ステータスが "Active" でない場合は、以下の手順に従ってください。

  2. データベースリストの[SAG-DEMO-DB]を選択します。

  3. [Database]メニューの[Start]を選択します。

    データベースが開始したことを示すダイアログボックスが表示されます。

  4. [OK]ボタンを選択して、ダイアログボックスを閉じます。

  5. [DBA Workbench]アプリケーションウィンドウを閉じます。

Top of page

新しい名前でのプログラムの保存

このチュートリアルの残りの部分で使用する新しいプログラムを作成します。 新しいプログラムは、Hello World プログラムを新しい名前で保存することによって作成します。

Start of instruction setプログラムを新しい名前で保存するには

  1. [オブジェクト]メニューの[名前を付けて保存]を選択します。

    ヒント:
    プログラムエディタが選択されていることを確認します。 プログラムエディタが選択されていないと、上記のコマンドを使用できません。

    [名前をつけて保存]ダイアログボックスが表示されます。

  2. プログラムの新しい名前として「PGM01」と指定します。

  3. [OK]ボタンを選択します。

    新しい名前がプログラムエディタのタイトルバーに表示されます。

    ライブラリワークスペースで、新しいプログラムが Programs ノードに表示されます。 このプログラムはまだ格納されていないため、プログラムアイコンに緑色の点は表示されません。

    Programs node

  4. プログラムエディタですべてのコードを削除します(例えば、Ctrl キーを押したまま A キーを押してすべてのテキストを選択してから、Delete キーを押します。これは Windows の標準機能です)。

Top of page

ビューを使用した必須データの定義

プログラムで使用するデータベースファイルおよびフィールドは、プログラムの先頭にある DEFINE DATAEND-DEFINE との間で指定する必要があります。

Natural がデータベースファイルにアクセスできるようにするには、物理データベースファイルの論理定義が必要です。 このような論理ファイル定義は、データ定義モジュール(DDM)と呼ばれます。 DDM には、ファイルの個々のフィールドに関する情報が含まれます。 DDM は通常、Natural 管理者が定義します。

Natural プログラムでデータベースフィールドを使用できるようにするには、ビューで DDM からフィールドを指定する必要があります。 システムライブラリ SYSEXDDM には、サンプル DDM が用意されています。 このチュートリアルでは、EMPLOYEES データベースファイル用の DDM を使用します。

必要なフォーマットおよび長さの定義を含め、DDM からプログラムエディタにフィールドをインポートすることができます。

Start of instruction setDEFINE DATA ブロックを指定するには

Start of instruction setDDM からデータフィールドをインポートするには

  1. LOCAL の下の行にカーソルを置きます。

  2. [プログラム]メニューの[インポート]を選択します。

    [データフィールドのインポート]ダイアログボックスが表示されます。

    Import data field

  3. [ライブラリ]ドロップダウンリストボックスから[SYSEXDDM]を選択します。

    [DDM]オプションボタンが選択されていると、定義済みのすべての DDM が[オブジェクト]リストボックスに表示されます。

  4. EMPLOYEES という名前のサンプル DDM を選択します。

    インポートできるデータフィールドがダイアログボックスの下部に表示されます。

  5. Ctrl キーを押して、次のフィールドを選択します。

    FULL-NAME
    NAME
    DEPT
    LEAVE-DATA
    LEAVE-DUE

  6. [インポート]ボタンを選択します。

    [ビューの定義]ダイアログボックスが表示されます。

    graphics/fs_viewname.png

    デフォルトでは、DDM 名がビュー名として選択されています。 他の任意の名前を指定できます。

  7. ビュー名として「EMPLOYEES-VIEW」と入力します。

  8. [OK]ボタンを選択します。

    [データフィールドのインポート]ダイアログボックスの[キャンセル]ボタンのラベルが[終了]になります。

  9. [終了]ボタンを選択して、[データフィールドのインポート]ダイアログボックスを閉じます。

    プログラムエディタで次のコードが挿入されました。

    1 EMPLOYEES-VIEW VIEW OF EMPLOYEES
      2 FULL-NAME
        3 NAME (A20)
      2 DEPT (A6)
      2 LEAVE-DATA
        3 LEAVE-DUE (N2)
    

最初の行には、ビューの名前およびフィールドが取得されるデータベースファイルの名前が含まれています。 最初の行は、常にレベル 1 で定義されます。 レベルは、行の先頭に示されます。 DDM のデータベースフィールドの名前は、レベル 2 および 3 で定義されます。

レベルはフィールドグルーピングと合わせて使用します。 2 またはそれ以上のレベル番号が付いたフィールドは、それより小さいレベル番号が付いた直前のグループの一部であるとみなされます。 グループで定義すると、グループ名を使用して一連のフィールド(または 1 つのフィールドだけでもよい)を参照することができます。 これは一連の連続フィールドを参照するのに便利で効果的な方法です。

各フィールドのフォーマットおよび長さは、カッコで囲んで示されます。 "A" は英数字を示し、"N" は数字を示します。

Top of page

データベースからのデータの読み込み

必須データの定義が完了したので、READ ループを追加します。 このループは、定義されたビューを使用してデータベースファイルからデータを読み込みます。 各ループでは、データベースファイルから 1 人の従業員を読み込みます。 この従業員の名前、部署、および休暇の残り日数が表示されます。 すべての従業員が表示されるまで、データが読み込まれます。

注意:
トランザクションが中止されたことを示すエラーメッセージが表示されることがあります。 これは通常、Adabas によって決められる非アクティビティタイムリミットを超えた場合に発生します。 このようなエラーが発生した場合は、最後に実行されたアクションを単に繰り返す(RUN コマンドを再発行するなど)必要があります。

Start of instruction setデータベースからデータを読み込むには

  1. END-DEFINE の下に次の行を挿入します。

    READ EMPLOYEES-VIEW BY NAME
    *
      DISPLAY NAME 3X DEPT 3X LEAVE-DUE
    *
    END-READ
    

    BY NAME は、データベースから読み込むデータが名前別にアルファベット順にソートされることを示します。

    DISPLAY ステートメントは、出力を列形式で配列します。 指定されたフィールドごとに列が作成され、列の上にヘッダーが表示されます。 3X は、列間に 3 文字分の空白が挿入されることを示します。

  2. プログラムを実行します。

    次の出力が表示されます。

    Page      1                                                  05-05-18  16:06:49
                                                                                   
            NAME           DEPARTMENT   LEAVE                                      
                              CODE       DUE                                       
    --------------------   ----------   -----                                      
                                                                                   
    ABELLAN                PROD04        20                                        
    ACHIESON               COMP02        25                                        
    ADAM                   VENT59        19                                        
    ADKINSON               TECH10        38                                        
    ADKINSON               TECH10        18                                        
    ADKINSON               TECH05        17                                        
    ADKINSON               MGMT10        28                                        
    ADKINSON               TECH10        26                                        
    ADKINSON               SALE30        36                                        
    ADKINSON               SALE20        37                                        
    ADKINSON               SALE20        30                                        
    AECKERLE               SALE47        31                                        
    AFANASSIEV             MGMT30        26                                        
    AFANASSIEV             TECH10        35                                        
    AHL                    MARK09        30                                        
    AKROYD                 COMP03        20                                        
    ALEMAN                 FINA03        20                                        
    

    DISPLAY ステートメントの結果、列ヘッダー(DDM から取得)に下線が引かれ、下線とデータの間に 1 行の空行が挿入されます。 各列の幅は、DEFINE DATA ブロックで定義された値(ビューで定義された値)と同じになります。

    各ページ上部のタイトルにはページ番号および日時が含まれ、これも DISPLAY ステートメントによって表示されます。

  3. Enter キーを繰り返し押して、すべてのページを表示します。

    すべての従業員が表示されると、プログラムエディタに戻ります。

    ヒント:
    すべての従業員が表示される前にプログラムエディタに戻るには、Esc キーを押します。

Top of page

データベースからの選択したデータの読み込み

前の出力は非常に長いため、それを制限します。 "Adkinson" で始まり "Bennett" で終わる範囲の名前のデータのみを表示します。 これらの名前はデモデータベースに定義されています。

Start of instruction set出力をデータの範囲に制限するには

  1. 新しい変数を使用する前に、それを定義する必要があります。 したがって、LOCAL の下に次の行を挿入します。

    1 #NAME-START        (A20) INIT <"ADKINSON">
    1 #NAME-END          (A20) INIT <"BENNETT">

    これらはユーザー定義変数であり、デモデータベースには定義されていません。 名前の先頭にあるハッシュ(#)は、ユーザー定義変数とデモデータベースに定義されているフィールドを区別するために使用されていますが、必須文字ではありません。

    INIT はフィールドのデフォルト値を定義します。 デフォルト値は、山カッコおよび引用符で囲んで指定する必要があります。

  2. READ ステートメントの下に次の行を挿入します。

    STARTING FROM #NAME-START
    ENDING AT #NAME-END
    

    プログラムは次のようになります。

    DEFINE DATA
    LOCAL
      1 #NAME-START        (A20) INIT <"ADKINSON">
      1 #NAME-END          (A20) INIT <"BENNETT">
      1 EMPLOYEES-VIEW VIEW OF EMPLOYEES
        2 FULL-NAME
          3 NAME (A20)
        2 DEPT (A6)
        2 LEAVE-DATA
          3 LEAVE-DUE (N2)
    END-DEFINE
    *
    READ EMPLOYEES-VIEW BY NAME
      STARTING FROM #NAME-START
      ENDING AT #NAME-END
    *
      DISPLAY NAME 3X DEPT 3X LEAVE-DUE
    *
    END-READ
    *
    END
    
  3. プログラムを実行します。

    出力が表示されます。 Enter キーを繰り返し押すと、数ページ後(Bennett という名前の最後の従業員のデータが表示された後)でプログラムエディタに戻ります。

  4. プログラムを格納します。

次の演習「ユーザー入力」に進みます。

Top of page