カタログテーブルのすべて(前編:カタログテーブルとは?)

カタログテーブル

「カタログテーブルを作成できなかったので・・・」

「初めて接続するときには PowerBuilder カタログテーブルのオーナとして・・・」

PowerBuilder IDE からデータベースに接続する際、このようなエラーに出くわした方も多いのではないでしょうか。

このエラーに煩わしさを感じているあなた・・・解決したくありませんか? そもそもカタログテーブルとは? 今回はそんなカタログテーブルとその役割、そしてエラーの回避方法について説明していきます!


・・・カタログテーブル?

まずは「カタログテーブルとは何か?」から語りましょう。 「テーブル」という名前から想像できるように、データベースのテーブルです。 PowerBuilder からデータベースに接続するときに自動で作成されます。 別名、拡張属性システムテーブルとも呼びます。 が、少し長いのでこのブログでは「カタログテーブル」で統一しますね。

PowerBuilder には各種の生産性を高める機能が備わっていますが、カタログテーブルもそのひとつ。 うまく使えば大人数のチームでの開発でもレイアウトの統一やデータウィンドウ作成のスピードアップが期待できます!

たとえば、これまでチームでの開発中にこんなことがあったんじゃ・・・?

ぼく

「検索画面、できました!😊」

リーダー

「・・・あのさぁ、金額の項目は全部桁区切りって言ったでしょ?」

リーダー

「あとマイナス値のフォントはね!」

リーダー

「それから、このテーブルから取ってくる項目は・・・」

ぼく

「・・・😰」

リーダー

「全画面統一で明朝体って仕様書に書いてあったよね?!😠」

リーダー

「あ! 区分項目がドロップダウンになってないじゃん!!😡」

ぼく

「・・・しゅん😢」

こんな経験、一度はありますよね! 項目ごとに表示書式や編集様式が決まっているなら何も言わずに統一してほしい。 そんな望みを叶えるのが「カタログテーブル」です。

カタログテーブルはアプリケーションで使用する DB のテーブルや列ごとにカラムのプロパティを保存しておける機能です。 保存されたプロパティはデータウィンドウ作成時に自動的にロードされ、各カラムに反映されます。 これにより SQL からデータウィンドウを作成した瞬間に各カラムのプロパティ設定は完了し、あとは位置を調整するのみ! ってことも可能です。


カタログテーブルをもっと詳しく!

カタログテーブルは PBCatTbl、PBCatCol、PBCatEdt、PBCatFmt、PBCatVld の 5 つで構成されています。

  • PBCatTbl
    • テーブルごとのフォントやフォントサイズなどの設定
  • PBCatCol
    • 列ごとのプロパティに関する設定
  • PBCatEdt
    • 編集様式に関する定義
  • PBCatFmt
    • 表示書式に関する定義
  • PBCatVld
    • 入力条件則に関する定義

それぞれのテーブルとその役割は上記のとおりですが、機能を使用する際は特に気にしなくてよいでしょう。 様々な設定や登録は PowerBuilder IDE からグラフィカルに行うことができます。 これらのテーブルは、使用している「DBプロファイル」で設定されている「カタログテーブルオーナ」に作成されます (未入力の場合はインターフェイスごとにデフォルトを使用)。

システムテーブルを表示

実際にどのような値が格納されているかはテーブルのデータを見ることで確認することができます。 初期状態ではこのテーブルが「データベース ペインタ」に表示されていませんが、「テーブル」を右クリックし「システム テーブルを表示」を ON にすることでテーブルの一覧に表示されるようになります。

これらのテーブルに、列ごとのフォントや色などの「書式設定」、エディットマスクやドロップダウンデータウィンドウなどの「編集様式」、カラムの「入力条件則」などなどが登録されます。 登録された各種プロパティは、データウィンドウ作成に使用される SQL からテーブル名/列名を参照し、カラムが配置される際にこれらのテーブルからロードされます。 開発者全員が同じデータベースのカタログテーブルを参照すれば、全員が同じプロパティ設定でデータウィンドウが作成されるというしくみです。


で、どんなことができるの?

はい。 それでは具体的に何ができるかというと・・・。

1. 表示書式を登録する

カラムに表示書式を設定するとき、こんなリストを見たことはありませんか? 書式の入力の右にある [▶] ボタンをクリックすると表示されます。 実は、このリストはカタログテーブルから情報を取得し表示されているものなんです。 カタログテーブルを気にしていなかった方も、知らず知らずのうちに使っていたかもしれませんね。

編集様式の選択

登録した覚えがないのに何故・・・と思われるのも当然。 初期状態でもプリセットとしていくつか登録されています。 数値の書式 “#,##0” なんかはよく使うと思うので最初から登録済みです。 ここに表示される書式を自分で登録することができます。 たとえば製品コードは “@@@@-@@-@@@@@” のように独自の書式を持っているものも多いのでは? このように、これから開発するシステムで頻繁に使用する書式については、メンバーがすばやく、そして間違いなく設定できるように登録しておくと便利ですね。

2. プロパティのひな型を登録する

表示書式の選択

