PowerBuilder 入門!! ~第 3 弾データベースへの接続~

みなさん、こんにちは!

このブログは、「PowerBuilder ってなに?」「PowerBuilder ってなにができるの?」という疑問に、IT 用語の解説もしつつ、簡単に分かりやすくお答えすることをモットーにしています。

気になる方はぜひ続きを見てみてくださいね。

キャラクター紹介

ねこぴ自己紹介

ねこぴ

PowerBuilder の新キャラクター?
(猫に見えるが)PowerBuilder の先生。
最近 15 秒間にコオロギが何回鳴いたかでその時の気温が分かることをネットで発見した。

ちまき自己紹介

ちまき

PowerBuilder をこれから学びたい開発初心者。
最近のマイブームは芋系スイーツを片っ端から制覇すること。

 

ある日の午後のこと・・・。

ねこぴ自己紹介

なんか気づいたらもう 9 月も終わりじゃん?

ちまき自己紹介

はい・・・

この調子であっという間にクリスマスですね・・・

ねこぴ余談

ハロウィンもさることながら、クリスマスも一緒に過ごす人いないから勉強ちょっとさぼってもい・・・

ちまき笑う

ささ!(スルー) PowerBuilder 勉強第 3 弾に入りますよ! 前回は データウィンドウの話 でしたよね。

ねこぴ説明

うう、そうだったにゃ。今回はデータベース接続をふかぼっていこう Yo! っていう感じだ Yo。

ちまき笑う

投げやりで急にチャラねこになるのやめてもらっていいですか

 

第 2 弾は PowerBuilder の最もハイパーな機能、データウィンドウに関してお話ししましたよね^^

データウィンドウを深堀っていく前に、今回はデータウィンドウ接続とその方法についてお話ししなければならないことに気づいた(計画性とは)ので、解説していきますね!

 

データウィンドウとは

いやーデータウィンドウすごかったですね。   
でも前回のだけではまだ完成ではないんですよね?

データウィンドウ説明

前回はアプリケーションをはじめから作成する手順、またデータウィンドウの立ち上げを勉強したけど、そのデータウィンドウを実際にデータベースと接続しなきゃいけないのにゃ。以下の方法で行うのにゃ。

 

前回のデータウィンドウの記事をもう試したよ!って方が見ている場合は下の画面まで仕上がっているはずです。

(仕上がってます、、、よね?☆)

 

アプリ外観_検索ボタン

 

これからアプリを動かすために作業を行っていくわけですが、その前にまずはアプリが動作する仕組みを説明させてください。

例えばですが「アプリが開くとこのように動かしたい、このボタンを押すと、こんなことが起きるようにしたい。」など、アプリに対して数えきれないご要望があると思います。

 

PowerBuilder ではアプリ設計で考えられる動作、例えば「アプリが開く時」、「アプリの検索ボタンを押下時」などの動作がプルダウンで選べるようになっていて、そこに希望の動作をコードで書いていけるという形になっています。

こやつ何を言っているか分からない、という方は下をご覧ください。

システムツリー1

システムツリーからアプリケーションオブジェクトをクリックして開いてください。

開いた画面上のドロップダウンリストボックスに open と表示されていますが、これはプルダウンになっており、表示されているイベントからアプリの動作を色々と選択することができます。

イベントプルダウン

アプリを作成する際、初めに記述する場所はこの「open」イベントになります。いわばすべての始まりの場所です。 open や close などのアプリの動作を、 PowerBuilder では「イベント」と呼びます。ここにコードを書いていくのですが・・・

  

 

おっと、その前に ini ファイルの説明を入れなくては・・・。

ini ファイルは、アプリケーションに関する設定を後から変更可能なように「編集可能なファイル」に保持しておくためのものです。 データベースの接続設定に限らず、例えば出力ファイルの保存先とか使用するプリンタ名とか、なんでも情報として保持できます。今回は、データベースに接続するための設定を保持している ini ファイルという設定で話を進めていきますね。

※現在ではレジストリや XML などを使う方法が一般的ではあるのですが、今回はシステムの環境を破壊する危険性がなく、分かりやすい ini ファイルによる設定方法を紹介したいと思います。


それでは ini ファイルの作成方法を見ていきましょう。

パワーバーにある「DB プロファイル」を押し、[編集] から [プレビュー] タブを押します。

パワーバー
編集ボタン
プレビュータブ

[プレビュー] タブには、 DB 接続構文というのがあります。これを [コピー] ボタンでコピーしちゃいましょう。
ini ファイル作成時に使用します。

次にテキスト(メモ帳など)を開いてください。そこに ini ファイルを作成します。記載方法は以下の通りです。
※サーバー名やパスワードはセキュリティの観点からモザイクにしています。

ini ファイルの図

[DB] という枠がありますが、これをセクションといいます。 [DB] セクションというのはアプリでデータベースに接続してデータを取得する必要がある場合、共通して使用したいデータベースの情報を載せておく場所です。先ほど DB プロファイルでコピーした情報は上記の記載方法に合わせて編集していきます。


