初心者の憂鬱:DataWindowから送信されているSQLはどうなっているの?
遅くなりましたが、あけましておめでとうございます。サポート部の Yama-chan です。2020年の今年はいろんな意味で節目の年で、PowerBuilder も今は英語版のみですが、今までのデスクトップアプリケーションの開発機能を強化しながら、新しく WebAPI を簡単に開発できる IDE もリリースされています。2020 TOKYO オリンピックも開催されますので、大変な一年そして有意義な一年になりそうです。私も引き続きいろんな疑問を解決しながら、一人前のビルダーを目指して成長して参りたい所存でございます。どうぞ、よろしくお願いいたします。
はじめに
PowerBuilder のどこがいいんですかと先輩ビルダーに聞くと、決まって
「そりゃ、DataWindow しかないだろう!、PowerBuilder の DataWindow がすごいよ」
という回答が返ってきます...
PowerBuilder の DataWindow はデータベースへのアクセス機能が強力らしく、データベースペインタ上でビジュアルに操作することができます。しかも SQL の構文を知らなくても簡単に利用できます。
なるほど...でも、気になります...
SQL の構文については少し理解しているので...DataWindow がデータベースとのやり取りでどのような SQL 文を送信しているのか?気になるところです。気になりだすと調べたくなるたちなので、いろいろと調べました。どうやらデバッグモードで実行した場合、SQLPreview イベントでブレークポイントを入れると、実行された SQL 文が確認できます。
準備
デフォルトでは DataWindow コントロールの SQLPreview イベントにコードの記述がないので、ブレークポイントを入れることができません。そこでブレークポイントを入れるためにイベント内に下記のようなコードを追加します。
integer li_cnt li_cnt = 0
皆さんも上記のコードを見れば、すでにお分かりでしょう。[ li_cnt = 0 ] 行のところにブレークポイントを入れています。
確認
データベースへのアクセスが発生すると、設定したブレークポイントの所で止まります。早速 DataWindow の Retrieve() 関数が実行された時の SQL 文を確認してみましょう。
赤い枠で囲まれている部分の「sqlsyntax」に SQL 文が格納されています。その行をマウスで右クリックし、ポップアップ表示されているメニューから「変数の編集」を選択すると、下記のような詳細画面が表示されます。
ちょっと見づらいので、新しい値の内容をコピーして、他のエディターで表示してみましょう。下図をご参照ください。
このサンプルはシンプルなものですが、JOIN などを多用して複雑な SQL 文の場合は整形するとかなり見やすくなります。
データベースのアクセスで予想と違う結果になった場合、この方法で SQL 文を確認することができます。またデータベースからの応答が遅い場合でも同様に発行されている SQL 文を確認し、最適化を図りパフォーマンスのチューニングにも役に立ちます。状況により、データベース側でどのような SQL 文を受け取ったかについても確認する必要があります。その場合はデータベース側のトレースツールを使用して確認するとよいでしょう。
まとめ
今回は DataWindow とデータベース間のやり取りで実行されている SQL 文の確認方法について紹介しました。SQL の勉強にもなりますので、皆さんもぜひやってみてください。
世界中のビルダーを目指している皆さんが大活躍できますよう、そして素晴らしい一年になりますよう心から祈っております!!