日付の入力はエディットマスクの「ドロップダウンカレンダ」を利用し、 “yyyy/mm/dd” の書式で表示したい、といったように「編集様式」の種類やそのプロパティの設定、表示書式の組み合わせが仕様によって統一されている場合、その「ひな型」があると便利ですね。 そのひな型を登録できるという機能です。 設定できるプロパティはカラムの [編集] タブです。 その一番上にあるドロップダウン。 用途がわからず、いままで見て見ぬふりをしていませんでしたか・・・?

カタログテーブルに登録することで、ひな型の一覧がここに表示されます。 ここから選択すれば各種プロパティが一発で登録された設定に。 いつも空白が表示されているだけのこのドロップダウンも、ようやく日の目を見ることができます。

3. 入力条件則を登録する

データウィンドウには指定された条件で自動で入力チェック (バリデーション) を行える機能があります。 それが「入力条件則」です。 カラムごとに入力を許可する値の条件式とメッセージを入力することで、入力時に自動的にチェックが走ります。

入力条件則

その条件とメッセージをテーブルの列ごとにあらかじめ登録しておくことができます。 登録内容の反映については次で説明します。

4. テーブルの列にひな型を紐づける

1 ~ 3 で登録した設定をテーブルの列に紐づけることができます。 これにより、データソースからデータウィンドウを生成した際にその列を選択していると、編集様式や書式、入力条件則が設定済みの状態でカラムが配置されます。

これこそまさにカタログテーブルの真骨頂、ですね!

5. テーブル、列ごとにフォントや配置を登録する

4 で登録した設定に加え、データやラベルのフォントや文字の配置 (左寄せ、右寄せ、中央揃え) 、更にはカラムの幅や高さまで、テーブルや列ごとに設定することができます。 項目によっては、どの画面でも高さや幅が決まっているというものがありませんか? この機能で設定してしまえばカラムの配置と同時にサイズもビシッと設定済みにできます。

盛りだくさんですね。

これらの機能を駆使し、ある程度までオートマティックにデータウィンドウを設定することができます。 ちまちまとプロパティを設定していく作業は時間が掛かるし漏れも発生しやすいですよね。 そんな面倒からはもうおさらば (死語) です!


そんな話はいいからエラーを回避する方法を教えて!

ここで冒頭の話に戻りますが、DB 接続時の「カタログテーブルを作成できなかったので・・・」というエラーの話。

ここまで読んでいただいた方ならご理解いただけたものと思いますが、PowerBuilder IDE は初期状態でカタログテーブルを使用する設定になっていて、データベース接続時にこの機能を使う準備をします。 つまりデータベースに勝手にテーブルを作ろうとしてしまうんですね。 DB プロファイルで指定したログインユーザーで、「カタログテーブルオーナ」に指定したユーザー (スキーマ) に対してテーブルを作成 (Create) しようとして、そのユーザーにテーブルを作成する権限がないためエラーになっているというわけです。

そんなこんなで、解決する方法としては 3 つ。 「ログインユーザーにテーブル作成する権限を与える」か、「カタログテーブルオーナに指定しているユーザー (スキーマ) を変更する」か、そして「この機能を使用しない」かです。

1 つめの方法は単純で、テーブル作成する権限をログインするユーザーに与えてしまえ、というもの。 一度カタログテーブルが作成されてしまえば後は参照するのみなので権限を戻してあげれば安全ですね。 とはいえ、開発のためのテーブルをそんなところに作っていいのかという疑問もあります。

2 つめの方法は、カタログテーブルのために別のユーザー (スキーマ) を用意してあげるという考え方です。 ログインしたユーザーでもテーブルの Create が可能なユーザー (スキーマ) を用意してあげて開発者みんながそこを参照する。 これならアプリケーション内で利用するデータベースも汚れないですね。

いや、そもそも「カタログテーブルなんて知らないし、使ってないから余計なエラーは出ないでほしい」という方も多いでしょう。 実際、この機能を使わなくても十分に開発はできますからね。 これまでの話を聞いても「やっぱりいらない」という場合には機能自体を無効にすることができます。

IDE のメニュー [ツール | DB ペインタ(D)] から「データベースペインタ」を開きます。 データベースを開いた状態で更にメニューから [デザイン(D) | オプション(O)] で「DB 環境設定」ダイアログを開き、[全般] タブの「拡張属性の使用(U)」のチェックを外します。 これにより今後一切カタログテーブルの存在をチェックすることもなくなりますし、テーブルを作成しようとすることもありません。

DB環境オプション

まとめ

カタログテーブルについてはマニュアルにも詳しく記載されていないので、長年 PowerBuilder を愛用していたのに使い方を知らなかったという方もいるかもしれません。 でも、なんとなく便利そうな機能だなということはご理解いただけたでしょうか?

これを機に、この便利な機能がプロジェクトに生かせるかどうか検討してみてはいかがでしょうか? 後編ではカタログテーブルの設定方法とその利用の仕方について説明していきますのでお楽しみに!

以上、エイタでした。

テクニカルブログ 一覧を見る
PowerBuilder マイグレーション
PowerBuilder学習、動画で始めちゃう?