ini ファイルの作成が完了したら、ローカルに作成するアプリファイルを保存する場所が作成されているかと思いますが、そこに保存しておきます。名前は「adr_test.ini」にしときましょうか。私はこのアプリが保存されている同じ場所に保存しました。

ini ファイル保存場所

 

ちなみに、 ini ファイルに格納された情報をアプリの実行中に何度も参照する場合、その度にファイルを読み込むのは効率が良くないですよね。こんなときにはアプリケーション全体で共有できる変数に保持しておくという手があります。このような変数を PowerBuilder では「グローバル変数」と言います。グローバル変数はアプリのどの処理からも参照することができます。それではその設定方法を以下に説明します。


システムツリー1

システムツリーからアプリケーションオブジェクトを選択して開きます。

左のプルダウンから「Declare」を選択し、中央のプルダウンから「Global Variables」を選択してください。

Declare プルダウン
Global Variables プルダウン

準備ができたら、下記のように記載します。

グローバル変数中身

「/*グローバル変数定義*/」という文字が見えますが、これは「以下のコードはグローバル変数定義に関して書いています」ということを説明しています。これを「コメント」と言います。コメントを書くこと自体は処理には影響がないのですが、書く理由としてコードを後から他の人が見たときに、何をやっているのか分かりやすいということが挙げられます。単一行コメントの場合は「//」、複数行コメントの場合は「/*」から「*/」で囲まれた範囲がコメントとして扱われます。


String は文字列を入れるための変数です。文字列とは文字の塊のことで、変数とは文字を入れるための専用の箱のようなものです。その箱に「gs_ini_path」という名前を付けておきましょう。 gs はグローバル(global)の文字列(string)の略です。

実際変数名はなんでもいいのですが、 PowerBuilder を含め他言語でもコードを書く上である程度書き方を決めておいた方がいいと思います。開発者ごとに命名規則がバラバラになってしまうと、混乱をきたしてしまう恐れがあるからです。

「””」は .\adr_test.ini が文字列なので付ける必要があります。これはプログラムを書くときのポイントです。

 

パス名はファイル名を含めた相対パスで記載しています。パスの表し方は絶対パスと相対パスの 2 通りあります。
違いについては以下を参照してください。

絶対パスと相対パスの違い

 
  • 絶対パス・・・目的のフォルダーやファイルまでの道筋をすべて記載しているパスのことです。
    (ex: C:\Users\myfile) 道案内で言うと、目的地までの住所という感じでしょうか。
  •  
  • 相対パス・・・目的のフォルダーやファイルがある場所を起点として、どこにあるか示すパスのことです。(ex: .\myfile) この例の場合は、デスクトップ上にフォルダーがある場合、デスクトップから見た myfile というフォルダーの位置を表しています。
ねこぴ説明

ここまでわかったかにゃ? ini ファイルの利点は他にもこんなことがあるにゃ。

  • ini ファイルの利点・・・データベース等の情報をコーディングしてしまうとコンパイル後に変更できないが、接続先などが変更されることや環境によって異なることを考慮し、ユーザーが書き換え可能な外部のファイルに情報を保存することもできる。
  •  
  • 次にグローバル変数の利点はこんなことがあるにゃ。
  • グローバル変数の利点・・・ ini ファイルに記載されている情報が必要になるたびに ini ファイルにアクセスするのは大変なので、グローバル変数に格納して、どのコードからも参照できるようにすると便利ということ。

 

ここから皆さんがさらに忘れていないか心配の open イベントに戻りますね。 open イベントに「何を書くの?」という方、接続したいサーバーによって若干書き方が異なりますが、今回はデータベースが Oracle ということにしておきます。以下をご覧ください。

Open 画面

まず「/*アプリケーション起動*/」ですが、これはここに記載するコードの内容がアプリケーションが起動するときの動きです、ということですね。

その次に「//接続情報の取得」とあります。これはデータベースに接続するアプリなので、データベースに接続する処理を書きます。ここで ini ファイル、そして ProfileString 関数の出番になります。

ProfileString 関数とは?

ini ファイルから情報を読み取り、 ini ファイルの値を返してくれる関数のこと。

書き方 : ProfileString(filename, section, key, default)

filename = ini ファイルの格納パス、 section = ini ファイル内のセクション([ ]で囲まれている)、 key = セクション内のキー、 default = 上記検索条件で値が見つからない場合に返す初期値)

データウィンドウとは

関数ってなんですか?

  

進化系芋スイーツの一種とか?

データウィンドウ説明

記載したら希望通りのことをしてくれる、魔法の呪文みたいな、召喚魔法みたいなやつにゃ。

プロファイルストリング

