初心者の憂鬱:データウィンドウでのハマり所

初心者の憂鬱

こんにちは、サポート部の Yama-chan です。

先日デモアプリを作成した際に、ちょっとしたことでハマってしまいました。今回はそれについて紹介したいと思います。自分が PowerBuilder を触り始めて 1 年半ぐらいで、社内のベテランビルダーのアドバイスで解決しましたが、もし周りに詳しい方がいなければ解決するまでに時間がかかるだろうと思い、この経験をブログにして少しでもお役に立てれば幸いです。


はじめに

作成したいと考えたデモアプリというのは、あるテーブルのデータをグリッドデータウィンドウを使い一覧表示して、そして Excel のようにカラムに対して直接編集したり、または行を追加できたりするものです。最終的に REST API を使用したものに移行したいのですが、それについては別の機会で詳しく紹介します。

完成イメージは下図のようになります。

画面イメージ

テーブルから作成したかったので、PowerBuilder の DB ペインタを使用してデータベースに下図に示すようなテーブル:tusers を作成しました。

テーブル定義

それから、このテーブルのデータを表示するデータウィンドウ: d_tusers を作成し、メイン画面に配置されたデータウィンドウコントロール:dw_1 に割り当てます。下図を参照してください。

画面の設計

3 つのボタンにはそれぞれ以下のようにコードを追加します。データベース接続部分のコーディングは割愛します。

「取得」ボタン:テーブルの全件データを取得します。

dw_1.SetTransObject(sqlca)
dw_1.Retrieve()

「更新」ボタン:編集した内容をデータベースに保存するよう更新を実行します。新規に追加した行も含まれます。

dw_1.update()

「新規追加」ボタン:表の最後に 1 行を追加します。

dw_1.InsertRow(0)

いざ、実行

実行して「取得」ボタンを押すと、データが正しく取得できて表示されていることを確認できます。これが PowerBuilder の良いところですね。データベースを利用するアプリでも、サクッと作ってすぐに実行できます。なお、このデモアプリではエラーチェック処理が実装されていないので、実際の開発では必ず実装するようにしましょう。

ここまでは順調でしたが、更新できるかどうか確認するために住所を編集しようとした時でした。住所のカラムをクリックするとカラムの表示が真っ黒になり文字の編集ができません。。。

実行画面

。。。何か間違ったのでしょうか?

マニュアルを調べるにしても、どこを見ればよいのか分からないので、こういう時に頼れるのがベテランビルダーです。 (ただし、同じことを何回も聞くと怒られるので。。。一度聴いたらちゃんとメモしておきましょう。)

内容を話して聞いたところ、

「更新特性の指定」が設定されている?

と言われ、すぐにデータウィンドウオブジェクト:d_tusers を開いて、メニューの[行] → [更新特性の指定]を確認したところ、[更新可能]が有効になるようチェックされていませんでした。早速一番上にある[更新可能]にチェックをいれ、設定しようとしましたが、完了の「OK」ボタンが押せません。。。

更新特性の設定

どうやら、テーブルの主キーを選択する必要がありますが、先ほどテーブルを作成した際に主キーの定義がされていませんでした。主キーのないテーブルなんて、使えるのか?と反省しながら、DBペインタを開いて、「ID」を主キーとして追加した後に再度「更新特性の指定」を行い、無事に設定できました。


再度、実行

住所のカラムをクリックすると、同じくカラムが真っ黒になり文字の編集ができません。。。

どこから調べてよいのやら、まったく検討も付かないので、オドオドして再度ベテランビルダーに聞いてみると、

「タブ順序」が設定されてる?

慌てて、データウィンドウ:d_tusers を開いて、「タブ順序」ボタンを押すと、タブ順序の値が全部「0」になっていました。この状態ではカラムが読み取り専用となりますので、改めてカラムに順番をつけて、下図のように設定しました。

タブ順序の設定

豆知識

データウィンドウの SetTabOrder() 関数を使用してタブ順序を「0」に設定するとデータウィンドウオブジェクトを読み取り専用にすることが可能ですので、覚えておくと良いでしょう。条件に合わせて、一時的に編集できないようにするなどの場面で利用可能です。なお、元の状態に戻せるように設定する前に以前の状態をバックアップするようにしましょう。SetTabOrder() 関数の詳細に関してはマニュアルを参照してください。

integer OldTabNum
// OldTabNum を前のタブ順序値に設定します。
OldTabNum = dw_employee.SetTabOrder(4, 0)
... // 何らかの処理を行います。
// カラム 4 を、前のタブ値に復帰させます。
dw_employee.SetTabOrder(4, OldTabNum)
            

さて、三度目の正直。。。実行します

完成画面

今度は正しく表示されて、住所のカラムをクリックすると編集できるようになりました。「新規追加」ボタンを押すと、表の最後に1行が追加されます。名前などデータを入力後、「更新」ボタンを押すと、データが正しくデータベースに保存されていることを確認できます。無事に完成しました。


まとめ

今回のハマり所はどれも知っていれば大した事ではないですが、初めて PowerBuilder を利用される方にとっては、やはり難しいかもしれません。グリッドデータウィンドウでカラムの編集ができない場合はまず、下記の三点について確認してみましょう。

  • テーブルに主キーが定義されているか?
  • データウィンドウに対して更新特性の指定がされているか?
  • データウィンドウのカラムに対してタブ順序が設定されているか?

3 点目の「タブ順序」が設定されていればカラムを編集することができますが、タブ順序が設定されないのは主キーや更新特性の指定がないことが原因だったりするので 1 点目、2 点目についても注意しましょう。

PowerBuilder は慣れるとすごくいいんですが、ちょっと癖がありますよね?とよく聞かれますが、私もその通りだと思います。ただ、これは PowerBuilder に限った話ではありません。なんでもそうですが慣れてきて使いこなせるようになると、とても強力な開発環境になります。皆さんも頑張って頼れるビルダーになりましょう。

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