ini ファイルに保持されている情報は ProfileString 関数で取得することができます。書き方は、 ProfileString(filename, section, key, default)になっており、 filename が先ほど設定したグローバル変数に格納した ini ファイルの名前となる「gs_ini_path」、 section が ini ファイル内のどこの場所か([]で囲まれている個所です。)、 key が ini ファイルの [DB] セクションの左側に記載のある DBMS や ServerName などを記載します。最後の default はデータベースプロファイルのデータを欲しいと思って投げた ProfileString 関数が残念ながら失敗した(何の数値も返ってこない)場合、代わりに何を返すか設定する箇所です。「””」というのは空 (から) という意味です。つまり何も持ってくる値がない場合は、空文字が返ってくるということなのです。


SQLCA (トランザクションオブジェクト) は戻り値を受け取るという役割を果たしてくれます。その正体は外部とデータベースとのやり取りの窓口業務です。データベース接続に関することならデータベースの手前に出てきて、データベースとのやり取りはわしを通してください、と言っている方という認識でいてください。データベースがアイドルだとすれば、 SQLCA はいわばマネージャーです。

 

「//接続」の部分には CONNECT USING SQLCA; を使用ください。
これは実際にデータベースと接続するのに必要な記述です。

connect 部分

その下の IF の部分に関しては、 IF 構文といいます。 IF 構文というのは、「もしもこうなった場合は、こういう処理をしてね」という指示ができる構文です。ここに記載されているものはエラーハンドリングといいます。エラー内容をメッセージで表示することでエラーへの対処がしやすいので記載しておきます。


SQLCode は SQL の実行結果コードになっており、結果が 0 :正常 / 100 :データなし(SELECT 結果が 0 件) / -1 :エラーと分かれています。「<>」というのは「以外」という意味なので、この式では返ってくる値が 0 以外の場合ということになります。

if 部分

MessageBox はメッセージボックスを表示させるための関数です。「””」で囲われている部分が実際にメッセージボックスに表示される部分で、String(SQLCA.SQLCode) が「正常/データなし/エラー」のいずれかを数字で示しており、 SQLErrText はデータベース固有のエラーメッセージです。

MessageBox 関数とは?

メッセージボックスを表示してくれる関数のこと。

書き方: MessageBox (title, text, icon, button, default)

title = メッセージボックスのタイトル、 text = メッセージ内容、 icon = メッセージ内容に付随するアイコン、 button = メッセージのボタン(選択肢)、 default = ボタンの初期選択位置(左から1、2、3、の順番)

StopSign! は下のような赤い丸にバツマークのついたメッセージボックスを表示し、 OK! は OK ボタンを表示させるためのものです。

StopSign

最後の締めに RETURN と END IF を書きます。 RETURN は処理(この場合は open イベント)の終了を意味し、 END IF は IF 構文の終わりを意味します。 

 

open イベントの最後にはアプリを起動した際、どこの画面が一番最初に開くかを Open 関数で設定する必要があります。

open 関数

Open 関数とは?

アプリを起動して、最初に開く画面を設定してくれる関数のこと。

書き方: Open(windowname, parent)

windowname = 開くウィンドウ名、 parent = 親ウィンドウ名(チャイルド、ポップアップのみ)

 

最後に!以前作成したアプリウィンドウですが「w_adr_test」という名前で保存しましょう。お気づきの方もいるかもしれませんが、ウィンドウは w、データウィンドウは d を先頭に付けて名前を保存しています。これも先ほど説明させていただきました通り、他言語同様、 PowerBuilder でも名前を付ける上でかなり自由度が高いので、開発者によってばらばらにならないようにこのような開発規約(どういった名前をつけるかなど)を決めておくといいと思います。

システムツリー2

今回は、 windowname が w_adr_test になっているためその名前を書きます。今回親ウィンドウといって、 w_adr_test を上から支配しているウィンドウはいないため、 parent は書きません。

ではこれにて設定が終わりましたので、パワーバーにあるアプリケーション実行ボタンを押してみましょう!

実行ボタン

最初のアプリ画面が開いたら、データベースに思いが通じ見事両想いということになります。おめでとうございます!(ぱんぱかぱーん)

アプリ初期画面

まだデータが表示されていないので本当に思いが通じているのか不安ですが、エラーハンドリングのところで書いたエラーメッセージが出ていないということは・・・お察しください♡

SQL 文の複数テーブルをまたぐ場合や、自分で編集したい場合の記事はすみません!さらに深掘りした際に改めてお話させてください。

 

ちまき笑う

これでアプリが・・・動いた!

 

感激です!

ねこぴおすすめ

やっぱり自分が作ったものには
感激するものにゃね☆彡

 


それでは、最後におさらいをしましょう。

  • 結論
    • アプリをね、始める鍵とは、open イベント(字余りの程度が異常)       

いかがでしたでしょうか?

より詳しく PowerBuilder に関してお知りになりたい方は、 Appeon 社の製品サイトをチェックしてみてください。

「難しい言葉は簡単に、分かりやすく」をモットーに、今後も PowerBuilder についてお伝えしていきたいと思いますので、どうぞよろしくお願いします!

テクニカルブログ 一覧を見る
PowerBuilder マイグレーション
PowerBuilder 2019 R3 日本語版リリース 紹介動画