powerscript ボリューム 1 - powerbuilder.jp · 目 次 powerscript リファレンス...

358

Click here to load reader

Upload: phamphuc

Post on 12-Aug-2018

303 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript® リファレンス ボリューム 1

PowerBuilder®

11.5

Page 2: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DOCUMENT ID: 37781-01-1150-01

LAST REVISED: September 2008

Copyright © 2008 by Sybase, Inc. All rights reserved.

本書は Sybase ソフトウェアの付属マニュアルであり、新しいマニュアルまたはテクニカル ノートで特に示されないかぎり、後続のリリースにも付属します。このマニュアルの内容は、予告なく変更されることがありますが、Sybase,Inc. およびその関連会社では内容の変更に関して一切の責任を負いません。このマニュアルに記載されているソフトウェアはライセンス契約に基づいて提供されるものであり、無断で使用することはできません。

予定したソフトウェアのリリース日にのみアップグレードを提供します。本書に記載されている内容は、Sybase, Inc. およびその関連会社の書面による事前許可を得ずに、電子的、機械的、手作業、光学的、またはその他のいかなる手段によっても複製、転載、翻訳することを禁じます。

Sybase の商標は Sybase の商標ページ のサイト http://www.sybase.com/detail?id=1011207 に記載されています。記載の Sybase およびマークは Sybase, Inc の商標です。 ® はアメリカ合衆国における登録商標を示します。

Java およびすべての Java ベースのマークは、米国および他国における Sun Microsystems, Inc. の商標または登録商標です。

Unicode および Unicode のロゴは Unicode, Inc. の登録商標です。

本書で記載されている上記以外の社名および製品名は、各社の商標または登録商標の場合があります。

本書に記載されている内容は、将来予告なしに変更することがあります。また、本ソフトウェアおよび説明書を使用したことによる損害、または第三者からのいかなる請求についても、サイベース株式会社、その親会社である米国法人 Sybase,Inc. またはその関連会社は、一切の責任を負わないものとします。

Page 3: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

目 次

PowerScript リファレンス ボリューム 1 iii

本書について .................................................................................................................................. ix

第 1 部 POWERSCRIPT についてのトピック

第 1 章 PowerScript の基礎.................................................................................................... 3

コ メン ト ........................................................................................... 3識別子の命名.................................................................................... 5ラベル .............................................................................................. 7特殊な ASCII 文字 ............................................................................ 7NULL 値 ........................................................................................... 9予約語 ............................................................................................ 11代名詞 ............................................................................................ 12

Parent 代名詞 .......................................................................... 13This 代名詞 .............................................................................. 14Super 代名詞 ........................................................................... 15

継続行文字 ..................................................................................... 16ステート メン トの区切り子 ............................................................ 18空白文字 ......................................................................................... 18条件付きコンパイル ....................................................................... 19

第 2 章 データ型 ........................................................................................................................... 23

標準データ型.................................................................................. 23Any データ型.................................................................................. 28システム オブジェク ト データ型 ................................................... 31カタログ データ型 ......................................................................... 33EAServer での PowerBuilder データ型 .......................................... 33

第 3 章 宣言..................................................................................................................................... 35

変数の宣言 ..................................................................................... 35変数の宣言場所 ....................................................................... 35変数の使い方 ........................................................................... 37変数宣言のための構文 ............................................................ 40

Page 4: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

目 次

iv PowerBuilder

定数の宣言 ..................................................................................... 51配列の宣言 ..................................................................................... 52

配列要素の値........................................................................... 55可変長配列のサイズ ................................................................ 56配列についての詳細 ................................................................ 58

外部関数の宣言 .............................................................................. 61外部関数の引数のデータ型 ..................................................... 66外部関数の呼び出し ................................................................ 68外部変数の定義 ....................................................................... 68

リモート プロシージャ コールとしての DBMS ストアド プロシージャの宣言........................................................................ 69

第 4 章 演算子と式....................................................................................................................... 73

演算子 ............................................................................................ 73算術演算子 .............................................................................. 74関係演算子 .............................................................................. 76連結演算子 .............................................................................. 77

演算子の優先順位 .......................................................................... 78PowerBuilder 式のデータ型 ........................................................... 79

PowerBuilder での数値データ型 ............................................. 79String 型と Char 型の間の変換 ............................................... 82

第 5 章 構造体とオブジェク ト .............................................................................................. 83

構造体について .............................................................................. 83オブジェク トについて ................................................................... 84

ユーザ オブジェク トについて................................................. 86オブジェク トのインスタンス作成 .......................................... 87先祖と子孫の使い方 ................................................................ 88ガベージ コレクシ ョ ン ........................................................... 89構造体としてのユーザ オブジェク ト ...................................... 90

オブジェク ト と構造体の代入 ........................................................ 91構造体の代入........................................................................... 91オブジェク トの代入 ................................................................ 92自動生成するユーザ オブジェク トの代入............................... 93

第 6 章 関数とイベン トの呼び出し .................................................................................... 95

関数とイベン トについて ................................................................ 95関数とイベン トの検索と実行方法 ................................................. 98

関数の検索 .............................................................................. 98イベン トの検索 ....................................................................... 99

関数とイベン トのト リガまたはポスト ........................................ 100静的呼び出しと動的呼び出し ...................................................... 103

Page 5: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

目 次

PowerScript リファレンス ボリューム 1 v

静的呼び出し ......................................................................... 103動的呼び出し ......................................................................... 104

関数とイベン トの多重定義、 上書き、 拡張 ................................. 110関数の多重定義と上書き ....................................................... 110イベン トの拡張と上書き ....................................................... 111

関数とイベン トへの引数の渡し方 ............................................... 112オブジェク トの渡し方 .......................................................... 113構造体の渡し方 ..................................................................... 114配列の渡し方 ......................................................................... 114

戻り値の使い方 ............................................................................ 115関数 ....................................................................................... 115イベン ト ................................................................................ 116カスケード呼び出しと戻り値の使い方 ................................. 116

PowerBuilder の関数とイベン トの呼び出し構文 ......................... 117先祖オブジェク トの関数とイベン トの呼び出し .......................... 121

第 2 部 ステート メン ト、 イベン ト、 および関数

第 7 章 PowerScript 文......................................................................................................... 127

値の代入文 ................................................................................... 128CALL ............................................................................................ 130CHOOSE CASE........................................................................... 131CONTINUE .................................................................................. 133CREATE....................................................................................... 134DESTROY.................................................................................... 138DO...LOOP................................................................................... 139EXIT ............................................................................................. 141FOR...NEXT ................................................................................. 142GOTO........................................................................................... 144HALT ............................................................................................ 145IF...THEN ..................................................................................... 146RETURN ...................................................................................... 148THROW........................................................................................ 149THROWS ..................................................................................... 150TRY...CATCH...FINALLY...END TRY .......................................... 151

第 8 章 SQL 文........................................................................................................................... 153

スクリプ トにおける SQL 文の使い方.......................................... 154動的 SQL の使い方 ...................................................................... 177

第 9 章 PowerScript のイベン ト ..................................................................................... 193

イベン トについて ........................................................................ 193

Page 6: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

目 次

vi PowerBuilder

Activate ........................................................................................ 197BeginDownload ............................................................................ 198BeginDrag .................................................................................... 198BeginLabelEdit ............................................................................. 202BeginLogScan.............................................................................. 203BeginRightDrag............................................................................ 204BeginSync .................................................................................... 206BeginUpload................................................................................. 207Clicked ......................................................................................... 208Close ............................................................................................ 214CloseQuery .................................................................................. 216CloseUp ....................................................................................... 218ColumnClick ................................................................................. 218ConnectMobiLink ......................................................................... 220Constructor................................................................................... 220DataChange ................................................................................. 222DateChanged ............................................................................... 222DateSelected................................................................................ 223DBError ........................................................................................ 223DBNotification .............................................................................. 226Deactivate .................................................................................... 228DeleteAllItems .............................................................................. 229DeleteItem.................................................................................... 229Destructor..................................................................................... 231DisconnectMobiLink ..................................................................... 231DisplayMessage........................................................................... 232DoubleClicked .............................................................................. 232DragDrop...................................................................................... 236DragEnter..................................................................................... 241DragLeave.................................................................................... 242DragWithin ................................................................................... 243DropDown .................................................................................... 246EndDownload............................................................................... 247EndLabelEdit................................................................................ 248EndLogScan................................................................................. 250EndSync....................................................................................... 250EndUpload ................................................................................... 251Error ............................................................................................. 252ErrorMessage............................................................................... 255ExternalException ........................................................................ 256FileExists...................................................................................... 259FileMessage................................................................................. 260Gesture ........................................................................................ 260GetFocus...................................................................................... 263

Page 7: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

目 次

PowerScript リファレンス ボリューム 1 vii

Help.............................................................................................. 264Hide.............................................................................................. 265HotLinkAlarm................................................................................ 266Idle ............................................................................................... 266InputFieldSelected ....................................................................... 267InsertItem ..................................................................................... 268ItemActivate ................................................................................. 268ItemChanged................................................................................ 270ItemChanging............................................................................... 271ItemCollapsed .............................................................................. 271ItemCollapsing ............................................................................. 272ItemExpanded .............................................................................. 274ItemExpanding ............................................................................. 275ItemPopulate ................................................................................ 276Key ............................................................................................... 276LineDown ..................................................................................... 278LineLeft ........................................................................................ 279LineRight ...................................................................................... 280LineUp.......................................................................................... 281LoseFocus.................................................................................... 282Modified........................................................................................ 284MouseDown ................................................................................. 286MouseMove.................................................................................. 288MouseUp...................................................................................... 291Moved .......................................................................................... 294Notify ............................................................................................ 295Open ............................................................................................ 296Other ............................................................................................ 299PageDown.................................................................................... 300PageLeft ....................................................................................... 301PageRight .................................................................................... 302PageUp ........................................................................................ 303PictureSelected ............................................................................ 304PipeEnd........................................................................................ 305PipeMeter..................................................................................... 306PipeStart ...................................................................................... 307PrintFooter ................................................................................... 307PrintHeader .................................................................................. 308ProgressIndex .............................................................................. 308ReceivingUploadAck .................................................................... 309SendDownloadAck....................................................................... 309PropertyChanged ......................................................................... 310PropertyRequestEdit .................................................................... 311RButtonDown ............................................................................... 312

Page 8: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

目 次

viii PowerBuilder

RButtonUp.................................................................................... 314RecognitionResult ........................................................................ 315RemoteExec................................................................................. 315RemoteHotLinkStart ..................................................................... 316RemoteHotLinkStop ..................................................................... 316RemoteRequest ........................................................................... 317RemoteSend ................................................................................ 318Rename........................................................................................ 318Resize .......................................................................................... 319RightClicked ................................................................................. 320RightDoubleClicked...................................................................... 322Save ............................................................................................. 324SaveObject................................................................................... 325Selected ....................................................................................... 326SelectionChanged........................................................................ 327SelectionChanging ....................................................................... 330Show ............................................................................................ 332Sort............................................................................................... 333SQLPreview ................................................................................. 336Start.............................................................................................. 337Stop.............................................................................................. 337Stroke........................................................................................... 338SyncPreview ................................................................................ 338SystemError ................................................................................. 339SystemKey ................................................................................... 340Timer ............................................................................................ 341ToolbarMoved .............................................................................. 343UploadAck.................................................................................... 344UserString .................................................................................... 345ValueChanged ............................................................................. 346ViewChange................................................................................. 346WaitForUploadAck ....................................................................... 347WarningMessage ......................................................................... 347

Page 9: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス ボリューム 1 ix

本書について

対象とする読者 このマニュアルは、PowerBuilder® を使ってクライアント サーバアプリケーション、多階層アプリケーション、または Web アプリケーションの開発に携わっているプログラマを対象にしています。

目的 このマニュアルは、PowerScript® 言語の変数、式、ステートメント、イベント、および関数など、その構文と使い方について解説しています。

2 つのボリューム このマニュアルは、次の 2 つのボリュームに分かれています。

関連マニュアル PowerBuilder のすべてのマニュアルの一覧については、PowerBuilder の『入門』マニュアルを参照してください。

そのほかの参照情報 製品に関するそのほかの詳細情報については、PowerBuilder DVD、ND ソフトウェア Web サイト、および Sybase 製品マニュアル Webサイト(英語)を参照してください。

• PowerBuilder DVD には、製品マニュアルが収められています。製品マニュアルは、PDF 形式で提供しています。PDF ファイルを読んだり、印刷したりするには、Adobe Acrobat Reader が必要です。Adobe Acrobat Reader は、Adobe Web サイトから無料でダウンロードすることができます。

• ND ソフトウェア Web サイトには、標準の Web ブラウザでアクセスすることができるオンライン版のマニュアルがあります。この Web サイトでは、PDF および HTML 形式でマニュアルを見ることができます。

オンライン版のマニュアルには、ND ソフトウェアのPowerBuilder のサイト http://www.powerbuilder.jp/ にある「技術情報」からアクセスできます。

• Sybase 製品マニュアル Web サイト(英語)は、標準の Web ブラウザからアクセスでき、Sybase の製品マニュアルのほか、EBF/メンテナンス、 技術文書などへのリンクも含んでいます。

ボリューム 内容

ボリューム 1 第 1 章~第 9 章

ボリューム 2 第 10 章(PowerScript の関数)

Page 10: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

x PowerBuilder

Sybase 製品マニュアル Web サイトには、Product Manuals のサイト

http://www.sybase.com/support/manuals/ からアクセスできます。

表記規則 このマニュアルは、以下の表記規則を使用します。

サポートについて 「サポート ハンドブック」を参照してください。

表記例 意味

Retrieve と Update 説明文で使用されている場合、左記のフォントは次のいずれかを表します。

• コマンド名、関数名、メソッド名

• true、false、null などのキーワード

• Integer 型、Char 型などのデータ型

• emp_id、f_name などのデータベース カラム名

• dw_emp、w_main などのユーザ定義オブジェクト

変数(variable)またはファイル名(file name)

説明文と構文の説明で使用された場合、斜体は次のいずれかを表します。

• myCounter などの変数名

• 入力テキストで pblname.pbd など入力が必要な部分

• ファイルとパス名

[ファイル|上書き保存] メニュー名やメニュー項目は、単純なテキストで記述されています。縦棒(|)は、メニューの選択順序を示します。たとえば、[ファイル|上書き保存]は、「[ファイル]メニューから[上書き保存]を選択する」 ことを示します。

dw_1.Update() このフォントは、以下のいずれかを表します。

• ダイアログボックスやコマンド ラインに入力する情報

• サンプル スクリプトの一部

• サンプル出力の一部

Page 11: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 部 PowerScript についてのトピック

Page 12: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix
Page 13: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 3

第 1 章 PowerScript の基礎

この章について この章では、PowerScript でプログラミングを行う上での規則や手法について解説します。

内容

コメント機能 コメントは、スクリプトに注釈を加えたり、スクリプト内のステー

トメントが実行されないようにしたりするためのものです。コメントを作成するには、2 つの方法があります。

構文 2 つのスラッシュを用いる方法

Code // Comment

スラッシュとアスタリスクを用いる方法

/* Comment */

項目 ページ

コメント 3

識別子の命名 5

ラベル 7

特殊な ASCII 文字 7

NULL 値 9

予約語 11

代名詞 12

継続行文字 16

ステートメントの区切り子 18

空白文字 18

条件付きコンパイル 19

Page 14: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

コメント

4 PowerBuilder

解説 次の表に、それぞれの使い方を示します。

表 1-1: スクリプトにコメント追加するための方法

コメント記号の追加

スクリプト ビューおよび関数ペインタでは、ペインタバーの[コメント行]ボタンをクリックするかメニュー バーの[編集|選択した行をコメントにする]を選択して、カーソルがある行または選択した複数の行をコメントにすることができます。

オブジェクトやライブラリ エントリにコメントを記述する方法については、PowerBuilder の『ユーザーズ ガイド』マニュアルを参照してください。

例 2 つのスラッシュを用いる方法

// この行はコメントです。// この行もコメントです。amt = qty * cost // ここから行末まではコメントです。

// 次のステートメントはコメント行のため// 実行されません。// SetNull(amt)

スラッシュとアスタリスクを用いる方法

/* 1 行のコメント文です。 */

/* コメント文は、この行から始まりこの行に続き、この行で終わります。 */

A = B + C /* ここからコメント文が始まります。 /* ここから入れ子のコメント文が始まります。

入れ子のコメント文はここで終わります。 */ 最初のコメント文はここで終わります。*/ + D + E + F

方法 記号 用途 注意

2 つのスラッシュ

// この記号よりも右側にある部分をすべてコメントとする

複数行にまたがることはできない

スラッシュとアスタリスク

/*...*/ これらの記号ではさまれた部分をコメントとする

入れ子状のコメント

• 複数行にまたがることができる(継続行文字は不要)

• 入れ子状にできる

Page 15: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 5

識別子の命名機能 変数、ラベル、関数、ウィンドウ、コントロール、メニューおよびス

クリプト内で参照するほかのすべてのものに名前をつけるときには、識別子を使用します。

構文 識別子には、以下の命名規約があります。

• 先頭は必ず文字または _(アンダースコア)にします。

• 予約語は使用できません(11 ページの「予約語」を参照してください)。

• 最大で 40 文字まで、スペースは使用できません。

• 英文の大文字と小文字を区別しません(PART、Part、part はすべて同じです)。

• 英文字、数字、および以下の特殊文字を任意に組み合わせることができます。

- ハイフン_ アンダースコア $ ドル記号 # シャープ記号 % パーセント記号

PowerBuilder における日本語名のサポートについては、以下のとおりです。

日本語名をサポートしているもの

• ライブラリ エントリとなるオブジェクトに埋め込まれるオブジェクト名(データウィンドウ カラムのオブジェクト名、メニュー項目名、コントロール名など)

日本語名をサポートしていないもの

• ライブラリ エントリとなるオブジェクト名(ウィンドウ名、メニュー名、データウィンドウ名、アプリケーション名、関数名、構造体名、ユーザ オブジェクト名など)

• オブジェクト関数名

• 関数の引数名

• 変数名

Page 16: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

識別子の命名

6 PowerBuilder

日本語のコントロール名について

日本語版 PowerBuilder では、コントロール名に日本語の接尾語を用いることができます。しかし、開発するアプリケーションを他国語に移植し日本語版以外の PowerBuilder 実行環境で動作させる計画がある場合や、将来、UNIX ワークステーションなどほかのプラットフォームへアプリケーションを移植する可能性がある場合は、日本語を含んだコントロール名が移植に支障を来すことが考えられます。日本語版PowerBuilder は、現在のところ Windows プラットフォームだけをサポートしますが、他国語やほかのプラットフォームへの移植の可能性がある場合は、コントロール名に日本語文字列を用いないでください。

解説 初期設定では、スクリプト内の変数名を含むすべての識別子にハイフン(-)を使用できます。ただし、スクリプト内で -(減算)演算子または -- 演算子を使用するときには、PowerBuilder に識別子ではなく式であることを認識させるために、演算子の前後にスペースを入れる必要があります。

スクリプト内で変数名にハイフンを使用できないようにするには、スクリプト エディタのプロパティ シートで[識別子にハイフンを使用]チェックボックスをオフにします。こうすれば、- 演算子や -- 演算子の前後にスペースを入れる必要はありません。

注意

変数名にハイフンを使用していて[識別子にハイフンを使用]チェックボックスをオフに変更した場合、次にコンパイルするとエラーとなりますので注意してください。

例 有効な識別子

ABC_CodeChild-IdFirstButtonresponse35pay-before%deductions$ORDER_DATEActual-$-amountPart#

無効な識別子

2nd-quantity // 先頭が数字になっています。ABC Code // スペースを含んでいます。Child'sId // 無効な文字を含んでいます。

Page 17: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 7

ラベル機能 GOTO 文で使用するためのラベルをスクリプト内で用いることができ

ます。

構文 identifier:

解説 ラベルには、任意の有効な識別子を使用できます。ステートメントより前に単独行として使用するか、ステートメントと同じ行の先頭で使用します。

GOTO 文の詳細については、144 ページの「GOTO」を参照してください。また有効な識別子については、5 ページの「識別子の命名」を参照してください。

例 ステートメントの前の単独行で使用する場合

FindCity:IF city=cityname[1] THEN ...

ステートメントと同じ行の先頭で使用する場合

FindCity:IF city=cityname[1] THEN ...

特殊な ASCII 文字機能 文字列の中で特殊な ASCII 文字を用いることができます。たとえば、

タブを入れてスペースを確保したり、中黒を入れてリスト項目を示したりすることができます。特殊文字の前にはティルダ(~)を付けます。タブは、ティルダの後に 1 回のキーストロークで入力できる一般的な ASCII 文字の 1 つです。中黒は、ティルダと、その後の、その値を表す 10 進、16 進、または 8 進の ASCII 値を使って入力することが必要です。

Page 18: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

特殊な ASCII 文字

8 PowerBuilder

構文 次の表のガイドラインに従ってください。

表 1-2: 文字列での特殊な ASCII 文字の使い方

例 ASCII 文字の入力 以下に、文字列中における特殊文字の使い方を示します。

10 進値、16 進値、8 進値の使い方 以下に、10 進、16 進、および 8 進のASCII コード値を使用して、文字列中に半角の中黒(•)を指定する方法を示します。

種類 用途 入力 摘要

一般的な ASCII 文字

改行 ~n

タブ ~t

垂直タブ ~v

キャリッジ リターン

~r

用紙送り ~f

後退 ~b

二重引用符 ~"

単引用符 ~'

ティルダ ~~

すべての ASCII 文字

10 進値 ~### ### = 000 ~ 255 までの 3 桁の 10 進数

16 進値 ~h## ## = 01 ~ FF までの 2 桁の 16 進数

8 進値 ~o### ### = 000 ~ 377 までの 3 桁の 8 進数

文字列 説明

"dog~n" dog という語の後に改行文字が続く文字列

"dog~tcat~ttiger" dog という語、タブ、cat という語、タブ、さらに tigerという語が続く文字列

値 説明

"~249" 10 進数の値が 249 の ASCII 文字

"~hF9" 16 進数の値が F9 の ASCII 文字

"~o371" 8 進数の値が 371 の ASCII 文字

Page 19: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 9

NULL 値機能 null は未定義を意味し、空文字列、0、あるいは 0000-00-00 の日付のい

ずれとも異なります。null は、0 でも 0 以外の値でもない未知あるいは未定義の値です。

一般に、null 値はデータベースの値に関してだけ使用します。

解説 変数の初期値 PowerBuilder は、すべての変数のデータ型に対して null値をサポートしていますが、変数の初期値に null 値を設定することはありません。変数の宣言時に値が設定されていない場合には、変数のデータ型のデフォルトの初期値が設定されます。たとえば、数値型の場合には 0、Boolean 型の場合には false、String 型の場合には空文字列

("")を設定します。

null 値を持つ変数 変数が null 値を保持できるのは、以下の場合に限られます。

• データベースから変数に null 値が代入される場合。データベースがnull 値をサポートしている場合、SQL の INSERT 文や UPDATE 文によってデータベースに null 値が送られると、データベースに null が書き込まれます。また、SELECT 文や FETCH 文によって、データベースから検索された null 値を変数に代入できます。

変数の null

変数に null 値が代入されると、その変数はスクリプト内で変更されるまで null 値のままです。

• SetNull 関数を使用して変数に明示的に null 値を設定する場合。次に例を示します。

string city // city は空の文字列です。SetNull(city) // city に NULL 値が設定されます。

関数および式における null 引数のいずれかが null 値の関数は、ほとんどが null を返します。また、null 値を保持する変数を用いた式は、null と評価されます。

null 値のブール式は未定義であり、false とみなされます。

null 値の確認 変数や式が null かどうかを確認するときには、IsNull 関数を使用します。null の確認には等号(=)は使用できません。

Page 20: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

NULL 値

10 PowerBuilder

有効 次のステートメントは、null を確認する正しい方法です。

IF IsNull(a) THEN ...

無効 以下のステートメントは、null を確認する間違った方法です。

IF a = NULL THEN ...

例 例 1 以下のどのステートメントを実行しても、コンピュータはビープ音を鳴らしません(変数 Nbr には null 値が設定されているので、ステートメントの各条件節は false と評価されます)。

int Nbr// Nbrは NULLに設定されますSetNull(Nbr)IF Nbr = 1 THEN Beep(1)IF Nbr <> 1 THEN Beep(1)IF NOT (Nbr = 1) THEN Beep(1)

例 2 以下の IF...THEN 文では、ブール式は false と評価されるので、ELSE節が実行されます。

int aSetNull(a)IF a = 1 THEN MessageBox("値 ", "a = 1")ELSE MessageBox("値 ", "a = NULL")END IF

例 3 これは、例 2 よりさらに便利な null ブール式の応用です。次の式は、どのコントロールにもフォーカスが設定されていない場合、メッセージを表示します。コントロールにフォーカスが設定されていなければ GetFocus 関数が null オブジェクトの参照を返し、ブール式がそれを false と評価し、したがって ELSE 節が実行されます。

IF GetFocus( ) THEN . . . // 何らかの処理ELSE MessageBox("重要 ", "オプションを指定してください。")END IF

Page 21: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 11

予約語PowerScript が内部的に使用する語を予約語と呼び、これらは、識別子としては使用できません。予約語を識別子として使用すると、コンパイラから警告が発せられます。アスタリスク(*)の付いた予約語は関数名として使用できます。

表 1-3: PowerScript の予約語

また、PowerBuilder のシステム クラスには、識別子として使用できないプライベート変数があります。このプライベート変数を識別子として使用した場合、情報メッセージが表示されて、識別子の名前を変更しなければなりません。

データウィンドウを Web に配布する場合、データウィンドウ オブジェクトのフィールドや区域の名前に JavaScript 予約語を使用することはできません。予約語のリストは、Sun Microsystems のサイト http://docs.sun.com/source/816-6410-10/keywords.htm (英語)で入手できます。

aliasandautoinstantiatecallcasecatchchooseclose*commitconnectconstantcontinuecreate*cursordeclaredeletedescribe*descriptordestroydisconnectdodynamicelseelseifendenumeratedevent

executeexitexternalfalsefetchfinallyfirstforforwardfromfunctionglobalgotohaltifimmediateindirectinsertintointrinsicislastlibraryloopnamespacenativenext

notofonopen*orparentpost*preparepriorprivateprivatereadprivatewriteprocedureprotectedprotectedreadprotectedwriteprototypespublicreadonlyrefreturnrollbackrpcfuncselectselectblobsharedstatic

stepsubroutinesupersystemsystemreadsystemwritethenthisthrowthrowstotriggertruetrytypeuntilupdate*updateblobusingvariableswhilewithwithinxor_debug

Page 22: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

代名詞

12 PowerBuilder

代名詞機能 PowerScript では、オブジェクトやコントロールの一般的な参照をする

ときに、代名詞を使用できます。代名詞を使用すると、オブジェクトやコントロールの名前が変更されてでも、そのまま参照されます。

解説 オブジェクト名を使用する関数やイベントのスクリプトで、代名詞を使用することができます。たとえば、代名詞を使用して以下のことが行えます。

• オブジェクトやコントロールのイベントを起動させる

• オブジェクトやコントロールを操作、変更する

• オブジェクトやコントロールのプロパティ値を取得、変更する

次の表に、PowerScript の代名詞とその簡単な使い方を示します。

表 1-4: PowerScript の代名詞

ParentWindow プロパティ メニュー オブジェクトの ParentWindow プロパティを、メニュー スクリプトの代名詞と同じように使用できます。このプロパティは、実行時にそのメニューと関連付けられているウィンドウを識別します。詳細については、PowerBuilder の『ユーザーズ ガイド』マニュアルを参照してください。

代名詞 対象スクリプト 参照先

This ウィンドウ、カスタム ユーザ オブジェクト、メニュー項目、アプリケーション オブジェクト、コントロール

オブジェクトまたはコントロール自体

Parent ウィンドウ内のコントロール

対象のコントロールが配置されているウィンドウ

カスタム ユーザ オブジェクト内のコントロール

対象のコントロールが配置されているカスタム ユーザ オブジェクト

メニュー 対象のメニュー項目の上位のメニュー項目

Super 子孫オブジェクトまたは子孫コントロール

Parent

子孫ウィンドウまたは子孫ユーザ オブジェクト

対象のウィンドウまたはユーザ オブジェクトのすぐ上の先祖

子孫ウィンドウまたは子孫ユーザ オブジェクト内のコントロール

対象のコントロールの親ウィンドウまたは親ユーザ オブジェクトのすぐ上の先祖

Page 23: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 13

次に、それぞれの代名詞について解説します。

Parent 代名詞機能 PowerBuilder スクリプトでの代名詞 Parent は、現行オブジェクトを所

有しているオブジェクトを参照します。

解説 代名詞 Parent は、以下のスクリプト内で使用できます。

• ウィンドウ内のコントロール

• カスタム ユーザ オブジェクト

• メニュー

Parent をどのスクリプトで使用するかによって、参照先が決まります。

ウィンドウのコントロール コマンドボタンなどのコントロールのスクリプト内で Parent を使用した場合、Parent は、そのコントロールが配置されているウィンドウを参照します。

ユーザ オブジェクトのコントロール カスタム ユーザ オブジェクト内のコントロールのスクリプトで Parent を使用した場合、Parent は、そのユーザ オブジェクトを参照します。

メニュー メニューに対するスクリプトで Parent を使用した場合、Parent は、そのスクリプトが対象とするメニュー項目の上位のメニュー項目を参照します。

例 ウィンドウのコントロール ウィンドウ内のコマンドボタンの Clickedイベントに対するスクリプトに、次のステートメントを記述した場合、このコマンドボタンをクリックすると、コマンドボタンが配置されているウィンドウが閉じます。

Close(Parent)

また、次のステートメントを記述した場合、このコマンドボタンをクリックすると、ウィンドウ内に水平スクロールバーが表示されます(ウィンドウの HScrollBar プロパティに true が設定されます)。

Parent.HScrollBar = TRUE

ユーザ オブジェクトのコントロール ユーザ オブジェクト内のチェックボックスの Clicked イベントに対するスクリプトに、次のステートメントを記述した場合、このチェックボックスをクリックすると、ユーザオブジェクトが非表示になります。

Parent.Hide( )

Page 24: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

代名詞

14 PowerBuilder

また、次のステートメントを記述した場合、このチェックボックスをクリックすると、ユーザ オブジェクトが使用できなくなります(ユーザ オブジェクトの Enabled プロパティに false が設定されます)。

Parent.Enabled = FALSE

メニュー メニュー項目[選択]の下位の[すべて選択]の Clicked イベントに対するスクリプトに、次のステートメントを記述した場合、[すべて選択]をクリックするとメニュー項目[選択]が使用できなくなります。

Parent.Disable( )

また、[すべて選択]の Clicked イベントに対するスクリプトに、次のステートメントを記述した場合、[すべて選択]をクリックすると[選択]にチェックマークが付きます。

Parent.Checked = TRUE

This 代名詞機能 PowerBuilder スクリプトでの代名詞 This は、ウィンドウ、ユーザ オブ

ジェクト、メニュー、アプリケーション オブジェクト、または現行スクリプトを所有するコントロールを参照します。

解説 This を用いる理由 代名詞 This を使って、所有権を明示できます。次のステートメントは、現行オブジェクトの X プロパティを参照します。

This.X = This.X + 50

使った方がわかりやすい場合 オブジェクトまたはコントロールのスクリプトで This を使用しなくても、オブジェクトやコントロールのプロパティを参照できますが、使用すれば、明確でわかりやすいスクリプトを記述できます。

必要な場合 どうしても This を使わなければならない状況もあります。グローバル変数またはローカル変数とインスタンス変数の名前が同じ場合、まずグローバル変数またはローカル変数が参照されます。このとき、This を使用すれば、インスタンス変数が先に参照されます。

EAServer の制限

EAServer コンポーネントで引数を渡す際には This は使用できません。

Page 25: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 15

例 例 1 メニューに対するスクリプトに、次のステートメントを記述した場合、そのメニュー項目にチェックマークが付きます。

This.Check( )

例 2 関数呼び出しで This を使用して、そのスクリプトを所有するオブジェクトへの参照を渡すことができます。

ReCalc(This)

例 3 This を省略した場合、次のステートメントの "x" は、ローカル変数 x が定義されていればそのローカル変数を参照し(スクリプトはコントロールの X プロパティではなく変数 x に 50 を加えます)、ローカル変数がない場合は、オブジェクトの X プロパティを参照します。

x = x + 50

例 4 This を使って、プロパティを確実に参照するようにします。たとえば、コマンドボタンの Clicked イベントに対するスクリプトに、次のステートメントを記述した場合、そのコマンドボタンをクリックすると、コマンドボタンの水平位置が変わります(つまり、コマンドボタンの X プロパティが変わります)。

This.x = This.x + 50

Super 代名詞機能 子孫オブジェクトや子孫コントロールの PowerBuilder スクリプトを記

述するときには、先祖に記述されている任意のスクリプトを呼び出すことができます。呼び出す際にすぐ上の先祖を指定するか、または予約語 Super を使用して、直接の継承元を参照できます。

解説 Super の使用条件 先祖関数を呼び出す際に Super を使用する必要があるのは、子孫が先祖関数と同じ名前で、同じデータ型の引数を取る関数を持っている場合だけです。それ以外の場合は、修飾子なしで関数を呼び出すことができます。

Super の制約 Super を使って、先祖ウィンドウ内のコントロールに関連付けられているスクリプトを呼び出すことはできません。Super が使用できるのは、呼び出す関数を所有する先祖の直接の子孫のイベントと関数だけです。それ以外のところで使用すると、コンパイル時に構文エラーが返されます。

コントロールに関連付けられているスクリプトを呼び出すには、CALL文を使用します。

130 ページの「CALL」の説明を参照してください。

Page 26: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

継続行文字

16 PowerBuilder

例 例 1 次のステートメントは、先祖関数 wf_myfunc を呼び出します(この場合、子孫にも wf_myfunc という関数があると考えられます)。

Super::wf_myfunc(myarg1, myarg2)

上記のステートメントは、子孫ウィンドウのスクリプトまたは関数の一部であり、子孫ウィンドウ内のコントロールのものではありません。たとえば、このステートメントを子孫ウィンドウ内のコマンドボタンの Clicked イベントに対するスクリプトで使用すると、コンパイル時に構文エラーが返されます。

引数を与えるには

先祖関数の引数の数を間違えないように注意してください。

例 2 コマンドボタンのスクリプトに次のステートメントを記述した場合、すぐ上の先祖ウィンドウまたはユーザ オブジェクトのコマンドボタンに対する Clicked スクリプトを呼び出します。

Super::EVENT Clicked()

継続行文字機能 通常は、1 行に 1 つのステートメントを記述しますが、ときには、複

数行にまたがって記述することが必要な場合があります。ステートメントの継続行文字はアンパサンド記号(&)です。アクセラレータ キーでアンパサンド文字を使用する方法については、PowerBuilder の『ユーザーズ ガイド』マニュアルを参照してください。

構文 Start of statement & more statement & end of statement

アンパサンド記号は、必ず行の終わりに記述します(行の途中にある場合、コンパイラはステートメントの一部とみなします)。

空白文字の詳細については、18 ページの「空白文字」を参照してください。

解説 以下の場合、継続行文字は使用できません。

• コメントの継続 コメントを次の行に続ける場合、継続行文字は使用できません。継続行文字もコメントの一部とみなされ、コンパイル時には無視されます。

Page 27: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 17

• SQL 文の継続 SQL 文を次の行に続ける場合、継続行文字を使用する必要はありません。PowerBuilder では、SQL 文の終わりには必ずセミコロン(;)を付けます。コンパイル時には、SQL 文の先頭からセミコロンまでが SQL 文とみなされます。このため、SQL 文中の継続行文字はステートメントの一部とみなされ、エラーとなります。

例 引用符付き文字列の継続

通常の方法 文字列の間に継続行文字(&)を入れて、引用符付き文字列を次の行に続けます。

IF Employee_District = "Eastern United States and&Eastern Canada" THEN ...

引用符内の継続行文字の前および継続行の先頭にあるタブやスペースなどの空白文字は、文字列の一部になります。

問題点 次のステートメントでは、継続行文字だけを使用してIF...THEN 文の中の引用符付き文字列を次の行に続けています。継続行の先頭にタブを入れて、スクリプトを読みやすくしています。この場合、タブも文字列に含まれてしまい、コンパイル時にエラーとなることがあります。

IF Employee_District = "Eastern United States and& Eastern Canada" THEN ...

よりよい方法 引用符付き文字列を継続するには、最初の行の終わりにくる継続行文字の前に引用符を記述し(その文字列を区切っているのが単引用符の場合には '& で、二重引用符の場合には "&)、次の行の先頭にプラス符号と引用符(+' または +")を記述します。この方法を用いると、文字列リテラルにタブやスペースなどの不要な空白文字が入るのを避けることができます。

IF Employee_District = "Eastern United States and "& +" Eastern Canada" THEN ...

(PowerBuilder のマニュアルでは、この方法で引用符付き文字列の継続行を表記しています。)

変数名の継続 ステートメントを次の行に続けるときは、変数名の間に継続行文字を入れることはできません。次のステートメントは、継続行文字によって変数名 "Quantity" を分割しているため、エラーとなります。

Total-Cost = Price * Quan& tity + (Tax + Shipping)

Page 28: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ステートメントの区切り子

18 PowerBuilder

ステートメントの区切り子機能 通常は 1 つのステートメントを 1 行に記述しますが、場合によっては、

複数のステートメントを 1 行に記述したいこともあります。ステートメントの区切り子にはセミコロン(;)を使用します。

構文 Statement1; statement2

例 次の行は、3 つの短いステートメントから構成されています。

A = B + C; D = E + F; Count = Count + 1

空白文字機能 スペース、タブ、用紙送りおよびコメントは、空白文字として扱われ

ます。コンパイル時には、空白文字は個数に関係なく区切り子として扱われます。

解説 文字列リテラルの空白文字 文字列リテラル(単引用符または二重引用符で囲まれている)に空白文字がある場合は、コンパイル時に無視されません。

識別子のハイフン 識別子にハイフン(-)が使用できる場合、マイナス符号の前後をスペースで囲む必要があります(5 ページの「識別子の命名」を参照してください)。それ以外の場合は、PowerBuilder はハイフンを変数名の一部とみなします。

Order - Balance // Order から Balance を減算します。Order-Balance // Order-Balance という変数名

例 例 1 次の式の中のスペースとコメントは空白文字として扱われ、コンパイル時に無視されます。

A + B /*Adjustment factor */+C

例 2 ただし、次の文字列リテラルの中のスペースは、無視されません。

"The value of A + B is:"

Page 29: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 19

条件付きコンパイル機能 条件付きコンパイル ディレクティブを使用すると、PowerBuilder プリ

プロセッサが、コード ブロックをコンパイラに渡す前に解析します。

構文 #IF { NOT } DEFINED predefined_symbols THENaction1

{ #ELSEIF DEFINED predefined_symbols THENaction2 }

{ #ELSEaction3 }

#END IF

解説 条件付きコンパイルを使用すると、特定のターゲットの種類または複数のターゲットの種類の PowerScript コードをアプリケーションに含めることができます。また、アプリケーションにデバッグ コードを含めて、プロジェクト ペインタでそのコードをアプリケーションの実行可能ファイルに含めるかどうかを指定できます。

プリプロセッサは、先頭に番号記号文字(#)のあるステートメントを空白行と置き換えます。プリプロセッサは、前のプリプロセッサ ディレクティブの条件が満たされたかどうかによって、action ステートメントのコードをコンパイラに渡すかまたは空白行に変換します。

以下の表に、事前定義されているシンボル、対応するプロジェクトの種類、およびコンパイラに渡されるコードへの影響を示します。

パラメータ 説明

predefined_symbols 事前定義された識別子、または事前定義された識別子を AND や OR 演算子で区切った組み合わせ。現行リリースでは、ユーザ定義識別子は使用できません。

action1、action2、action3

前のステートメントの条件が満たされている場合に実行するアクションです。

Page 30: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

条件付きコンパイル

20 PowerBuilder

表 1-5: 条件付きコンパイル用に事前定義されているシンボル

NOT 演算子を使用して、指定した種類を除くすべてのターゲットの種類のコードを含めることができます。また、AND および OR 演算子を使用して、シンボルを組み合わせることもできます。たとえば、次のステートメント以下のコードは、標準の PowerBuilder アプリケーションおよび .NET Windows フォーム以外のターゲットの場合は解析されます。

事前定義されているシンボル ターゲットの種類 プロセス ブロック中のコード PBNATIVE 標準の PowerBuilder

クライアント サーバアプリケーションまたは分散アプリケーション

標準のアプリケーションの場合は完全に解析され、.NET ターゲットの場合は空白行に変換されます。

PBWEBFORM .NET Web フォーム アプリケーション

.NET Web フォーム ターゲットの場合は完全に解析され、それ以外のターゲットの場合は空白行に変換されます。

PBWINFORM .NET Windows フォーム アプリケーション

.NET Windows フォーム ターゲットの場合は完全に解析され、それ以外のターゲットの場合は空白行に変換されます。

PBWEBSERVICE .NET Web サービス コンポーネント ターゲット

.NET Web サービス ターゲットの場合は完全に解析され、それ以外のターゲットの場合は空白行に変換されます。

PBDOTNET .NET Web フォーム アプリケーション、Windows フォーム アプリケーション、.NET アセンブリ、.NET Web サービス コンポーネント

.NET ターゲットの場合は完全に解析され、それ以外のターゲットの場合は空白行に変換されます。

DEBUG すべての PowerBuilder標準ターゲットおよび .NET ターゲット

プロジェクトの[DEBUG シンボル有効]チェック ボックスをオンにすると、コンパイラによりコードが完全に解析され、配布アプリケーションにコードが含められます。このチェック ボックスをオフにすると、コードが空白行に変換されます。DEBUGシンボルは、必ず開発環境で定義されます。

Page 31: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 1 章 PowerScript の基礎

PowerScript リファレンス 21

#if NOT defined PBNATIVE OR PBWINFORM then

同じコード行の始めに二重スラッシュ記号(//)を付けると、条件付きコード ブロックにコメントを追加できます。PowerScript の行継続記号(&)を条件付きコード文の中で使用することはできません。単一行のコードが複数行にまたがる場合は、条件付きブロックに埋めるコードの中で行継続記号を使用する必要があります。

制限とエラー メッセージ

条件付きコンパイルは、データウィンドウ構文、構造体、メニュー オブジェクトではサポートしていません。関数、イベント、変数定義の範囲に渡る条件付きコンパイル ブロックを含むオブジェクトのソース コードは編集できません。

DEBUG 条件付きブロックを追加した後に、アプリケーションを再構築する必要があります。

以下の表に、不正な条件付きコンパイル コードに対して表示されるエラー メッセージの種類を示します。

表 1-6: プリプロセッサから返されるエラー メッセージの種類

例 開発環境でアプリケーションを実行またはデバッグすると、必ず以下のコードが解析されてメッセージ ボックスが表示されます。実行可能ファイルを実行すると、プロジェクト ペインタの[全般]ページでDEBUG シンボルが有効になっている場合にのみコードが解析されます。

#if defined DEBUG thenMessageBox("Debugging","Ctr value is " + string(i))

#end if

.NET ターゲットで条件付きコンパイルを使用する場合の例については、『アプリケーションとコンポーネントの .NET への配布』マニュアルの「条件付きコンパイルについて」のセクションを参照してください。

エラー メッセージ 説明

「不正な #if プリプロセッサステートメント」

#if 文に、定義済みシンボルがない、不正な定義済みシンボルが付いている、または then句がない

「#end if ディレクティブがありません」

#if 文に #end if 文がない

「予期しない プリプロセッサディレクティブ」

#else、#elseif、または #end if 文に先行する #if文がない場合に発生する

「プリプロセッサ シンタックス エラー」

#else や #end if 文の後に、コメント文字(//)が先行していないテキストがある場合に発生する

Page 32: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

条件付きコンパイル

22 PowerBuilder

Page 33: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 23

第 2 章 データ型

この章について この章では、PowerScript が提供する 4 種類のデータ型について解説します。

内容

標準データ型データ型 PowerBuilder の標準データ型は、多くのプログラム言語で用いら

れている一般的なデータ型で、Char、Integer、Decimal、Long、Stringなどがこれに相当します。PowerScript では、変数や配列を宣言するときに、これらのデータ型を使用します。

次に、PowerScript の標準データ型とその説明を示します。

Blob 大きなバイナリ オブジェクト。量を限定できないデータ(たとえば、一般的なバイナリ データ、画像データ、ワープロ文書などの大きなテキスト データ)を保持するのに使用します。

項目 ページ

標準データ型 23

Any データ型 28

システム オブジェクト データ型 31

カタログ データ型 33

EAServer での PowerBuilder データ型 33

Blob Integer または IntBoolean LongLong

Byte Long

Char または character Real

Date String

DateTime Time

Decimal または Dec UnsignedInteger、UnsignedInt、または UInt

Double UnsignedLong または ULong

Page 34: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

標準データ型

24 PowerBuilder

Boolean true または false です。

Byte 0 から +255 までの 8 ビット符号なし整数です。

リテラルの使い方 リテラル値を代入するには、 任意の正の整数(0 から255 の範囲)を使用します。先頭のプラス符号は必要ありません(18と +18 は同じ)。

1 123 200 +55 +200

Char または character 1 文字の Unicode 文字です。

アプリケーションにおいて、構文解析を要する文字データは、Char 型の配列として定義すると便利です。Char 型の配列の構文解析は、String型の構文解析より簡単かつ高速だからです。さらに、文字データを外部関数に渡す場合にも、String 型のかわりに Char 型の配列を使用した方がよいでしょう。

文字データを外部関数に渡す方法については、『アプリケーション テクニック』マニュアルを参照してください。String 型のデータを Char型のデータに代入したり、あるいはその逆の代入をしたりするときのデータ型の変換についての詳細は、82 ページの「String 型と Char 型の間の変換」を参照してください。

リテラルの使い方 リテラル値を代入するには、文字を単引用符または二重引用符で囲みます。

char cc = 'T'c = "T"

Date ハイフンで区切られた年(1000 ~ 3000)、月(01 ~ 12)、日(01 ~ 31)からなる日付です。

リテラルの使い方 リテラル値を代入するには、年、月、および日をハイフンで区切ります。

2001-12-25 // 2001 年 12 月 25 日2003-02-06 // 2003 年 2 月 6 日

DateTime 日付と時刻が 1 つになったデータ型です。データベースの DateTime 値を読み書きするためだけに使用します。DateTime 値を PowerBuilder で使用できるデータ型に変換するには、以下の関数を使用します。

• Date(datetime) 関数 データベースから読み込んだ後で、DateTime値を PowerBuilder の日付値に変換します。

• Time(datetime) 関数 データベースから読み込んだ後で、DateTime値を PowerBuilder の時刻値に変換します。

Page 35: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 2 章 データ型

PowerScript リファレンス 25

• DateTime(date, time) 関数 データベースの DateTime カラムに書き込む前に、日付と時刻(時刻はオプション)を DateTime 値に変換します。

マイクロ秒をサポートする DBMS では、PowerBuilder データベース インタフェースによって、マイクロ秒がサポートされています。

Decimal または Dec 最大 28 桁の符号付きの正または負の 10 進数です。28 桁の任意の位置に 小 数 点 を 入 れ る こ と が で き ま す。た と え ば、123.456、0.000000000000000000000001、12345678901234.5678901234 です。

リテラルの使い方 リテラル値を代入するには、小数点を持ち指数部を持たない任意の 10 進数を使用します。以下のものは省略できます。プラス符号(95 と +95 は同じ)、0 と 1 の間の数の小数点の左の 0(0.1と .1 は同じ)、整数の場合の小数点の右の 0(32.00 と 32.0 と 32 は同じ)。

12.34 0.005 14.0 -6500 +3.5555

Double 15 桁の精度で 2.2250738585073E-308 ~ 1.79769313486231E+308 および-2.2250738585073E-308 ~-1.79769313486231E+308 の符号付き浮動小数点数です。

Integer または Int -32768 ~ +32767 の 16 ビットの符号付き整数です。

リテラルの使い方 リテラル値を代入するには、任意の整数(正、負または 0)を使います。先頭のプラス符号は省略できます(18 と +18 は同じ)。

1 123 1200 +55 -32

Long -2147483648 ~ +2147483647 の 32 ビットの符号付き整数です。

リテラルの使い方 Integer 型と同じですが、より長い桁の数を使用できます。

LongLong -9223372036854775808~9223372036854775807 の 64 ビットの符号付き整数です。

リテラルの使い方 Integer 型と同じですが、より長い桁の数を使用できます。

Real 6 桁の精度で 3.402822E-38 ~ 3.402822E+38 および -3.402822E-38~-3.402822E+38 の符号付き浮動小数点数です。

リテラルの使い方 リテラル値を代入するには、後に E と整数が付いた10 進数を使います。スペースを用いることはできません。E の前の 10進数は、10 進数リテラルに対するすべての規則に従います。指数部(Eの後の整数)の前のプラス符号は省略できます(3E5 と 3E+5 は同じ)。

2E4 2.5E38 +6.02E3 -4.1E-2

Page 36: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

標準データ型

26 PowerBuilder

-7.45E16 7.7E+8 3.2E-38

String 可変長(0 ~ 1073741823)の Unicode 文字列です。

アプリケーションにおいて、名前や住所などの文字データのほとんどは、String 型で定義します。PowerScript 言語では、文字列中の英文の小文字を大文字に変換する関数や、先頭と末尾のブランクを削除する関数など、文字列を操作する関数が多数用意されています。

文字データを外部関数に渡す方法については、『アプリケーション テクニック』マニュアルを参照してください。String 型のデータを Char型のデータに代入したり、あるいはその逆の代入をしたりするときのデータ型の変換についての詳細は、82 ページの「String 型と Char 型の間の変換」を参照してください。

リテラルの使い方 リテラル値を代入するには、最大 1024 文字を単引用符や二重引用符で囲みます。文字列には長さが 0 の文字列や空白文字列も含まれます。

string s1s1 = 'This is a string's1 = "This is a string"

次のように、リテラルをほかの引用符で囲んで、String 型リテラルの中に引用符を組み込むこともできます。たとえば、次のステートメントは、文字列 Here's a string を返します。

string s1s1 = "Here's a string."

また、次のように、ティルダ(~)を使用して、String 型リテラルの中に引用符を組み込むこともできます。

string s1 = 'He said, "It~'s good!"'

複雑なネスト ティルダ(~)を使用して、文字列の中で引用符をネストさせて(入れ子状に)用いることができます。一番外側の対となる引用符が取り除かれ、各ティルダの後の文字がリテラルとして解釈されます。2 つのティルダは 1 つのティルダとして、ティルダと引用符は引用符として解釈されます。

例 1 次の文字列は、2 段階にネストされています。

"He said ~"she said ~~~"Hi ~~~" ~" "

まず、次のように解釈されます。

He said "she said ~"Hi ~" "

更に、次のように解釈されます。

she said "Hi"

Page 37: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 2 章 データ型

PowerScript リファレンス 27

最終的には、次のように解釈されます。

Hi

例 2 よくある例として、データウィンドウのプロパティを設定するModify 関数の引数に指定する文字列があります。この引数には、引用符を複雑に用いて何段階かにネストされた文字列を指定しなければならない場合があります。どちらの引用符を使うかについては、PowerBuilder がその文字列をどう解析するかを考慮します。次の二重引用符で囲まれた文字列は、Modify 関数の引数です。ティルダの数を少なくするために、単引用符と二重引用符を併用しています。

"bitmap_1.Invert='0~tIf(empstatus=~~'A~~',0,1)'"

二重引用符により、引数が文字列として解釈されます。単引用符で囲まれた Invert プロパティに代入される式の文字列、さらに、式の中に単引用符で囲まれた文字列 A が含まれています。まず、Modify 関数に対する引数が評価され、その後、Invert プロパティに単引用符で囲まれた式の文字列が代入されます。式の中の 2 つのティルダは 1 つのティルダとして解釈され、Invert プロパティに代入される文字列は次のようになります。

'0[tab]If(empstatus=~'A~',0,1)'

最終的には、ティルダと単引用符は単引用符として解釈され、プロパティの式が評価されて、該当するビットマップの色が設定されます。

例 3 文字列をネストする際には、いろいろな方法で引用符を指定できます。以下の Modify 関数に対する式は、同じ結果になります。

"emp.Color = ~"0~tIf(stat=~~~"a~~~",255,16711680)~"""emp.Color = ~"0~tIf(stat=~~'a~~',255,16711680)~"""emp.Color = '0~tIf(stat=~~'a~~',255,16711680)'""emp.Color = ~"0~tIf(stat='a',255,16711680)~""

引用符とティルダの規則 文字列の中で引用符をネストして用いる際に参考にしてください。

• ティルダの右隣の引用符は、文字列の終わりとしてではなくリテラルとして扱われます。

• 単引用符(')の対は、ティルダと二重引用符(~")の対のかわりに用いることができます。

• 2 つのティルダと単引用符(~~')の対は、3 つのティルダと二重引用符(~~~")の対のかわりに用いることができます。

Time 時(00 ~ 23)、分(00 ~ 59)、秒(00 ~ 59)、および秒未満(最大 6桁)からなる 00:00:00 ~ 23:59:59.999999 の 24 時間形式の時刻です。

Page 38: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Any データ型

28 PowerBuilder

マイクロ秒をサポートする DBMS では、PowerBuilder データベース インタフェースによって、マイクロ秒がサポートされています。

リテラルの使い方 時(00 ~ 23)、分(00 ~ 59)、秒(00 ~ 59)、および秒未満(最大 6 桁)からなる 00:00:00 ~ 23:59:59.999999 の 24 時間形式の時刻です。時分秒はコロンで区切り、秒未満は小数点で区切ります。

21:09:15 // 午後 9 時 9 分 15 秒

06:00:00 // 午前 6 時

10:29:59 // 午前 10 時 30 分 1 秒前

10:29:59.9 // 午前 10 時 30 分 0.1 秒前

UnsignedInteger、UnsignedInt、または UInt

0 ~ 65535 の 16 ビットの符号なし整数です。

UnsignedLong または ULong

0 ~ 4294967295 の 32 ビットの符号なし整数です。

Any データ型概要 PowerBuilder では、Any データ型もサポートしています。Any データ型

は、標準データ型、オブジェクト データ型、構造体、および配列など、何種類もの値を保持できます。Any データ型はその状況に応じて姿を変えるカメレオンのようなもので、代入された値のデータ型を使用します。

Any データ型は EAServer コンポーネント定義では使えない

PowerBuilder の Any データ型は PowerScript 固有のもので、EAServer コンポーネントの IDL ではサポートされていません。CORBA にも、実行時に任意のリーガル IDL 型になれる Any データ型がありますが、意味論的には PowerBuilder Any データ型と同じではありません。PowerBuilder の Any データ型はこのコンポーネント インタフェース定義から除外することが必要ですが、コンポーネント内部では使用できます。

宣言と代入 Any データ型の変数は、ほかの変数を宣言するのと同じように宣言します。また、Any データ型の配列は、配列の各要素に対して異なるデータ型の値を代入できます。

Page 39: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 2 章 データ型

PowerScript リファレンス 29

Any データ型の変数に値を代入するときは、代入文を使用します。Anyデータ型の変数には配列も代入できます。

Any データ型の変数に値を代入した後は、ClassName 関数を用いて変数の実際のデータ型を判別できます。

any la_spreadsheetdatala_spreadsheetdata = ole_1.Object.cells(1,1).valueCHOOSE CASE ClassName(la_spreadsheetdata)

CASE "integer"...

CASE "string"...

END CHOOSE

以下の規則は、Any データ型の変数に対する代入文に適用されます。

• Any データ型の変数には、どんなデータ型の値でも代入できます。

• Any データ型の変数を適切なデータ型の変数に代入するには、Anyデータ型の変数が保持している値のデータ型を知っていなければなりません。

制約事項 Any データ型の変数に配列を代入した場合は、配列要素にはアクセスできません。適切なデータ型の配列変数に Any データ型の変数を代入してから、配列要素にアクセスしてください。なお、Any データ型の配列変数に配列を代入した場合は、Any データ型の配列要素に直接アクセスできます。

Any データ型の変数に構造体を代入した場合は、ドット(.)表記を使用して構造体の要素にアクセスすることはできません。適切なデータ型の構造体に Any データ型の変数を代入してから、構造体の要素にアクセスしてください。

Any データ型の変数に値を代入した後は、その変数をデータ型のない汎用的な Any データ型の変数(代入前の状態)には戻せません。Anyデータ型の変数に null 値を設定しても、別のデータ型の値を代入しなければ、Any データ型の変数は、前に代入した値のデータ型を保持します。

演算子と式 Any データ型の変数が保持する値のデータ型が、演算子に対して適切な場合は、Any データ型の変数に対して演算ができます。値のデータ型が演算子に対して適切でない場合、アプリケーションの実行時にエラーとなります。

たとえば、Any データ型の変数 ia_1 と ia_2 が数値データを保持している場合、以下のステートメントは有効です。

any la_3

Page 40: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Any データ型

30 PowerBuilder

la_3 = ia_1 - ia_2

ia_1 と ia_2 が文字列を保持している場合は、連結演算子が使用できます。

any la_3la_3 = ia_1 + ia_2

しかし、ia_1 に数値が保持され、ia_2 に文字列が保持されている場合は、アプリケーションの実行時にエラーとなります。

データ型変換の関数 PowerScript のデータ型を変換する関数は、引数にAny データ型の変数も指定できます。Any データ型の変数は、関数を呼び出したとき、その関数の引数のデータ型に変換できる値を保持していなければなりません。

たとえば、Any データ型の変数 ia_any が文字列を保持している場合は、String 型の変数に代入できます。

ls_string = ia_any

変数 ia_any が数値を保持している場合、String 関数を呼び出して文字列

に変換できます。

ls_string = String(ia_any)

ほかの関数 関数の引数が Any データ型を認めない場合は、Any データ型の変数に正しいデータ型の値が保持されていても、変換関数を使わずに Any データ型の変数を使用することはできません。スクリプトをコンパイルするときに、Unknown function や Function not found などのコンパイル エラーとなります。

たとえば、次の Len 関数の引数に指定した式は、データウィンドウのString 型のカラムの値を示す式ですが、この式のデータ型は Any データ型です。

IF Len(dw_notes.Object.Notes[1]) > 0 THEN // 無効

次の Len 関数の引数に指定した式は、String 関数を使用して Any データ型の式を String 型に変換しているので有効です。

IF Len(String(dw_notes.Object.Notes[1])) > 0 THEN

Any データ型の式 スクリプトがコンパイルされるときにデータ型がわからないデータをアクセスする式は、Any データ型です。これに該当するのは、OLE オブジェクトやデータウィンドウ オブジェクトのデータをアクセスする式です。

myoleobject.application.cells(1,1).valuedw_1.Object.Data[1,1]dw_1.Object.Data.empid[99]

Page 41: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 2 章 データ型

PowerScript リファレンス 31

これらの式に指定したオブジェクトを変更すると、式のデータ型も変更されます。

データウィンドウ オブジェクトのデータを参照する式には、Any データ型の配列、構造体、構造体の配列を返すものもあります。データウィンドウ式の値を代入する際にパフォーマンスをよくするには、Anyデータ型の変数は使用しないで、適切なデータ型の配列や構造体にデータウィンドウ式の値を代入する必要があります。

Any データ型の使用上の注意

あらかじめデータ型がわかっている場合は、適切なデータ型の変数を使用するかわりに、Any データ型の変数を使用するのは避けてください。それには 2 つの理由があります。

• Any データ型の変数を使用すると、実行時の処理が遅くなるPowerBuilder はデータ型を判別するために、代入や式を実行する前に多くの処理を行います。特に、適切なデータ型の変数のかわりに、Any データ型の変数を使用した式をループ処理で何度も実行する場合は、パフォーマンスに大きな影響を及ぼします。

• Any データ型の変数を使用している場合は、コンパイル時にデータ型のチェックをしない Any データ型以外のデータ型は、コンパイル時に、データ型が正しいかどうかがチェックされます。Any データ型の変数を使用している場合、コンパイル時に見つかるようなエラーのいくつかは、アプリケーションを実行するまで見つけることができません。

システム オブジェクト データ型データ型としてのオブジェクト

システム オブジェクト データ型は PowerScript 独自のデータ型です。オブジェクト ブラウザの[システム]タブを選択して、すべてのシステム オブジェクトをリスト表示することができます。

PowerBuilder のアプリケーションでは、ウィンドウ、メニュー、コマンドボタン、リストボックス、グラフなどのオブジェクトを操作します。内部的には、PowerBuilder はこれらの各オブジェクトをデータ型として定義しています。通常、開発者は、これらのオブジェクトをデータ型として意識する必要はなく、PowerBuilder の各ペインタによってオブジェクトを定義して使用するだけです。

Page 42: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

システム オブジェクト データ型

32 PowerBuilder

しかし、データ型の階層構造によって、PowerBuilder がシステム オブジェクトをどのように管理しているかを知っていなければならない場合があります。たとえば、ウィンドウのインスタンスを作成するには、Window 型の変数を定義します。また、ウィンドウ内でポップアップするメニューのインスタンスを作成するには、Menu 型の変数を定義します。

PowerBuilder は、システム オブジェクトをクラスの階層構造によって管理しています。オブジェクトの各データ型がクラスに相当します。先祖オブジェクトと子孫オブジェクトの継承階層関係は、クラスによって形成されています。

例 オブジェクト ブラウザに表示されているすべてのクラスは、実際にアプリケーションの中で使用できるデータ型で、変数を定義できます。データ型がどんなクラスの変数でも定義できます。

たとえば、次のコードでは、ウィンドウとメニューの変数を定義しています。

window mywinmenu mymenu

ウィンドウ上に複数のコマンドボタンが配置されており、その中で最後にクリックされたボタンの情報を必要とする場合には、CommandButton型の変数を宣言して、その変数にウィンドウ上の情報が必要なボタンを割り当てることができます。

// ウィンドウのインスタンス変数として定義します。commandbutton LastClicked// ウィンドウ上のコマンドボタンの Clicked イベントに対するスクリプトに、以下のように記述します。// これは、ユーザが最後にクリックした// コマンドボタンの情報を提供するものです。LastClicked = This

LastClicked 変数は CommandButton 型のため、CommandButton コントロールのすべてのプロパティを持っています。上記のスクリプトを実行すると、LastClicked 変数のプロパティ値は、ウィンドウ内で最後にクリックされたボタンと同じになります。

データ型を介したオブジェクト インスタンスの操作についての詳細は、84 ページの「オブジェクトについて」を参照してください。

Page 43: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 2 章 データ型

PowerScript リファレンス 33

カタログ データ型カタログ データ型について

カタログ データ型(Enumerated datatypes)は、システム オブジェクトデータ型と同じように PowerScript 独自のデータ型です。カタログ データ型には、以下の 2 通りの用途があります。

• 関数の引数として

• オブジェクトやコントロールのプロパティを指定するため

オブジェクト ブラウザの[カタログデータ型]タブを選択して、すべてのカタログ データ型とその値をリスト表示することができます。

独自のカタログ データ型を作成することはできません。かわりに、定数変数セットを宣言し、初期値を設定することができます。51 ページの「定数の宣言」を参照してください。

カタログ データ型には、あらかじめ決められた値だけを代入できます。また、カタログ データ型の値の最後には感嘆符(!)が添えられます。たとえば、テキストの配置を指定するカタログ データ型の Alignment プロパティには、Center!、Left!、Right! の 3 つの値のうち、いずれか 1つを代入できます。

mle_edit.Alignment=Right!

不適切な構文

カタログ データ型の値を記述するときには、値を引用符で囲まないでください。コンパイル エラーが発生します。

カタログ データ型の利点

カタログ データ型には、標準データ型より優れた点があります。カタログ データ型が必要となるとき、コンパイラがそのデータをチェックし、そのデータ型が正しいものであることを確認できます。たとえば、カタログ データ型の変数にほかのデータ型や不正な値を設定した場合は、コンパイルされません。

EAServer での PowerBuilder データ型EAServer 6.0 以前の EAServer コンポーネント インタフェースは、すべて標準 CORBA IDL で定義されていました。次の表は、EAServerManager で使用される事前定義されたデータ型、同等の CORBA IDL型、およびマップされる PowerBuilder データ型を示したものです。

Page 44: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

EAServer での PowerBuilder データ型

34 PowerBuilder

EAServer 6.0 でのデータ型のマッピングについては、Sybase ProductManuals のサイトにある『CORBA Components Guide』マニュアルのPowerBuilder コンポーネントに関する章を参照してください。

表 2-1: EAServer での PowerBuilder データ型

EAServer Manager CORBA IDL PowerBuilder

Integer(16 ビット) Short Integer

Integer(32 ビット) Long Long

Integer(64 ビット) Long long LongLong

Boolean Boolean Boolean

Float Float Real

Double Double Double

String String String

Binary BCD::Binary Blob

Decimal BCD::Decimal Decimal

Money BCD::Money Decimal

Date MJD::Date Date

Time MJD::Time Time

Timestamp MJD::Timestamp DateTime

ResultSet TabularResults::ResultSet ResultSet

ResultSets TabularResults::ResultSets ResultSets

Void Void なし

Page 45: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 35

第 3 章 宣言

この章について この章では、変数、定数、配列の宣言方法とスクリプトでのそれらの参照方法、リモート プロシージャ コール(RPC)の宣言方法、およびダイナミック リンク ライブラリ(DLL)内の外部関数の宣言方法について説明します。

内容

変数の宣言概要 PowerBuilder スクリプトで変数を使うには、まず、変数のデータ

型と名前を指定して宣言しなければなりません。

変数は、標準データ型、オブジェクト データ型、構造体として宣言できます。オブジェクト データ型には、オブジェクト ブラウザに表示されるシステム オブジェクトや、システム オブジェクト型から派生したユーザ定義オブジェクトがあります。変数を宣言する際、ほとんどのデータ型の変数に初期値を指定できます。また、宣言した変数には、スクリプトで常に値を代入できます。

変数の宣言場所スコープ PowerScript 変数を宣言する場所を選択して、スコープを決定しま

す。インスタンス変数を宣言するときは、特定のスクリプトからの変数へのアクセスを制限するアクセス キーワードを指定できます。

項目 ページ

変数の宣言 35

定数の宣言 51

配列の宣言 52

外部関数の宣言 61

リモート プロシージャ コールとしての DBMS ストアド プロシージャの宣言

69

Page 46: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

変数の宣言

36 PowerBuilder

次の表に、変数の 4 つのスコープを示します。

表 3-1: PowerScript の変数のスコープ

グローバル変数、インスタンス変数、共有変数の宣言

グローバル変数、インスタンス変数、共有変数は、アプリケーション、ウィンドウ、ユーザ オブジェクト、またはメニューの各ペインタのスクリプト ビューで定義できます。グローバル変数は、関数ペインタで定義することもできます。

1 スクリプト ビューの最初のドロップダウン リストで[Declare]を選択します。

2 スクリプト ビューの 2 番目のドロップダウン リストで、宣言する変数の型を選択します。

3 スクリプト ビューのスクリプト作成領域で、宣言を記述します。

ローカル宣言 そのオブジェクトまたはコントロールのスクリプト内で、オブジェクトまたはコントロールに対してローカル変数を宣言します。

スコープ 説明

グローバル 変数が宣言されたアプリケーション内のどのスクリプトからでもアクセスできます。どのオブジェクトの定義にも依存しません。

インスタンス 変数が宣言されたオブジェクトに属し、そのオブジェクトのインスタンスに関連付けられます。オブジェクトのプロパティとみなすことができます。アクセス キーワードは、ほかのオブジェクトのスクリプトがインスタンス変数にアクセスできるかどうかを決定します。インスタンス変数は、アプリケーション オブジェクト、ウィンドウ、ユーザオブジェクト、メニューの各オブジェクトのインスタンスに属します。

共有 変数が宣言されたオブジェクトの定義に属し、そのオブジェクトのすべてのインスタンスで共有されます。共有変数は、オブジェクトを閉じて再度開いても、オブジェクトを閉じる前の値を保持しています。

共有変数のアクセス レベルは常にプライベートで、オブジェクトとそのオブジェクトに関連付けられたコントロールのスクリプトだけがアクセスできます。インスタンス変数は、アプリケーション オブジェクト、ウィンドウ、ユーザ オブジェクト、メニューの各オブジェクトのインスタンスに属します。

ローカル 変数が宣言されたスクリプトからだけアクセスできる一時的な変数です。スクリプトの実行が終了すると、変数の値は破棄されます。

Page 47: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 37

SQL カーソルの宣言 グローバル、共有、インスタンス、またはローカルの SQL カーソルも宣言できます。スクリプト ビューで、特定のスクリプトを開くか、変数宣言スコープを選択し、DECLARE SQL 文を記述するか、またはペインタバーかポップアップ メニューから[SQL 貼付]を選択します。

変数の使い方概要 PowerBuilder スクリプトで変数の値を使用または設定するには、変数

に名前を付けます。変数はコンパイル時に認識されなければなりません。つまり、あるスコープ内で宣言されていなければなりません。

変数の値が必要なときは、スクリプトのどこででも変数を使えます。たとえば、関数の引数や代入文で使うことができます。

変数の参照順序 スクリプトの実行中に修飾子のない変数の参照があった場合、PowerBuilder は、その変数を以下の順序で検索します。

1 ローカル変数

2 共有変数

3 グローバル変数

4 インスタンス変数

指定された名前の変数が見つかると、すぐにその変数の値が使用されます。

グローバル変数の参照 グローバル変数を参照するには、スクリプトでその変数の名前を指定します。ただし、そのグローバル変数と同じ名前のローカル変数や共有変数がある場合は、ローカル変数または共有変数が先に見つかります。

同じ名前のローカル変数や共有変数でマスクされているグローバル変数を参照するには、変数名の前にグローバル スコープ記号(::)を付けます。

::globalname

たとえば、次のステートメントでは、total という名前のローカル変数とグローバル変数の値を比較します。

IF total < ::total THEN ...

Page 48: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

変数の宣言

38 PowerBuilder

インスタンス変数の参照

アプリケーションでオブジェクトのインスタンスが開かれている場合は、スクリプトでそのオブジェクトのインスタンス変数を参照できます。どのオブジェクトのインスタンス変数を参照するかに応じて、インスタンス変数が宣言されているオブジェクトの名前でインスタンス変数名を修飾する必要があります。

修飾子のない名前の使い方 以下の場合、インスタンス変数をオブジェクト名で修飾しなくても参照できます。

• アプリケーション レベルの変数は、アプリケーション オブジェクトのスクリプトで参照できる

• ウィンドウ レベルの変数は、ウィンドウのスクリプトと、そのウィンドウにあるコントロールのスクリプトで参照できる

• ユーザ オブジェクト レベルの変数は、ユーザ オブジェクトのスクリプトと、そのユーザ オブジェクトにあるコントロールのスクリプトで参照できる

• メニューレベルの変数は、メニュー オブジェクトのスクリプト、つまり最上位レベルのメニュー、またはメニュー項目として含まれているメニュー オブジェクトのスクリプトのどちらかで参照できる

たとえば、ウィンドウ w_emp にインスタンス変数 EmpID が宣言されている場合、w_emp やそのウィンドウのコントロールのスクリプトでは、次に示すように、修飾子を使わずに変数 EmpID を参照できます。

sle_id.Text = EmpID

修飾子の使い方 上記以外では、ドット(.)表記を使って、インスタンス変数名をオブジェクト名で修飾する必要があります。

object.instancevariable

この条件は、パブリックのインスタンス変数だけに適用されます。プライベートのインスタンス変数は、修飾子の有無にかかわらず、変数が宣言されているオブジェクトの外部から参照することはできません。

たとえば、ウィンドウ w_emp の外部のスクリプトから w_emp のインスタンス変数 EmpID を参照するには、ウィンドウ名でインスタンス変数を修飾する必要があります。

sle_ID.Text = w_emp.EmpID

Page 49: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 39

次の場合も、インスタンス変数を参照するには、修飾子が必要です。たとえば、ウィンドウ w_emp にインスタンス変数 EmpID が宣言されており、そのウィンドウには Clicked スクリプトにローカル変数 EmpIDが宣言されているコマンドボタンがあるとします。そのスクリプトでインスタンス変数を参照する場合も、修飾する必要があります。

Parent.EmpID

修飾名としての代名詞の使い方

変数を参照するときにあいまいにならないように、オブジェクト変数には常に修飾名を使うとよいでしょう。修飾名を使えば、変数がローカル、インスタンス、共有のどのスコープで宣言されているかが明確になります。

修飾名を使ったままの汎用的なコードを記述するには、代名詞 This やParent を使ってオブジェクトを参照します。代名詞を使えば、参照するオブジェクトが変わっても、そのスクリプトを変更せずにそのまま使用できます。

ウィンドウのスクリプトでのウィンドウ変数 ウィンドウのスクリプトで、ウィンドウのインスタンス変数の名前を修飾するには、代名詞 Thisを使います。たとえば、ウィンドウに index という名前のインスタンス変数が宣言されている場合、同じ名前のローカル変数やグローバル変数がない限り、そのウィンドウのスクリプトでは、以下の 2 つのステートメントは同じです。

index = 5This.index = 5

コントロールのスクリプトでのウィンドウ変数 ウィンドウ上のコントロールのスクリプトで、ウィンドウ(コントロールの親)のインスタンス変数の名前を修飾するには、代名詞 Parent を使います。たとえば、

「index」という名前のローカル変数やグローバル変数がない限り、ウィンドウにあるコントロールのスクリプトでは、以下の 2 つのステートメントは同じです。

index = 5Parent.index = 5

変数名の重複ミス 「index」という名前のローカル変数やグローバル変数がある場合は、変数を参照するときに修飾名を使用しないと、ローカル変数またはグローバル変数が参照されます。オブジェクト変数を参照するつもりならば、これはプログラムのミスです。インスタンス変数とグローバル変数で同じ名前を使用すると、コンパイラはメッセージを表示します。

Page 50: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

変数の宣言

40 PowerBuilder

変数宣言のための構文単純な構文 最も単純な構文で PowerScript 変数を宣言する場合は、データ型と変数

名のみ記述します。次に例を示します。

datatype variablename

完全な構文 完全な構文を使うと、アクセス レベルと初期値を指定できます。配列や、Blob 型、Decimal 型など一部のデータ型には、以下のような追加情報を指定できます。

{ access } datatype { { size } } { { precision } } variablename { = value }{, variablename2 { = value2 } }

表 3-2: 変数宣言のパラメータ

パラメータ 説明

access (オプション)

(インスタンス変数の場合のみ)変数に対するアクセスキーワード。詳細については、46 ページの「インスタンス変数へのアクセス」を参照してください。

datatype 変数のデータ型。標準データ型、システム オブジェクト、事前に定義した構造体を指定できます。

Blob 型と Decimal 型は、カッコに任意の値を記述して、データのサイズや精度を指定できます。

{ size } (オプション)

(Blob 型の場合のみ)数値。変数のサイズを Blob のバイト数で指定して中カッコで囲みます。size を省略すると、Blob型変数の初期サイズは 0 となり、PowerBuilder によって実行時に用途に応じたサイズに調整されます。

スクリプトで宣言した Blob 型変数のサイズを超えるデータを代入すると、超過分を切り捨てたデータが保持されます。

{ precision } (オプション)

(Decimal 型の場合のみ)数値。小数点以下の桁数を指定して中カッコで囲みます。精度を指定しなければ、実行時にスクリプトでその変数に割り当てられた精度が適用されます。

variablename 変数の名前。5 ページの「識別子の命名」で前述したとおり、名前は PowerScript で有効な識別子でなければなりません。

同じデータ型の複数の変数を一度に宣言するには、変数名をカンマで区切ります。各配列には初期値を設定できます。

value (オプション)

変数の初期値となる適切なデータ型のリテラルまたは式

Blob 型の変数は、初期値を指定できません。

詳細については、42 ページの「変数の初期値」を参照してください。

Page 51: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 41

例 インスタンス変数の宣言

integer ii_total = 100 // 全体の株date id_date // 株が購入された日付

グローバル変数の宣言

string gs_name

共有変数の宣言

time st_process_startstring ss_process_name

ローカル変数の宣言

string ls_city = "Boston"integer li_count

Blob 型変数の宣言 以下のステートメントは、Blob 型の変数 ib_Emp_Picture を初期サイズ 0 で宣言します。データが代入されたときに、変数のサイズが調整されます。

blob ib_Emp_Picture

以下のステートメントは、Blob 型の変数 ib_Emp_Picture のサイズを100 バイトで宣言します。

blob{100} ib_Emp_Picture

Decimal 型変数の宣言 以下のステートメントは、Decimal 型で精度が小数点以下 2 桁の共有変数、sc_Amount と sc_dollars_accumulated を宣言します。

decimal{2} sc_Amountdecimal{2} sc_dollars_accumulated

以下のステートメントは、Decimal 型で精度が小数点以下 4 桁の変数、lc_Rate1 と lc_Rate2 を宣言します。

dec{4} lc_Rate1, lc_Rate2

以下のステートメントは、Decimal 型で精度が小数点以下 0 桁の変数lc_Balance を宣言します。

decimal{0} lc_Balance

以下のステートメントは、Decimal 型の変数 lc_Result に精度を指定しません。変数 lc_Result は、Decimal 型で精度が小数点以下 2 桁の変数、lc_Op1 と lc_Op2 が代入された後は、小数点以下 4 桁の Decimal 型となります。

dec lc_Result

Page 52: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

変数の宣言

42 PowerBuilder

dec{2} lc_Op1, lc_Op2lc_Result = lc_Op1 * lc_Op2

変数のデータ型

PowerScript 変数は、以下のデータ型のいずれかで宣言できます。

• 標準データ型(Integer 型や String 型)

• オブジェクトやコントロール(window 型や CommandButton 型など)

• 開発者が定義したオブジェクトや構造体(mywindow という名前のウィンドウなど)。スクリプトのコンパイル時、定義したオブジェクトがアプリケーションのライブラリ探索パス内のライブラリになければならない

変数の名前

アプリケーションの設計段階で、PowerScript 変数の命名規約を標準化しておくとよいでしょう。命名規約を決めておくと、スクリプトが理解しやすくなり、変数名の衝突を防ぐこともできます。一般的には変数名に、スコープとデータ型を認識する接頭辞を付けます。たとえば、インスタンス変数の名前の先頭には、ii_count や is_empname のようにi を付け、Integer 型のローカル変数の名前は li_total、Integer 型のグローバル変数の名前は gi_total などにします。

命名規約についての詳細は、PowerBuilder の『ユーザーズ ガイド』マニュアルを参照してください。

変数名としての X と Y

x と y を一般的な変数名として使うこともできますが、PowerBuilder では、x と y は、オブジェクトの画面上の座標を指定するプロパティでもあります。x と y を変数として宣言しないで使っても、コンパイルエラーにはなりません。ただし、PowerBuilder は、ユーザがオブジェクトを移動するとみなして処理します。したがって、アプリケーション内で予期しない結果になることがあります。

変数の初期値

PowerScript 変数を宣言する場合、その変数のデフォルトの初期値を使用したり、宣言時に初期値を指定したりできます。

変数のデフォルト値 変数を宣言する場合に変数に初期値を設定しないときは、次の表に示すように、そのデータ型のデフォルト値が変数に設定されます。

Page 53: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 43

表 3-3: 変数のデフォルト値

初期値としてのリテラルの指定

変数の宣言時に変数に初期値を設定するには、変数とそのデータ型に適切なリテラルを等号(=)で結びます。特定のデータ型のリテラルについての詳細は、23 ページの「標準データ型」を参照してください。

関数の戻り値は使用できない

変数にグローバル ユーザ定義関数の戻り値を割り当てて、変数を初期値化すべきではありません。これは、正しくコンパイルされないか、割り当てられた値に関して混乱が生じるかもしれないからです。たとえば、次のような方法を用いてはいけません。

integer i = f_return_one()

グローバル システム関数や式を使用して、変数を変数宣言文内のコンパイル時の値で初期化できますが、ランタイム値の割り当てについては、別の文で変数を宣言して、値を割り当てる必要もあります。

次の宣言では、Integer 型の変数 li_count の初期値に 5 を設定します。

integer li_count=5

次の宣言では、Integer 型の変数 li_a と li_b の初期値にそれぞれ 5 と 10を設定します。

integer li_a=5, li_b=10

次の宣言では、String 型の変数 ls_method の初期値に文字列「UPS」を設定します。

string ls_method="UPS"

次の宣言では、String 型の変数 ls_headers の初期値にタブで区切られた3 つの単語を設定します。

変数のデータ型 デフォルト値

Blob サイズ 0、つまり空の Blob 型変数

Char(または Character) ASCII コード値の 0Boolean false

Date 1900-01-01(1900 年 1 月 1 日)

DateTime 1900-01-01 00:00:00

数値型(byte、Integer、Long、LongLong、Decimal、Real、Double、UnsignedInteger、UnsignedLong)

0

String 空文字列("")Time 00:00:00(午前 0 時)

Page 54: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

変数の宣言

44 PowerBuilder

string ls_headers = "Name~tAddress~tCity"

Page 55: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 45

次の宣言では、Integer 型の変数 li_a と li_c の初期値にそれぞれ 1 と 100を設定し、Integer 型の変数 i_b に Integer 型のデフォルト値 0 を設定します。

integer li_a=1, li_b, li_c=100

次の宣言では、Date 型の変数 ld_StartDate の初期値に 2004 年 2 月 1 日を設定します。

date ld_StartDate = 2004-02-01

初期値としての式の指定

次のように、既存の変数または式の値を、変数の初期値として設定できます。

integer i = 100integer j = i

このように宣言すると、スクリプトをコンパイルしたときに、2 つ目の変数の初期値として最初の式の値が設定されます。変数の初期値は、アプリケーションの実行時に再評価されません。

式の値が変わる場合 式の値は、アプリケーションの実行時ではなくコンパイル時に、変数に設定されます。したがって、式の値は現行の条件に基づいた値ではありません。式の値がアプリケーションの実行時に変わる場合は、変数を宣言するときに初期値として式の値を設定しないでください。このような場合は、変数の宣言と値の代入を別々のステートメントに記述します。

次の宣言では、変数 d_date の値に、スクリプトがコンパイルされた日付が設定されます。

date d_date = Today( )

次の宣言では、変数 d_date の値に、アプリケーションが実行された日付が設定されます。

date d_dated_date = Today( )

共有変数の初期化 スクリプトで共有変数を使うと、その共有変数はオブジェクトの最初のインスタンスが開かれたときに初期化されます。オブジェクトを閉じても、共有変数の値は、アプリケーションを終了するまで保持されます。このため、アプリケーションを終了しないで再びオブジェクトを開くと、共有変数にはオブジェクトを閉じたときの値がそのまま保持されています。

たとえば、ウィンドウのスクリプトで共有変数 Count に 20 を設定してウィンドウを閉じ、アプリケーションを終了しないで再びウィンドウを開いても、Count の値は 20 のままです。

Page 56: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

変数の宣言

46 PowerBuilder

ウィンドウのインスタンスを複数使用する場合

上記の例で、ウィンドウのインスタンスが複数存在する場合は、すべてのインスタンスで Count の値が 20 になります。共有変数は、ウィンドウのすべてのインスタンスで共有されるので、ウィンドウのインスタンスのいずれかで Count の値を変更すると、ほかのインスタンスのCount の値も変更されます。

インスタンス変数の初期化

インスタンス変数は、宣言されているウィンドウ、メニュー、またはアプリケーションの各オブジェクトが開かれるときに初期化されます。変数の初期値は、変数のデータ型のデフォルト値か、変数の宣言時に指定した値が設定されます。

オブジェクトを閉じるとインスタンス変数の値は破棄され、再びオブジェクトを開くと、インスタンス変数が再び初期化されます。

ウィンドウのインスタンスを複数使用する場合 ウィンドウのインスタンスが複数存在する場合に、そのインスタンスのいずれかのスクリプトを作成するときは、インスタンスごとに異なる値をインスタンス変数に保持できます。たとえば、ウィンドウのインスタンスの内容に基づいてフラグを設定するには、インスタンス変数を使います。

共有変数を使用する場合 以下のような変数が必要な場合は、インスタンス変数のかわりに共有変数を使います。

• オブジェクトの複数のインスタンスで、同じ値を保持する場合

• オブジェクトを閉じた後も、変数の値を保持する場合

インスタンス変数へのアクセス

説明 40 ページの「変数宣言のための構文」では、インスタンス変数を宣言するときに、その変数にアクセス キーワードを指定できることを説明しました。この節では、それらのキーワードについて説明します。

インスタンス変数にアクセス権を指定すると、その変数の参照レベルを制御でき、どのスクリプトでその変数名を認識できるかが決まります。

指定したアクセス権について、修飾子キーワードを使って操作上のアクセス権を制御できます。つまり、どのスクリプトが変数の値を読み込めるか、およびどのスクリプトが変数の値を変更できるかを指定できます。

Page 57: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 47

構文 { access-right } { readaccess } { writeaccess } datatype variablename

次の表に、インスタンス変数に対するアクセス権を指定するためのパラメータを示します。

表 3-4: インスタンス変数を宣言するときにアクセス権を指定するためのパラメータ

パラメータ 説明

access-right (オプション)

インスタンス変数を参照できるスクリプトの範囲を指定するキーワード。値は以下のとおりです。

• PUBLIC - (デフォルト)アプリケーション内のすべてのスクリプトが変数を参照できます。別のオブジェクトのスクリプトで変数を参照するときは、ドット(.)表記を使用して変数名を修飾し、その変数が属すオブジェクトを識別します。

• PROTECTED - 変数が宣言されているオブジェクトのスクリプトとそのオブジェクトの子孫スクリプトが変数を参照できます。

• PRIVATE - 変数が宣言されているオブジェクトのスクリプトだけが変数を参照できます。そのオブジェクトの子孫スクリプトは、変数を参照できません。

readaccess (オプション)

スクリプトで変数の値の読み込みを制限するキーワード。値は以下のとおりです。

• PROTECTEDREAD - 変数が宣言されているオブジェクトのスクリプトとその子孫スクリプトだけが変数を読み込めます。

• PRIVATEREAD - 変数が宣言されているオブジェクトのスクリプトだけが変数を読み込めます。

access-right が PUBLIC の場合、どちらのキーワードでも指定できます。access-right が PROTECTED の場合、PRIVATEREADだけが指定できます。access-right が PRIVATE の場合は、ほかのスクリプトからのアクセスを完全に制限するので、修飾子は指定できません。

readaccess を省略すると、すべてのスクリプトで変数を参照できます。

Page 58: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

変数の宣言

48 PowerBuilder

解説 アクセス修飾子を使うと、特定のオブジェクト変数に対するオブジェクトのアクセスをさらに制御できます。一般的には、パブリック変数を宣言して、オブジェクトのオーナーだけがその変数を修正できるようにします。

public protectedwrite integer ii_count

アクセス権キーワードをラベルとして指定することによって、同じアクセス権が指定された宣言をグループ化できます。次の「アクセス権キーワードの別の形式」を参照してください。

エクスポートされるオブジェクトの構文を見ると、アクセス修飾子SYSTEMREAD や SYSTEMWRITE が使われている場合があります。これらのキーワードが指定された変数にアクセスできるのは、PowerBuilderだけです。このような変数をスクリプトや関数で参照することはできません。また、インスタンス変数を宣言する場合に、これらのキーワードを使うことはできません。

例 インスタンス変数を宣言するには、適切なペインタで[宣言|インスタンス変数]を選択します。

インスタンス変数の宣言では、アクセス キーワードを使って、変数へのアクセスを制御します。

writeaccess (オプション)

スクリプトで変数の値の変更を制限するキーワード。値は以下のとおりです。

• PROTECTEDWRITE - 変数が宣言されているオブジェクトのスクリプトとその子孫スクリプトだけが変数を変更できます。

• PRIVATEWRITE - 変数が宣言されているオブジェクトのスクリプトだけが変数を変更できます。

access-right が PUBLIC の場合、どちらのキーワードでも指定できます。access-right が PROTECTED の場合、PRIVATEWRITEだけが指定できます。access-right が PRIVATE の場合は、ほかのスクリプトからのアクセスを完全に制限するので、修飾子は指定できません。

writeaccess を省略すると、すべてのスクリプトで変数を変更できます。

datatype 有効なデータ型。40 ページの「変数宣言のための構文」を参照してください。

variablename 有効な識別子。40 ページの「変数宣言のための構文」を参照してください。

パラメータ 説明

Page 59: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 49

private integer ii_a, ii_npublic integer ii_Subtotalprotected integer ii_WinCount

次のプロテクト変数は、変数が宣言されたオブジェクトのスクリプトでのみ変更できます。そのオブジェクトの子孫スクリプトからは、変数を参照することができます。

protected privatewrite string is_label

次の変数のアクセス レベルは、デフォルトのパブリックですが、変数が宣言されたオブジェクトのスクリプトでのみ変数を変更できます。

privatewrite real ir_accum, ir_current_data

次の変数は、変数が宣言されたオブジェクトのスクリプトでのみ、変数を読み込むまたは書き込むことができます。ただし、変数名はパブリック レベルで保存されます。

public privateread privatewrite integer ii_reserved

オブジェクトの外部で認識されないプライベート変数 次の例では、ウィンドウ w_emp に、プライベートの Integer 型インスタンス変数 ii_int を宣言したとします。

private integer ii_int

スクリプトで、w_myemp という名前のウィンドウのインスタンスを宣言します。変数 ii_int のアクセス レベルはプライベートなので、ウィンドウのスクリプト以外のスクリプトから変数を参照することはできません。したがって、プライベート変数 ii_int を参照しようとすると、コンパイル時に変数が定義されていないというエラーが発生します。

w_emp w_myempw_myemp.ii_int = 1 // 変数が定義されていません。

アクセスが制限されたパブリック変数 次の例では、ウィンドウ w_empに、書き込みアクセスをプライベートに制限したパブリックの Integer型インスタンス変数 ii_int を宣言したとします。

public privatewrite integer ii_int

上記の例と同じスクリプトを記述した場合、コンパイル時に変数への書き込みができないというエラーが発生します。変数のアクセス レベルはパブリックなので変数は認識されますが、書き込みアクセスは許可されません。

w_emp w_myempw_myemp.ii_int = 1 // 変数への書き込みは行えません。

Page 60: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

変数の宣言

50 PowerBuilder

アクセス権キーワードの別の形式

説明 アクセス権キーワードをラベルとして指定することによって、アクセス権に応じて PowerScript 変数の宣言をグループ化できます。ラベルは、グループの先頭行に記述し、後にコロン(:)が続きます。

構文 access-right:

{ readaccess } { writeaccess } datatype variablename

{ access-right } { readaccess } { writeaccess } datatype variablename

{ readaccess } { writeaccess } datatype variablename

ラベルを付けた宣言のグループ内のいずれかの変数に対して、ラベルに指定したアクセス権とは別のアクセス権キーワードを指定すると、その変数のアクセス権だけを上書きできます。それ以外の変数では、ラベルに指定したアクセス権が有効です。

例 以下の宣言では、インスタンス変数に対して、アクセス権をラベルで指定します。最終行に宣言されている変数では、ラベルのパブリックがプライベートに上書きされます。

Private:integer ii_a=10, ii_b=24string is_Name, is_Address1Protected:integer ii_Unitsdouble idb_Resultsstring is_LnamePublic:integer ii_Weightstring is_Location="Home"private integer ii_test

以下のプロテクト宣言では、変数 idb_Results と is_Lname への書き込みを制限します。

Protected:integer ii_Unitsprivatewrite double idb_Resultsprivatewrite string is_Lname

Page 61: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 51

定数の宣言説明 初期値を設定できる標準データ型は、変数ではなく定数として宣言で

きます。定数を宣言するには、宣言内にキーワード CONSTANT を指定し、初期値を代入します。

構文 CONSTANT { access } datatype constname = value

次の表に、定数を宣言するときに使用するパラメータを示します。

表 3-5: 定数を宣言するためのパラメータ

解説 定数を宣言する場合は、初期値を指定する必要があります。そうしないとコンパイル エラーが発生します。また、定数を宣言した後に値を代入した場合、つまり子孫オブジェクト内で定数を再定義した場合も、コンパイル エラーが発生します。

例 PowerScript は、大文字と小文字を区別しませんが、以下のローカル定数の例では、定数名に大文字を使います。

constant string LS_HOMECITY = "Boston"constant real LR_PI = 3.14159265

パラメータ 説明

CONSTANT 変数のかわりに定数を宣言する。CONSTANT キーワードは、access キーワードの前か後に指定できます。

access (オプション)

(インスタンス定数の場合のみ)定数に対するアクセスキーワード。詳細については、46 ページの「インスタンス変数へのアクセス」を参照してください。

datatype 定数の標準データ型。Decimal 型の場合、中カッコで囲んだデータの精度を指定できます。Blob 型を定数にすることはできません。

PowerBuilder のデータ型についての詳細は、23 ページの「標準データ型」を参照してください。

constname 定数の名前。5 ページの「識別子の命名」で前述したとおり、名前は PowerScript で有効な識別子でなければなりません。

value 定数の値となる適切なデータ型のリテラルまたは式。valueは必須です。詳細については、42 ページの「変数の初期値」を参照してください。

Page 62: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

配列の宣言

52 PowerBuilder

配列の宣言説明 配列とは、インデックス番号を持つ、同じデータ型の要素の集まりで

す。PowerBuilder では、配列には 1 次元と多次元の配列があります。1次元配列では、サイズを固定または可変にできます。多次元配列は固定サイズです。配列の各次元は、2,147,483,647 バイトの要素を持つことができます。

配列を宣言するときには、変数名の後に角カッコを記述します。固定長配列を宣言する場合は、角カッコの中に次元サイズを指定します。

構文 { access } datatype variablename { d1, ..., dn } { = { valuelist } }

次の表に、配列を宣言するときに使用するパラメータを示します。

表 3-6: 配列を宣言するためのパラメータ

パラメータ 説明

access (オプション)

(インスタンス変数の場合のみ)変数に対するアクセスキーワード。詳細については、46 ページの「インスタンス変数へのアクセス」を参照してください。

datatype 変数のデータ型。標準データ型、システム オブジェクト、事前に定義した構造体を指定できます。

Decimal 型の場合、datatype の後に中カッコで任意の値を記述して、データの精度を指定できます。40 ページの「変数宣言のための構文」を参照してください。

decimal {2} variablename [ ]

配列では、サイズを指定した固定長の Blob 型はサポートされません。datatype の後に Blob 型のサイズを指定しても無視されます。

variablename 変数の名前。5 ページの「識別子の命名」で前述したとおり、名前は、PowerScript で有効な識別子でなければなりません。

同じデータ型の複数の配列を一度に宣言するには、角カッコで囲まれた次元のサイズと一緒に、配列名をカンマで区切ります。

Page 63: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 53

例 次の例では、可変長配列を宣言します。

integer li_stats[ ] // Integer 型の配列decimal {2} ld_prices[ ] // 小数点以下 2 桁の Decimal 型

// の配列blob lb_data[ ] // 可変長の Blob 型

//の配列date ld_birthdays[ ] // Date 型の配列string ls_city[ ] // String 型の配列

// 各文字列の長さは// 任意

次のステートメントでは、可変長の Decimal 型の配列を宣言します。この宣言では、配列の精度を指定しないので、配列の各要素の精度は、割り当てられる値の精度をとります。

dec lc_limit[ ]

固定長配列 次の例では、1 次元の固定長配列を宣言します。

integer li_TaxCode[3] // 3 個の要素を持つ Integer 型の配列string ls_day[7] // 7 個の要素を持つ String 型の配列blob ib_image[10] // 10 個の要素を持つ可変サイズの

// Blob 型の配列

[ { d1, ..., dn } ] 固定長配列の各次元のサイズを指定する、角カッコで囲まれた次元数分の整数値(各次元につき、d1 から dn)。

1 次元の可変長配列は、角カッコだけを指定します。

可変長配列のサイズの変更方法についての詳細は、56 ページの「可変長配列のサイズ」を参照してください。

固定長配列は、指定した整数値の数によって次元の数は決定され、その配列が使用できるメモリ サイズが確定されます。

固定長配列では、TO 表記を使用して、次元サイズではなく各次元に対する要素の範囲を指定できます。TO 表記を指定すれば、各次元の下限を変更できます。upperbound はlowbound より大きくなければなりません。

[ d1lowbound TO d1upperbound {, ... , ,dnlowbound TO dnupperbound } ]

{ valuelist } (オプション)

配列の各要素の初期値リスト。初期値はカンマで区切られ、リスト全体は中カッコ({})で囲まれます。初期値の数は配列の要素数よりも多くてはいけません。初期値のデータ型は、datatype と一致しなければなりません。

パラメータ 説明

Page 64: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

配列の宣言

54 PowerBuilder

dec{2} lc_Cost[10] // 10 個の要素を持つ Decimal 型の// 配列// 各要素の値は// 小数点以下 2 桁を持つ

decimal lc_price[20] // 20 個の要素を持つ Decimal 型の// 配列// 各要素の精度は、// 割り当てられる値の精度

配列のインデックス番号を変更する TO 表記の使い方 以下の固定長配列では、TO 表記を使って配列のインデックス番号の範囲を変更します。

real lr_Rate[2 to 5] // 4 個の要素を持つ Real 型の配列 // 各要素は Rate[2] から// Rate[5]

integer li_Qty[0 to 2] // 3 個の要素を持つ Integer 型// の配列

string ls_Test[-2 to 2] // 5 個の要素を持つ String 型の// 配列

integer li_year[76 to 96] // 21 個の要素を持つ Integer 型// の配列

string ls_name[-10 to 15] // 26 個の要素を持つ String 型// の配列

TO の間違った使い方 配列の各次元において、1 番目のインデックス番号より 2 番目の方が大きくなければなりません。したがって、以下の宣言は無効です。

integer li_count[10 to 5] // 10 は 5 よりも大きいので // 無効

integer li_price[-10 to -20] // -10 は -20 よりも大きい// ので無効

2 次元以上の配列 次の例では、6 つの要素を持つ 2 次元の Integer 型配列を宣言します。各要素は、li_score[1,1]、li_score[1,2]、li_score[1,3]、li_score[2,1]、li_score[2,2]、li_score[2,3] です。

integer li_score[2,3]

次の宣言では、各次元のインデックス番号を、1 ~ 5 および 10 ~ 25 に指定します。

integer li_RunRate[1 to 5, 10 to 25]

次の例では、45,000 個の要素を持つ 3 次元配列を宣言します。

long ll_days[3, 300, 50]

Page 65: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 55

以下の宣言では、2 次元と 3 次元の添え字の範囲を変更します。

integer li_staff[100, 0 to 20, -5 to 5]

以下の例は、多次元配列の宣言です。

string ls_plant[3,10] // 30 個の要素を持つ String 型の// 2 次元配列

dec{2} lc_rate[3,4] // 12 個の要素を持つ Decimal 型の// 2 次元配列// 精度は小数点以下 2 桁

次の例では、3 つの Decimal 型の配列を宣言します。

decimal{3} lc_first[10],lc_second[15,5],lc_third[ ]

配列要素の値概要 配列の各要素は、宣言時に指定したデータ型のデフォルト値で初期化

されます。たとえば、次のように、Integer 型の配列を宣言します。

integer li_TaxCode[3]

各要素 li_TaxCode[1]、li_TaxCode[2]、li_TaxCode[3] は、すべて 0 に初期化されます。

基本的なデータ型のデフォルト値についての詳細は、42 ページの「変数の初期値」を参照してください。

1 次元配列 1 次元配列では、配列を宣言するときに、配列要素に初期値を指定することで、データ型のデフォルト値を上書きできます。初期値は、中カッコの中に値をカンマで区切って指定します。配列内のすべての要素に初期値を指定する必要はありませんが、最初の要素に初期値を指定していない場合は、それ以降の要素に初期値を指定することはできません。

多次元配列 多次元配列の場合も同様、初期値をカンマで区切って指定します。初期値を配列要素に代入すると、最初の次元が最も速く設定され、最後の次元が最も遅く設定されます。つまり、2 次元目のインデックス番号が 1 つ変わるごとに 1 次元目のすべての要素に初期値が設定され、3次元目のインデックス番号が 1 つ変わるごとに 2 次元目のすべての要素に初期値が設定されるという処理を繰り返して、配列内のすべての要素に初期値が設定されます。

Page 66: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

配列の宣言

56 PowerBuilder

値の代入

中カッコの中に値を指定することで、配列を宣言した後に値を代入できます。

integer li_Arr[]Li_Arr = {1, 2, 3, 4}

例 例 1 次のステートメントでは、3 つの初期値が設定された 1 次元の配列を宣言します。

real lr_Rate[3]={1.20, 2.40, 4.80}

例 2 次のステートメントでは、2 次元配列を初期化します。

integer li_units[3,4] = {1,2,3, 1,2,3, 1,2,3, 1,2,3}

初期値は、以下のように設定されます。

Li_units[1,1]、[1,2]、[1,3]、[1,4] は、すべて 1 になるLi_units[2,1]、[2,2]、[2,3]、[2,4] は、すべて 2 になるLi_units[3,1]、[3,2]、[3,3]、[3,4] は、すべて 3 になる

例 3 次のステートメントでは、3 次元配列の最初の半分の要素を初期化します。

integer li_units[3,4,2] = & {1,2,3, 1,2,3, 1,2,3, 1,2,3}

初期値は、以下のように設定されます。

Li_units[1,1,1]、[1,2,1]、[1,3,1]、[1,4,1] は、すべて 1 になるLi_units[2,1,1]、[2,2,1]、[2,3,1]、[2,4,1] は、すべて 2 になるLi_units[3,1,1]、[3,2,1]、[3,3,1]、[3,4,1] は、すべて 3 になるLi_units[1,1,2]、[1,2,2]、[1,3,2]、[1,4,2] は、すべて 0 になるLi_units[2,1,2]、[2,2,2]、[2,3,2]、[2,4,2] は、すべて 0 になるLi_units[3,1,2]、[3,2,2]、[3,3,2]、[3,4,2] は、すべて 0 になる

可変長配列のサイズ概要 可変長配列には、変数名の後に、数値が指定されていない角カッコ

([])を記述します。PowerBuilder は、実行時に用途に応じて配列のサイズを定義します。サイズの制約はメモリ容量だけです。可変長配列として宣言できるのは、1 次元配列だけです。

可変長配列はサイズを宣言しないので、TO 表記を使って配列のインデックスの下限を変更することはできません。したがって、可変長配列のインデックスの下限は常に 1 です。

Page 67: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 57

EAServer コンポーネントでの TO 句付きの配列の使用

PowerBuilder から配布される EAServer コンポーネントのプロキシを生成し、ここに TO 句を使用する配列を含む場合、CORBA IDL では TO句がサポートされていないため、プロキシ オブジェクトでは範囲が単一値として表されます。たとえば、Int ar1[5 TO 10] は、Int ar1[6]

として表され、このとき [6] は配列要素の数を表します。クライアント アプリケーションは、範囲ではなく単一値を使用する配列を宣言することが必要です。

メモリの割り当て 可変長配列の要素に初期値を設定すると、その要素にメモリが割り当てられます。初期値は、固定長配列の場合と同様、中カッコの中に値を指定します。次のステートメントは、code[1] に 11、code[2] に 242、code[3] に 27 を設定します。配列の要素数は、初期状態では 3 つですが、より大きいインデックス番号の要素に値を代入すると要素数は変更されます。

integer li_code[ ]={11,242,27}

以下のステートメントでは、可変長配列を宣言し、3 つの配列要素に値を代入します。

long ll_price[ ]ll_price[100] = 2000ll_price[50] = 3000ll_price[110] = 5000

これらのステートメントが最初に実行されるとき、次のようにメモリが割り当てられます。

• ll_price[100]=2000 のステートメントでは、ll_price[1] からll_price[100] までの 100 個の Long 型の要素にメモリが割り当てられる。次に、ll_price[1] から ll_price[99] の要素に Long 型のデフォルト値である 0 が代入され、ll_price[100] に 2000 が代入される

• ll_price[50]=3000 のステートメントでは、新しくメモリが割り当てられることはなく、配列 ll_price の 50 番目の要素に 3000 が代入される

• ll_price[110]=5000 のステートメントでは、新たに ll_price[101]から ll_price[110] までの 10 個の Long 型の要素にメモリが割り当てられる。次に、ll_price[101] から ll_price[109] に Long 型のデフォルト値である 0 が代入され、ll_price[110] に 5000 が代入される

Page 68: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

配列の宣言

58 PowerBuilder

配列についての詳細

この節では、以下について詳しく説明します。

• 配列を別の配列に代入する方法

• 配列に値を代入するための配列リストの使い方

• 配列を指定するときに発生するエラー

配列を別の配列に代入する方法

概要 配列を別の配列に代入する場合、PowerBuilder は、以下の規則に従って配列の要素を 1 つずつ対応させます。

1 次元配列 可変長配列への代入 代入先の配列と代入元の配列は、同じ配列になります。

integer a[ ], b[ ]a = {1,2,3,4}b = a

固定長配列への代入 代入元の配列のサイズが代入先の配列のサイズより小さい場合は、代入元の配列のすべての値が代入先の配列にコピーされます。代入先の配列で余っている要素には、0 が設定されます。次の例では、b[5] と b[6] に 0 が設定されます。

integer a[ ], b[6]a = {1,2,3,4}b = a

代入元の配列のサイズが代入先の配列のサイズより大きい場合は、代入元の配列から代入先の配列の要素分だけ値がコピーされ、代入元の配列で余っている値は無視されます。次の例では、配列 b に配列 a の最初の 3 つの要素だけがコピーされます。

integer a[ ], b[3]a = {1,2,3,4}b = a

多次元配列 多次元配列では、次元順に値を保持するので、[1,1]、[2,1]、[3,1] のように 1 次元目から順に値が設定されます。

多次元配列を別の配列に代入する場合、PowerBuilder は、代入元の多次元配列を、要素が次元順に並んだ 1 次元配列とみなします。次にPowerBuilder は、前述の 1 次元配列の代入規則に従って、多次元配列を別の配列に代入します。

次に示すように、配列を代入できない場合もあります。

Page 69: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 59

多次元配列から多次元配列への代入 2 つの配列の次元が一致する場合は、代入先の配列に代入元の配列が正確にコピーされます。

integer a[2,10], b[2,10]a = b

代入元の配列と代入先の配列が共に多次元配列でも、次元が一致しない場合は代入できません。このような場合は、コンパイル時にエラーが発生します。

integer a[2,10], b[4,10]a = b // コンパイル エラー

1 次元配列から多次元配列への代入 1 次元配列を多次元配列に代入できます。値は多次元配列の次元順に対応付けされます。

integer a[ ], b[2,2]b = a

多次元配列から 1 次元配列への代入 多次元配列を 1 次元配列に代入できます。代入元の配列は、配列要素が次元順に並んだ 1 次元配列とみなされて、代入先の配列に代入されます。

integer a[ ], b[2,2]a = b

例 a、b、c の 3 つの配列を宣言します。配列 c は、1 次元の可変長配列、配列 a と b は、次元が異なる多次元配列です。

integer c[ ], a[2,2], b[3,3] = {1,2,3,4,5,6,7,8,9}

配列 b の要素は、次のとおりです。

次のステートメントでは、配列 a と b の次元が異なるのでコンパイルエラーが発生します。

a = b // コンパイル エラー

次のステートメントでは、配列 b を 1 次元配列とみなして、配列 c に代入し、

c = b

1 次元配列とみなされた配列 a に、配列 c を代入します。

a = c

b[1,1] は 1 b[1,2] は 4 b[1,3] は 7

b[2,1] は 2 b[2,2] は 5 b[2,3] は 8

b[3,1] は 3 b[3,2] は 6 b[3,3] は 9

Page 70: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

配列の宣言

60 PowerBuilder

配列 a の要素は、次のとおりです。

配列リストを使って配列 a を初期化しても、同じ結果になります。

integer a[2,2] = {1,2,3,4}

次のセクションでは、配列リストについて説明します。

配列に値を代入するための配列リストの使い方

概要 PowerBuilder での配列リストとは、中カッコの中に指定した値のリストのことで、配列の初期化に使われます。配列リストは 1 次元配列として扱われ、58 ページの「配列を別の配列に代入する方法」で前述したとおり、配列の代入規則に従って代入先の配列に値が代入されます。

例 次の宣言では、可変長配列に 4 つの初期値を設定します。

integer a[ ] = {1,2,3,4}

次の宣言では、固定長配列に 4 つの初期値を設定します。残りの配列要素の値は 0 に設定されます。

integer a[10] = {1,2,3,4}

次の宣言では、固定長配列に 4 つの初期値を設定します。配列のサイズが 4 に設定されているので、配列リストの残りの値は無視されます。

integer a[4] = {1,2,3,4,5,6,7,8}

次の宣言では、1 次元目に 1、2、3、2 次元目に残りの値が設定されます。

integer a[3,2] = {1,2,3,4,5,6}

3 次元配列を行と列を持つページとみなすと、次の宣言では、1 ページ目の 1 列目に 1 と 2、2 列目に 3 と 4 がそれぞれ設定され、2 ページ目の 1 列目に 5 と 6 が設定されます。

2 ページ目の 2 列目には、0 が設定されます。

a[1,1] は 1 a[1,2] は 3

a[2,1] は 2 a[2,2] は 4

1 4

2 5

3 6

Page 71: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 61

integer a[2,2,2] = {1,2,3,4,5,6}

配列を指定するときに発生するエラー

固定長配列 PowerBuilder では、宣言時に指定したサイズを超える配列要素を参照しようとすると、実行時にエラーが発生します。次に例を示します。

int test[10]test[11]=50 // 実行時エラーが発生します。test[0]=50 // 実行時エラーが発生します。int trial[5,10]trial [6,2]=75 // 実行時エラーが発生します。trial [4,11]=75 // 実行時エラーが発生します。

可変長配列 可変長配列の場合、現行のサイズより大きな配列要素に値を代入するとサイズが拡張されます。ただし、最大サイズを超えるまたは最小サイズを下回る要素を参照しようとすると、実行時にエラーが発生します。

integer li_stock[ ]li_stock[50]=200

// 配列に 50 個の要素を設定します。IF li_stock[51]=0 then Beep(1)

// 実行時エラーが発生します。IF li_stock[0]=0 then Beep(1)

// 実行時エラーが発生します。

外部関数の宣言説明 外部関数は、PowerScript 以外の言語で記述された関数で、ダイナミッ

ク リンク ライブラリに格納されています。Windows では、動的ライブラリには DLL の拡張子が付きます。PowerBuilder で作成されたコンポーネントを UNIX サーバに配布する場合、呼び出される動的ライブラリには、その UNIX オペレーティング システムによって .so、.sl、または .a の拡張子が付きます。外部関数は、動的ライブラリをサポートする言語であれば、どのような言語で記述されていても使用できます。

スクリプトで外部関数を使用するには、まず、その関数を次のいずれかの関数として宣言しなければなりません。

1 3 5 0

2 4 6 0

Page 72: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

外部関数の宣言

62 PowerBuilder

• グローバル外部関数 アプリケーション内のどこからでも使用できます。

• ローカル外部関数 特定の種類のウィンドウ、メニュー、ユーザ オブジェクト、またはユーザ定義関数に定義されます。これらの関数はオブジェクト定義の一部なので、オブジェクト自身のスクリプトで常に使用できます。また、これらの関数をほかのスクリプトで使用できるようにすることも可能です。

外部関数の宣言方法と呼び出し方法を理解するには、外部関数ライブラリの開発者から提供されるマニュアルを参照してください。

構文 外部関数の構文 外部関数を宣言するには、次の構文を使います。

{ access } FUNCTION returndatatype name ( { { REF } datatype1 arg1,..., { REF } datatypen argn } ) LIBRARY "libname"ALIAS FOR "extname{;ansi}”

外部サブルーチンの構文 また、次の構文を使って、外部サブルーチンを宣言できます。外部サブルーチンは、外部関数と同じですが、値を戻しません。

{ access } SUBROUTINE name ( { { REF } datatype1 arg1, ...,{ REF } datatypen argn } ) LIBRARY "libname"ALIAS FOR "extname{;ansi}”

次の表に、外部関数とサブルーチンを宣言するときに使用するパラメータを示します。

表 3-7: 外部関数またはサブルーチンを宣言するためのパラメータ

パラメータ 説明

access(オプション)

ローカル外部関数の場合のみ。ローカル外部関数のアクセス レベルとして Public、Protected、または Private のいずれかを指定します。デフォルトは Public です。

詳細については、次の「解説」の「ローカル関数のアクセス レベルの指定」を参照してください。

FUNCTION または SUBROUTINE

呼び出しの種類を指定するキーワード。このキーワードによって、戻り値の取り扱い方法が決定されます。戻り値がある場合は FUNCTION を指定し、戻り値がないまたはVOID を戻す場合は SUBROUTINE を指定します。

returndatatype 関数の戻り値のデータ型

name DLL に保存されている関数またはサブルーチンの名前 。関数名に特別な文字(たとえば、@ 文字など)を含めることはできません。含めるとコンパイル エラーとなります。DLL の関数名に特別な文字を使いたい場合は、この表で後述する ALIAS FOR 句を使用します。

Page 73: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 63

解説 ローカル関数のアクセス レベルの指定 . ローカル外部関数を宣言するとき、アクセス レベルを指定します。つまり、その関数にアクセスできるスクリプトの範囲を指定できます。

次の表に、ローカル外部関数をアクセス レベル付きで宣言した場合に、そのローカル外部関数を使用できるスクリプトの範囲を示します。

表 3-8: ローカル外部関数のアクセス レベル

REF REF の後の引数が参照渡しであることを指定するキーワード。関数は arg に値を格納できます。この値には、PowerBuilder のほかのスクリプトからアクセスできます。

datatype arg 関数またはサブルーチンの引数のデータ型と名前。引数リストは、DLL 内の関数定義と一致していなければなりません。各 datatype arg の前に REF を指定できます。

引数の受け渡しについての詳細は、『アプリケーション テクニック』マニュアルを参照してください。

LIBRARY "libname"

キーワードの後の libname に、関数またはサブルーチンが格納されている DLL の名前を指定します。Windows のDLL の拡張子は、通常、DLL です。UNIX 上の EAServerに配布されるコンポーネントの場合、ファイルの拡張子はそのオペレーティング システムによって .so、.sl、または.a になります。

ALIAS FOR "extname"(オプション)

キーワード。extname には、動的ライブラリで定義されている関数名を指定します。動的ライブラリで定義されている名前と異なる名前をスクリプトで使う場合、またはデータベース内の名前が PowerScript で使う名前としては不適切な場合は、ALIAS FOR "extname" を指定し、PowerScript名と外部名を関連付けなければなりません。

;ansi 関数が引数として文字列を渡す場合、または ANSI エンコーディングの文字列を返す場合に指定する必要があります。ANSI 関数のデフォルト名を使用する場合も、ANSIエンコーディングの文字列を指定するときは ALIAS キーワードが必要です。これは、ALIAS を ansi キーワードで修飾する必要があるからです。

パラメータ 説明

アクセス レベル ローカル外部関数を使用できるスクリプト

Public アプリケーション内のすべてのスクリプト

Private 関数が宣言されているオブジェクトのイベントのスクリプト。そのオブジェクトの子孫スクリプトでは使用できません。

Protected 関数が宣言されているオブジェクトのスクリプトとその子孫スクリプト

Page 74: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

外部関数の宣言

64 PowerBuilder

ローカル外部関数の access キーワードによるアクセス レベルは、インスタンス変数の access-right キーワードの場合と同じです。

実行時における動的ライブラリの使用

Windows プラットフォームで PowerBuilder アプリケーションを実行するには、以下のディレクトリのいずれかに DLL が存在しなければなりません。

• 現行ディレクトリ

• Windows ディレクトリ

• Windows の System サブディレクトリ

• DOS パスにあるディレクトリ

PowerBuilder カスタム クラス ユーザ オブジェクトを EAServer コンポーネントとして配布する場合、参照する動的ライブラリはすべてサーバ上で使用できる状態にあることが必要です。宣言時にライブラリのロケーションを指定しない場合、ライブラリが、アクセス可能なロケーションにインストールされていることを確認してください。

• Windows サーバ上では、DLL はサーバの実行ファイルのアプリケーション パス上にあることが必要です。

• UNIX サーバ上では、共有ライブラリのロケーションがサーバのライブラリ パス環境変数(たとえば、Solaris 上では LD_LIBRARY_PATH)にリストされているか、または、ライブラリが EAServer インストールの lib ディレクトリ内にあることが必要です。

例 PowerBuilder 付属のアプリケーション examples では、以下のような外部関数が、ユーザ オブジェクト u_external_function_win32 にローカル外部関数として宣言されています。ユーザ オブジェクト関数で外部関数を呼び出しますが、ユーザ オブジェクト関数は同じユーザ オブジェクトの定義の一部なので、関数を呼び出すときに、ユーザ オブジェクト名を表記する必要はありません。

例 1 次の宣言では、PowerBuilder は WINMM.DLL 内のサウンドを再生するのに必要な関数を呼び出します。

// サウンドを再生します。FUNCTION boolean sndPlaySoundA (string SoundName,

uint Flags) LIBRARY "WINMM.DLL" ALIAS FOR"sndPlaySoundA;ansi"

FUNCTION uint waveOutGetNumDevs () LIBRARY "WINMM.DLL"

examples アプリケーション内の関数 uf_playsound が外部関数を呼び出します。関数 Uf_playsound は、引数 as_filename と ai_option で呼び出され、これらの引数を外部関数 sndPlaySoundA に渡します。

Page 75: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 65

ai_option の値は、以下に示すように、Windows のマニュアルでの定義と同じです。

// mmystem.h で定義されるオプションです。// これらの値は OR 演算して使用してもかまいません。// #define SND_SYNC 0x0000// 同期的に再生します(デフォルト)。// #define SND_ASYNC 0x0001// 非同期的に再生します。// #define SND_NODEFAULT 0x0002// デフォルトのサウンドを使用しません。// #define SND_MEMORY 0x0004// lpszSoundName はメモリ ファイルをポイントします。// #define SND_LOOP 0x0008// 次の sndPlaySound までサウンドを繰り返します。// #define SND_NOSTOP 0x0010// 現在再生中のサウンドを止めません。

uint lui_numdevs

lui_numdevs = WaveOutGetNumDevs() IF lui_numdevs > 0 THEN

sndPlaySoundA(as_filename,ai_option)RETURN 1

ELSERETURN -1

END IF

例 2 次は、Windows の GetSysColor 関数の宣言です。

FUNCTION ulong GetSysColor (int index) LIBRARY "USER32.DLL"

次のステートメントでは、外部関数を呼び出します。引数 index と戻り値については、Windows のマニュアルに記述されています。

RETURN GetSysColor (ai_index)

例 3 次は、Windows の GetSysColor 関数の宣言です。

FUNCTION int GetSystemMetrics (int index) LIBRARY "USER32.DLL"

以下のステートメントでは、外部関数を呼び出し、画面の高さと幅を取得します。

RETURN GetSystemMetrics(1)RETURN GetSystemMetrics(0)

Page 76: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

外部関数の宣言

66 PowerBuilder

外部関数の引数のデータ型

PowerBuilder では、外部関数を宣言する場合、引数のデータ型は、外部関数の定義で宣言されているデータ型と一致しなければなりません。この節では、外部関数のデータ型と PowerBuilder のデータ型の対応について説明します。また、構造体を値渡しするときのバイト アラインメントについても説明します。

表から、外部関数の宣言で使用する PowerBuilder のデータ型を探します。PowerBuilder のどのデータ型を使用するかは、外部関数のソースコードでのデータ型によって異なります。最初の項目には、外部関数のソース コードでのデータ型、2 番目の項目には、データ型についての詳しい説明、3 番目の項目には、外部関数の宣言で使用する PowerBuilderのデータ型を示します。

Boolean Windows 上における BOOL 型および Boolean 型は 16 ビットの符号付きです。PowerBuilder では、両方とも Boolean 型として宣言します。

ポインタ 表 3-9: PowerBuilder のポインタのデータ型

Windows ポインタ LPBYTE、LPDWORD、LPINT、LPLONG、LPVOID、LPWORDなど 32 ビットの FAR ポインタは、PowerBuilder では Long データ型として宣言します。HANDLE 型は 32 ビットの符号なしとして定義され、PowerBuilder では UnsignedLong 型として宣言します。

PSTR や NPSTR といった Near ポインタ データ型は、PowerBuilder ではサポートされていません。

文字と文字列 表 3-10: PowerBuilder の文字と文字列のデータ型

Windows における 32 ビットの FAR ポインタ LPSTR 型は、PowerBuilderでは String 型として宣言します。

ソース コードのデータ型 サイズ、符号、精度

PowerBuilder のデータ型

*(任意のポインタ) 32 ビットのポインタ Long

char * 可変長のバイト配列 Blob

ソース コードのデータ型 サイズ、符号、精度

PowerBuilder のデータ型

char 8 ビットの符号付き Char

string ヌルで終わる可変長のバイト配列への 32 ビット ポインタ

String

Page 77: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 67

参照引数

参照により文字列を外部関数に渡す場合、すべてのメモリ管理がPowerBuilder で行われます。String 型文字列は、戻り値を保持できるだけの長さがあることが必要です。必要な長さを確保するには、まずString 型変数を宣言し、次に Space 関数を使って、予想される関数の戻り値の最大文字数分の空白を変数に埋め込みます。

固定小数点の値 表 3-11: PowerBuilder の固定小数点数値のデータ型

Windows 定義の WORD 型は、PowerBuilder では UnsignedInteger、DWORD型は UnsignedLong として宣言されます。Short 型の戻り値や引数がある外部関数を呼び出すことはできません。

浮動小数点の値 表 3-12: PowerBuilder の浮動小数点数値のデータ型

PowerBuilder では、Windows の 80 ビットの Double 型をサポートしていません。

Date 型と Time 型 PowerBuilder の Date 型、DateTime 型、Time 型は構造体で、C 言語で記述された外部関数に直接対応するものはありません。

構造体の値渡し C 言語で記述された外部関数の定義とアラインメントが PowerBuilderの構造体のコンポーネントと同じであれば、構造体をその外部関数に渡すことができます。DLL や共有ライブラリは、バイト アラインメントを指定してコンパイルしなければなりません。つまり、パディングを行わずに構造体内のフィールドを配置するということです。

ソース コードのデータ型 サイズ、符号、精度

PowerBuilder のデータ型

byte 8 ビットの符号なし Byte

short 16 ビットの符号付き Integer

unsigned short 16 ビットの符号なし UnsignedInteger

int 32 ビットの符号付き Long

unsigned int 32 ビットの符号なし UnsignedLong

long 32 ビットの符号付き Long

unsigned long 32 ビットの符号なし UnsignedLong

longlong 64 ビットの符号付き LongLong

ソース コードのデータ型 サイズ、符号、精度

PowerBuilder のデータ型

float 32 ビットの単精度 Real

double 64 ビットの倍精度 Double

Page 78: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

外部関数の宣言

68 PowerBuilder

外部関数の呼び出しグローバル外部関数 PowerBuilder では、グローバル外部関数の呼び出しには、ユーザ定義

グローバル関数やシステム関数を呼び出す場合と同じ構文を使います。そのほかのグローバル関数と同様、グローバル外部関数をトリガまたはポストすることはできますが、動的に呼び出すことはできません。

ローカル外部関数 オブジェクト関数の呼び出しには、ローカル外部関数を呼び出す場合と同じ構文を使います。ローカル外部関数をトリガまたはポストしたり、動的に呼び出したりすることができます。

詳細については 詳細については、117 ページの「PowerBuilder の関数とイベントの呼び出し構文」を参照してください。

外部変数の定義

32 ビット プラットフォームのシーケンスの標準呼び出しをサポートする言語であれば、どの言語で記述された外部関数でも使用できます。Windows 上のライブラリで独自に作成した関数を呼び出す場合、その関数のエクスポートが必要になります。コンパイラによっては、関数のプロトタイプまたはリンカ定義(.DEF)ファイル内でエクスポートできます。外部関数の使い方についての詳細は、『アプリケーション テクニック』マニュアルを参照してください。

Use _stdcall 規約 C と C++ コンパイラは、通常いくつもの呼び出し規約をサポートします。呼び出し規約には、_cdecl (C プログラム用のデフォルトの呼び出し規約)、_stdcall(Windows API 呼び出し用の標準規約)、_fastcall、および thiscall があります。PowerBuilder は、多くのほかの Windows 開発ツールのように、WINAPI(_stdcall)形式を使用してエクスポートされるようにする外部関数を要求します。異なる呼び出し規約を使用すると、アプリケーション クラッシュを引き起こします。

PowerBuilder で使用される関数を含む独自の C や C++ DLL を作成する時には、Windows API 呼び出し用の標準規約を使用することを確認してください。

たとえば、関数定義をエクスポートするために DEF ファイルを使用している場合は、以下のように関数を宣言します。

LONG WINAPI myFunc(){...};

Page 79: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 69

リモート プロシージャ コールとしての DBMS ストアド プロシージャの宣言説明 PowerBuilder では、次のようにドット表記を使って、結果集合のない

ストアド プロシージャをリモート プロシージャ コール(RPC)として呼び出すことができます。

object.function

Sybase、Oracle、Informix、そのほかストアド プロシージャをサポートする ODBC データベースのデータベース プロシージャを呼び出すことができます。

RPC は、Oracle の PL/SQL 表や入力と出力の両方として定義されたパラメータをサポートします。オーバーロードされたプロシージャを呼び出すこともできます。

対象 トランザクション オブジェクト

構文 FUNCTION rtndatatype functionname ( { { REF } datatype1 arg1,...,{ REF } datatypen argn } ) RPCFUNC { ALIAS FOR "spname" }

SUBROUTINE functionname ( { { REF } datatype1 arg1 , ..., { REF } datatypen argn } ) RPCFUNC { ALIAS FOR "spname" }

表 3-13: RPC を宣言するためのパラメータ

引数 説明

FUNCTION または SUBROUTINE

呼び出しの種類を指定するキーワード。このキーワードによって、戻り値の取り扱い方法が決定されます。戻り値がある場合は FUNCTION を指定し、戻り値がないまたはVOID を戻す場合は SUBROUTINE を指定します。

rtndatatype FUNCTION で宣言した場合、関数の戻り値のデータ型

functionname PowerBuilder で呼び出すデータベース プロシージャの名前。DBMS での名前と異なる名前を使う場合は、ALIAS FORを指定し、DBMS 名と PowerBuilder 名を関連付けなければなりません。

REF REF の後の引数が参照渡しであることを指定します。ストアド プロシージャは arg に値を格納できます。この値には、PowerBuilder のほかのスクリプトからアクセスできます。

参照により文字列を渡す場合、すべてのメモリ管理がPowerBuilder で行われます。String 型文字列は、戻り値を保持できるだけの長さがあることが必要です。必要な長さを確保するには、まず String 型変数を宣言し、次に Space関数を使って、関数の予想される戻り値の最大文字数分の空白を変数に埋め込みます。

Page 80: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

リモート プロシージャ コールとしての DBMS ストアド プロシージャの宣言

70 PowerBuilder

解説 たとえば、Void を戻す場合など、関数が値を戻さない場合は、関数ではなくサブルーチンとして宣言します。

RPC 宣言は、常にトランザクション オブジェクトに関連付けられます。これらをローカル外部関数として宣言します。接続しているデータベースがストアド プロシージャをサポートしていれば、ローカル外部関数の宣言ビューで、データベース内のストアド プロシージャの一覧にアクセスできます。

詳細については、『アプリケーション テクニック』マニュアルを参照してください。

例 例 1 次は、ストアド プロシージャ GIVE_RAISE_PROC の宣言です。この宣言は、ユーザ オブジェクト ペインタで、トランザクション オブジェクトに対して行っています。宣言の内容は 1 行で表示されます。

FUNCTION double GIVE_RAISE(ref double SALARY) RPCFUNC ALIAS FOR "GIVE_RAISE_PROC"

次のスクリプトでは、関数を呼び出します。

double val = 20000double rvrv = SQLCA.give_raise(val)

例 2 次のストアド プロシージャ SPM8 の宣言では、スクリプトで使用する名前と DBMS 名が同じなので、ALIAS FOR 句は必要ありません。

FUNCTION integer SPM8(integer value) RPCFUNC

datatype arg ストアド プロシージャの引数のデータ型と名前。引数リストは、データベース内のストアド プロシージャ定義と一致していなければなりません。各 datatype arg の前に REF を指定できます。

RPCFUNC キーワード。この宣言は、DLL の外部関数ではなく、DBMSのストアド プロシージャであることを示します。外部関数の宣言についての詳細は、61 ページの「外部関数の宣言」を参照してください。

ALIAS FOR "spname"(オプション)

キーワード。spname にはデータベース内のプロシージャの名前を指定します。データベース内の名前と異なる名前をスクリプトで使う場合、またはデータベース内の名前がPowerScript で使うには不適切な場合は、ALIAS FOR"spname" を指定し、PowerScript 名とデータベース名を関連付けなければなりません。

引数 説明

Page 81: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 3 章 宣言

PowerScript リファレンス 71

次のスクリプトでは、ストアド プロシージャ SPM8 を呼び出します。

int myresultmyresult = SQLCA.spm8(myresult)IF SQLCA.sqlcode <> 0 THEN

messagebox("エラー ", SQLCA.sqlerrtext)END IF

Page 82: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

リモート プロシージャ コールとしての DBMS ストアド プロシージャの宣言

72 PowerBuilder

Page 83: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 73

第 4 章 演算子と式

この章について この章では、PowerScript がサポートしている演算子、および式における演算子の使用方法について説明します。

内容

演算子概要 演算子は、算術演算、数値、テキストおよび論理値の比較、論理

値に対する論理演算、さらに文字列や Blob 値の連結に用います。

3 種類の演算子 PowerScript では、以下の 3 種類の演算子をサポートしています。

• 算術演算子 : 数値型のデータに使用できる

• 関係演算子 : すべてのデータ型のデータに使用できる

• 連結演算子 : String 型のデータに使用できる

データウィンドウ オブジェクトで使用する演算子

データウィンドウ式の演算子の使用法については、データウィンドウに関するマニュアルを参照してください。

項目 ページ

演算子 73

演算子の優先順位 78

PowerBuilder 式のデータ型 79

Page 84: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

演算子

74 PowerBuilder

算術演算子説明 次に PowerBuilder 算術演算子を示します。

表 4-1: 算術演算子

解説 後置式演算式 算術演算子と代入式を連結する後置式演算子(++、+= など)についての詳細は、128 ページの「値の代入文」を参照してください。

減算 オプション ダイアログボックスの[スクリプト]タブの[識別子にハイフンを表示]がチェックされている場合、減算演算子および-- 演算子の前後には必ずスペースを入れなければなりません。それ以外の場合は、PowerBuilder はその式を識別子として解釈します。

識別子におけるハイフンについての詳細は、5 ページの「識別子の命名」を参照してください。

乗除 乗算と除算は最大精度(最大有効桁数 16 ~ 28 桁)を確保して実行されます。Decimal 型の数値は、代入時にその有効桁数に応じて、切り捨てではなく四捨五入されます。

NULL 値を含む計算 算術式に null 値が含まれている場合、計算結果はnull 値になります。これは、null を未定義の値と考えれば容易に理解できます。

null 値についての詳細は、9 ページの「NULL 値」を参照してください。

エラーとオーバーフロー 算術演算子を使用するときは、以下の問題に注意する必要があります。

• 0 の除算、負の値の累乗などを行うと、実行時にエラーが発生します。

• Real 型、Double 型、および Decimal 型の値がオーバーフローすると、実行時にエラーが発生します。

演算子 意味 使用例

+ 加算 Total=SubTotal+Tax

- 減算 Price=Price-Discount

識別子名にハイフンが使用できる場合は、減算演算子の前後にスペースを入れる必要があります。

* 乗算 Total=Quantity*Price

/ 除算 Factor=Discount/Price

^ 累乗 Rank=Rating^2.5

Page 85: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 4 章 演算子と式

PowerScript リファレンス 75

• 符号付き、または符号なしの Integer 型および Long 型の値がオーバーフローした場合は、結果がまるめられます。ただし、計算の過程で Integer 型のオペランドが Long 型に上位変換されるため、Integer 型の変数に結果が代入されるまで、まるめは発生しません。

データ型の上位変換についての詳細は、79 ページの「PowerBuilder式のデータ型」を参照してください。

例 減算 次のステートメントは、常に A から B を減算するという意味です。

A - B

DashesInIdentifiers が 1 に設定されている場合、次のステートメントはA-B という名前の変数を意味します。DashesInIdentifiers が 0 に設定されている場合は、A から B を減算するという意味になります。

A-B

除算の精度 以下の例は、Decimal 型の値をさまざまな演算子で処理しています。

decimal {4} a,b,d,e,fdecimal {3} ca = 20.0/3 // a の値は 6.6667b = 3 * a // b の値は 20.0001c = 3 * a // c の値は 20.000d = 3 * (20.0/3) // d の値は 20.0000e = Truncate(20.0/3, 4) // e の値は 6.6666f = Truncate(20.0/3, 5) // f の値は 6.6667

null 値の連結 以下の代入文で変数 c の値が null の場合、変数 a の値はすべて null になります。

integer a, b=100, c

SetNULL(c)

a = b+c // すべての代入文で a の値が NULL になります。a = b - ca = b*ca = b/c

オーバーフロー 以下の例は、オーバーフローが起きた後の変数 i の値を示しています。

integer ii = 32767i = i + 1 // i の値は -32768 になります。

Page 86: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

演算子

76 PowerBuilder

関係演算子説明 PowerBuilder では、論理式で関係演算子を使って 2 つ以上のオペラン

ドを評価します。関係式を論理演算子で接続して、より複雑な論理式を作成することもできます。

論理式を評価した結果は、常に true か false です。

次の表に、関係演算子と論理演算子を示します。

表 4-2: PowerBuilder の関係演算子と論理演算子

解説 文字列の比較 PowerBuilder では、文字列を比較するときに大文字と小文字が区別されます。また、末尾部分の空白も区別されます。

大文字と小文字を区別しない文字列の比較方法についての詳細は、1264 ページの「Upper」および 791 ページの「Lower」を参照してください。

末尾部分の空白を削除するには、RightTrim 関数を使います。先頭部分の空白を削除するには、LeftTrim 関数を使います。先頭と末尾部分の空白を削除するには、Trim 関数を使います。これらの関数の詳細については、1007 ページの「RightTrim」、758 ページの「LeftTrim」、1252 ページの「Trim」を参照してください。

10 進オペランド 数値を操作する関係演算子(=、>、<、<>、>=、および <= を含む)は、10 進オペランドを扱うことができます。10 進オペランドの精度は、相対的に保持されます。

NULL 値の評価 null 値を含んだ論理式を作成すると、AND 演算子と OR演算子は、通常とは異なる結果を返します。null を true でも false でもない未定義の値と考えれば容易に理解できます。

null 値についての詳細は、9 ページの「NULL 値」を参照してください。

演算子 意味 使用例

= 等しい if Price=100 then Rate=.05

> より大きい if Price>100 then Rate=.05

< より小さい if Price<100 then Rate=.05

<> 等しくない if Price<>100 then Rate=.05

>= 大きいまたは等しい if Price>=100 then Rate=.05

<= 小さいまたは等しい if Price<=100 then Rate=.05

NOT 論理否定 if NOT Price=100 then Rate=.05

AND 論理積 if Tax>3 AND Ship <5 then Rate=.05

OR 論理和 if Tax>3 OR Ship<5 then Rate=.05

Page 87: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 4 章 演算子と式

PowerScript リファレンス 77

例 大文字と小文字の比較 テキストは同じでも大文字と小文字が異なる 2つの文字列を比較すると、これらは同じとみなされません。ただし、Upper 関数や Lower 関数を使うと、両方の文字列の大文字と小文字は区別されないため、文字の並びだけで比較できます。

City1 = "Austin"City2 = "AUSTIN"IF City1 = City2 ...// FALSE を返します。

City1 = "Austin"City2 = "AUSTIN"IF Upper(City1) = Upper(City2)...// TRUE を返します。

比較対象文字列の末尾部分の空白 次の例では、一方の文字列の末尾部分に空白があるため、2 つの文字列は同じとみなされません。

City1 = "Austin"City2 = "Austin "IF City1 = City2 ...// FALSE を返します。

NULL 値が含まれる論理式 次の例では、変数 f が null に設定されているため、式には null 値が含まれます。

boolean d, e = TRUE, fSetNull(f)d = e and f // d の値は NULLd = e or f // d の値は TRUE

連結演算子説明 PowerBuilder では、連結演算子は、同じデータ型の 2 つの変数を連結

します。String 型と Blob 型の変数を連結できます。

次の表に、連結演算子を示します。

表 4-3: PowerBuilder の連結演算子

例 例 1 以下の例は、複数の文字列を連結します。

string TestTest = "over" + "stock" // Test の値は "overstock" となります。string Lname, Fname, FullNameFullName = Lname + ', ' + Fname // FullName の値は、姓と名をカンマとスペースで区切った

演算子 意味 使用例

+ 連結 "cat " + "dog"

Page 88: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

演算子の優先順位

78 PowerBuilder

// 文字列となります。

例 2 以下の例は、データをファイルから読み込んで、Blob 型の変数に Blob 値を次々と連結します。

integer i, fnum, loopsblob tot_b, b. . .FOR i = 1 to loops bytes_read = FileRead(fnum, b) tot_b = tot_b + bNEXT

演算子の優先順位優先順位 PowerBuilder の式で用いる演算子は、一定の優先順位に基づいて評価

されます。優先順位が同じ演算子については、左から右に評価されます。

次に、演算子を優先順位の高い順に示します。

表 4-4: 演算子の優先順位

順序の変更方法 式を評価する順序を変更するには、カッコを使用します。PowerBuilderは、まず、カッコ内のグループを評価します。カッコがネストされている場合は、内側のグループから外側のグループへと評価していきます。

たとえば、(x+(y*(a+b))) の式は、まず、a+b が評価され、次に、その和に y が乗算され、最後に、その積に x が加算されます。

演算子 用途

( ) グループ化(下記の「式のグループ化」を参照)

+abc、- 単項加減(正の数と負の数を表す)

^ 累乗

*、/ 乗除

+、 - 加減、文字列連結

=、>、<、<=、>=、<> 関係演算子

NOT 論理否定

AND 論理積

OR 論理和

Page 89: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 4 章 演算子と式

PowerScript リファレンス 79

PowerBuilder 式のデータ型概要 関数やイベントの引数に式を渡すとき、式のデータ型は重要です。式

のデータ型は、引数の定義と互換性がなければなりません。関数が多重定義されている場合は、引数のデータ型がどの関数を呼び出すかを決定します。

数値データ型、String データ型、Char データ型の 3 種類のデータ型があります。

PowerBuilder での数値データ型概要 数値データ型は、互いに互換性があります。

PowerBuilder での処理

PowerBuilder は、計算や代入を行うとき、必要に応じてデータ型を変換します。数値式のオペランドのデータ型は、演算子とほかのオペランドのデータ型によって、より高い優先順位のデータ型に変換されます。

数値式の評価時におけるデータ型の上位変換

優先順位 次に、PowerBuilder の数値データ型を優先順位の高い順に示します。優先順位は、各データ型の値の範囲に基づいています。

DoubleRealDecimalLongLongUnsignedLongLongUnsignedIntegerIntegerByte

データ型の上位変換規則

オペランドのデータ型 式のオペランドが異なるデータ型の場合は、優先順位の低いデータ型のオペランドが、優先順位の高いデータ型に変換されます。

Page 90: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerBuilder 式のデータ型

80 PowerBuilder

符号なしと符号付き 符号なしのデータ型は、符号付きのデータ型より優先順位が高くなっています。符号なしのデータ型のオペランドと符号付きのデータ型のオペランドがある場合は、両方のオペランドのデータ型が優先順位の高い符号なしのデータ型に上位変換されます。たとえば、Long 型のオペランドと UnsignedInteger 型のオペランドの場合は、両方のオペランドのデータ型が、UnsignedLong 型に上位変換されます。

演算子 演算子は、式のデータ型に対して以下のように影響します。

• +、-、* 加算、減算、乗算では、Long 型のオペランドに対する演算結果は、最低限の精度が得られます。計算を行う前に、Integer 型のオペランドは Long 型へ上位変換され、式の結果のデータ型はLong 型になります。オペランドのデータ型が Long 型より高い優先順位である場合、ほかのオペランドのデータ型は上記のオペランドのデータ型の規則に基づいて一致するデータ型に上位変換されます。

• / と ^ 除算と累乗では、Double 型のオペランドに対する演算結果は、最低限の精度が得られます。すべてのオペランドのデータ型は Double 型に上位変換され、式の結果のデータ型は Double 型になります。

• 関係演算子 関係演算子では、数値データ型に対するデータ型の上位変換は発生しません。

リテラルのデータ型 式のオペランドがリテラルの場合、リテラルのデータ型はリテラルの値によって決まります。リテラルのデータ型は、リテラルとほかのオペランドのデータ型の上位変換に影響します。

表 4-5: 式内のリテラル オペランドのデータ型

範囲外

LongLong 型の範囲を超える整数のリテラルは、コンパイル エラーになります。

リテラル データ型

Long 型の範囲内にある小数点も累乗指数もない整数 Long

Long 型の範囲を超える整数(ただし UnsignedLong の範囲内)

UnsignedLong

UnsignedLong 型の範囲を超える整数(ただし LongLong の範囲内)

LongLong

小数点のある(ただし累乗指数のない)数値 Decimal

小数点と累乗指数がある数値 Double

Page 91: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 4 章 演算子と式

PowerScript リファレンス 81

代入とデータ型

概要 代入は、式を評価しません。代入文では、式の結果のデータ型が、左辺の変数のデータ型に変換されます。

c = a + b

式 a+b のデータ型は、変数 a と b のデータ型によって決定されます。そして、式の結果のデータ型は、変数 c のデータ型に変換されます。

代入時のオーバーフロー

PowerBuilder は、計算結果が正確に算出できるようにデータ型の変換を行います。しかし、精度の低いデータ型の変数に式の結果を代入すれば、オーバーフローする可能性があります。

例 1 以下の例をみてください。

integer a = 32000, b = 1000long dd = a + b

d の最終的な値は、33000 です。この例では、以下のように計算されます。

Integer 型の変数 a を Long 型に変換します。Integer 型の変数 b を Long 型に変換します。Long 型の変数、a と b を加算します。結果を Long 型の変数 d に代入します。

変数 d は Long 型なので、値 33000 を代入してもオーバーフローしません。

例 2 以下の例では、Integer 型の変数に式の結果を代入します。

integer a = 32000, b = 1000, clong ec = a + be = c

c と e の値は、-32536 になります。以下のように計算されます。Integer 型の変数、a と b を加算します。結果を変数 c に代入します。Integer 型の変数 c を Long 型に変換して、結果を変数 e に代入します。

Integer 型の変数 c への代入は、Long 型の結果が切り捨てられるため、オーバーフローとまるめが発生します。変数 c を変数 e に代入しても、失った情報は復元できません。

Page 92: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerBuilder 式のデータ型

82 PowerBuilder

String 型と Char 型の間の変換概要 明示的な Char 型のリテラルはありません。

以下の規則に従って、String 型リテラルは Char 型に変換されます。

• String 型リテラルを Char 型の変数に代入すると、String 型リテラルの先頭の文字だけが変数に代入される。次に例を示します。

char c = "xyz"

この例では、文字 x が Char 型の変数 c に代入される

• 特殊文字(改行、用紙送り、8 進、16 進など)は、次のように文字列変換を用いて、Char 型変数に代入できる

char c = "~n"

さらに、String 型の変数を Char 型の変数に代入する場合も、同じ規則に従って変換されます。Char 型の変数を String 型の変数に代入すると1 文字の文字列になります。

String 型の Char 型配列への代入

文字列の代入には、ほかのデータ型と同じように Char 型の配列を使用できます。以下の規則に従って、文字列が Char 型の配列に代入されます。

• 可変長の Char 型配列の場合は、文字列の内容がそのまま Char 型の配列の要素としてコピーされる

• 固定長の Char 型配列のサイズが文字列のサイズより小さいか等しい場合は、文字列は切り詰められて Char 型の配列に代入される

• 固定長の Char 型配列のサイズが文字列のサイズより大きい場合は、末尾に 0 を付けて Char 型の配列に代入される。配列の中の残りの文字は未決定である

Char 型配列の String 型への代入

Char 型の配列を String 型の変数に代入すると、配列の内容は文字列の末尾を示す 0(存在する場合)までコピーされます。

式における String 型と Char 型配列の使い方

String 型と Char 型の配列の両方を使用する式は、Char 型の配列がString 型に変換された後で評価されます。例は次のとおりです。この例では、Char 型の変数 c の内容を String 型に昇格してから文字列「x」と比較します。

char c. . .if (c = "x") then

PowerScript 関数における Char 型の使い方

String 型の引数がある PowerScript 関数に Char 型または Char 型配列を渡すと、前述の変換規則に従って、データ型が変換されます。

Page 93: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 83

第 5 章 構造体とオブジェクト

この章について この章では、構造体とオブジェクトの基本的なコンセプトと、PowerScript におけるオブジェクトと構造体の定義方法、宣言方法、使用方法について解説します。

内容

構造体について概要 構造体は、1 つ以上の変数(要素とも呼ばれます)を 1 つの名前の

もとにグループ化した集合体です。変数は、標準データ型、オブジェクト データ型、ほかの構造体など、どんなデータ型でも定義できます。

構造体の定義 構造体ペインタやオブジェクト ペインタ(ウィンドウ、メニュー、ユーザ オブジェクトなど)で構造体を定義するということは、構造体の定義を作成するということです。構造体を使用するためには、構造体を宣言しなければなりません。構造体を宣言すると、構造体のインスタンスが自動的に生成されます。構造体がスコープから外れると、そのインスタンスが破棄されます。

構造体の定義についての詳細は、PowerBuilder の『ユーザーズ ガイド』マニュアルを参照してください。

構造体の宣言 構造体ペインタでグローバル構造体 str_emp_data を定義した場合、スクリプトやオブジェクトのインスタンス変数で構造体のインスタンスを宣言します。オブジェクト ペインタで構造体を定義した場合は、そのオブジェクトのインスタンス変数とスクリプトだけが、その構造体のインスタンスを宣言できます。

項目 ページ

構造体について 83

オブジェクトについて 84

オブジェクトと構造体の代入 91

Page 94: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

オブジェクトについて

84 PowerBuilder

以下の宣言は、構造体 str_emp_data のインスタンスを 2 つ宣言します。

str_emp_data str_emp1, str_emp2

構造体変数への参照 スクリプトでは、ドット(.)表記を使用して、構造体の変数を参照します。

structurename.variable

以下のステートメントでは、構造体 str_emp_data の変数に値を代入します。

str_emp1.emp_id = 100str_emp1.emp_lname = "Jones"str_emp1.emp_salary = 200

str_emp2.emp_id = 101str_emp2.emp_salary = str_emp1.salary * 1.05

インスタンス変数としての構造体

構造体がオブジェクトの定義の一部として宣言されている場合は、ドット(.)表記を使用して、構造体名を修飾できます。

objectname.structurename.variable

以下の宣言は、ウィンドウ w_customer のインスタンス変数とします。

str_cust_data str_cust1

ウィンドウ w_customer のスクリプトにおける以下のステートメントは、構造体 str_cust_data の変数を参照します。構造体の宣言がウィンドウ w_customer の定義の一部なので、代名詞 This は任意です。

This.str_cust1.name

オブジェクトについてオブジェクトとは オブジェクト指向プログラミングでは、オブジェクトは、データとそ

のデータを操作するメソッドを保持している独立したモジュールです。PowerBuilder のほとんどのエンティティは、オブジェクトです。PowerBuilder のオブジェクトには、ウィンドウやウィンドウのコントロールなどのビジュアル オブジェクト、トランザクションやエラーなどの非ビジュアル オブジェクト、開発者が作成するユーザ オブジェクトがあります。

Page 95: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 5 章 構造体とオブジェクト

PowerScript リファレンス 85

オブジェクト クラスは、オブジェクトの定義です。ウィンドウ、メニュー、アプリケーション、構造体、またはユーザ オブジェクトの各ペインタで、オブジェクトの定義を作成します。ペインタでは、次のようにオブジェクトの定義を作成します。つまり、オブジェクトの一部となるコントロールを追加、オブジェクトのプロパティに初期値を設定、インスタンス変数と関数を定義、イベントや関数のスクリプトを記述、という手順になります。

オブジェクトのインスタンスは、アプリケーションの実行時に作成されるオブジェクト クラスのコピーです。オブジェクトに対してメモリを割り当て、オブジェクト クラスの定義に基づいてオブジェクトを定義する場合は、オブジェクトのインスタンスを作成します。

オブジェクトへの参照は、オブジェクトのインスタンスへのハンドルです。オブジェクトを操作するには、そのオブジェクトへの参照が必要です。適切なデータ型の変数にオブジェクトへの参照を代入できます。

システム オブジェクトとユーザ オブジェクト

PowerBuilder がサポートするオブジェクトは、2 つに分類できます。PowerBuilder が定義するシステム オブジェクト(システム クラスとして参照される)と開発者がペインタで定義するユーザ オブジェクトです。

システム オブジェクト PowerBuilder のシステム オブジェクトまたはシステム クラスは、基本クラスである PowerObject から継承されます。システム クラスは、開発者が定義するオブジェクトの先祖です。システム クラスの階層を見るには、オブジェクト ブラウザの[システム]タブで、「PowerObject」を選択し、ポップアップ メニューから[階層の表示]と[この下をすべて表示]を選択します。

ユーザ オブジェクト 適切なペインタでオブジェクト クラスの定義を作成します。ペインタには、ウィンドウ、メニュー、アプリケーション、構造体、ユーザ オブジェクト ペインタがあります。開発者が定義するオブジェクトは、システム クラスか開発者が作成した別のクラスから継承されます。

ペインタでオブジェクトを定義する場合、多くのクラスから継承されます。ウィンドウ ペインタやユーザ オブジェクト ペインタで作成するオブジェクトの定義は、システム クラスである Window クラスやUserObject クラスから継承されます。また、開発者が使用するコントロールも、そのコントロールに対応したシステム クラスから継承されます。

Page 96: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

オブジェクトについて

86 PowerBuilder

ユーザ オブジェクトについて2 種類のユーザ オブジェクト

ユーザ オブジェクトには、ビジュアル ユーザ オブジェクトとクラスユーザ オブジェクトの 2 種類があります。

ビジュアル ユーザ オブジェクト

ビジュアル ユーザ オブジェクトとは、一定の動作を行う、再利用可能なコントロールまたはコントロールの集合です。標準、カスタム、外部の 3 種類があります。

表 5-1: ビジュアル ユーザ オブジェクトの種類

クラス ユーザ オブジェクト

クラス ユーザ オブジェクトは、プロパティと関数で構成されます。イベントを含む場合もあります。画面での表示機能はありません。標準とカスタムの 2 種類があります。

ビジュアル ユーザオブジェクト 説明

標準 特定のビジュアル コントロールから継承されます。プロパティを設定したり、スクリプトを記述したりして、コントロールを拡張できます。

先祖のコントロールと同じイベントとプロパティがあります。また、開発者はユーザ イベントを定義して、独自のイベントを追加できます。

カスタム Userobject システム クラスから継承されます。開発者は、ユーザ オブジェクトに複数のコントロールを配置し、そのコントロールのイベントに対するスクリプトを記述できます。

ユーザ オブジェクトに配置したコントロールは、先祖のコントロールと同じイベントとプロパティがあります。また、開発者はユーザ イベントを定義して、独自のイベントを追加できます。

外部 DLL で定義されたビジュアルなコントロールを表示するユーザ オブジェクトです。このコントロールは、PowerBuilder オブジェクトの階層構造体の一部ではありません。DLL の開発元は、コントロールの提示を管理するスタイルビット(Style bit)に関する情報を提供します。

また、コントロールのイベント、関数、プロパティに関する情報も、DLL の開発元が提供します。

外部ユーザ オブジェクトは、OCX を保持できる OLEコントロールとは異なります。

Page 97: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 5 章 構造体とオブジェクト

PowerScript リファレンス 87

表 5-2: クラス ユーザ オブジェクトの種類

ユーザ オブジェクトの定義と使い方についての詳細は、PowerBuilderの『ユーザーズ ガイド』マニュアルを参照してください。

オブジェクトのインスタンス作成クラスとインスタンス オブジェクト クラスとインスタンスが同じ名前のときに、2 つが同じ

物ではないことを認識してください。たとえば、ウィンドウ ペインタでウィンドウを定義する場合は、オブジェクト クラスを定義します。

1 つのインスタンス Open 関数の構文 1 でウィンドウを開く場合は、そのオブジェクトのインスタンスを作成します。クラス定義とインスタンスは、どちらも同じ名前です。アプリケーションにおいて、w_main は w_main 型のグローバル変数です。

Open(w_main)

この方法でウィンドウを開く場合は、オブジェクトのインスタンスは1 つしか開けません。

複数のインスタンス ウィンドウ クラスのインスタンスを複数開く場合は、それぞれのオブジェクトへの参照を保持するための変数を定義します。

w_main w_1, w_2Open(w_1)Open(w_2)

また、Open 関数でクラス名を指定して、ウィンドウを開くことができます。

クラス ユーザ オブジェクト 説明

標準 Transaction オブジェクトや Error オブジェクトなどの、非ビジュアルの PowerBuilder オブジェクトから定義が継承されます。開発者は、インスタンス変数や関数を追加して、オブジェクトを拡張できます。

非ビジュアル オブジェクトにはイベントがあるものがあります。このイベントに対するスクリプトを記述するには、クラス ユーザ オブジェクトを定義しなければなりません。

カスタム 開発者が独自に設計するオブジェクトです。インスタンス変数、イベント、関数を定義して、アプリケーション特定のプログラミングをカプセル化します。

Page 98: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

オブジェクトについて

88 PowerBuilder

window w_1, w_2Open(w_1, "w_main")Open(w_2, "w_main")

クラス ユーザ オブジェクトの場合は、オブジェクトへの参照を保持するための変数を定義して、CREATE 文でオブジェクトのインスタンスを作成します。

uo_emp_data uo_1, uo_2uo_1 = CREATE uo_emp_datauo_2 = CREATE uo_emp_data

1 つのオブジェクトに対して、そのオブジェクトへの参照を複数持つことができます。適切なデータ型の変数にオブジェクトへの参照を代入するか、オブジェクトへの参照を別のオブジェクトに渡して、オブジェクトの情報の取得や変更ができます。

オブジェクト データ型の変数と代入についての詳細は、90 ページの「構造体としてのユーザ オブジェクト」を参照してください。

先祖と子孫の使い方子孫オブジェクト PowerBuilder では、オブジェクト クラスを別のクラスから継承できま

す。継承されたオブジェクト(子孫オブジェクト)には、先祖のインスタンス変数、イベント、関数すべてが継承されます。子孫オブジェクトに、変数、イベント、関数を追加して、子孫オブジェクトを拡張させることができます。子孫オブジェクトを変更した後も、先祖オブジェクトを変更すれば、子孫オブジェクトには先祖オブジェクトの変更が反映されます。

インスタンスの作成 子孫オブジェクトのインスタンスを作成すると、そのすべての先祖クラスのインスタンスも作成されます。プログラムは、先祖オブジェクトのインスタンスにアクセスできません。ただし、スコープ演算子を使用すれば、先祖の関数やイベントにアクセスできます。

Page 99: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 5 章 構造体とオブジェクト

PowerScript リファレンス 89

ガベージ コレクションガベージ コレクションの機能

PowerBuilder のガベージ コレクション メカニズムは、メモリ内の参照されていないオブジェクトや参照元のないオブジェクトを自動的にチェックし、このようなオブジェクトが見つかると削除することによって、ほとんどのメモリ リークに対処しています。DESTROY 文を使ってオブジェクトを明示的に破棄しなくても、ガベージ コレクションを使用して破棄できます。これによって、別のプロセスで使用されたオブジェクトや、ポストされたイベントや関数への参照によって渡されたオブジェクトを破棄するときの実行時エラーを防ぐことができます。

ガベージ コレクションが発生する状況

ガベージ コレクションが発生するのは、以下のような場合です。

• 参照がオブジェクトから削除されるとき オブジェクトへの参照とは、値が object 型のすべての変数です。変数がスコープからはずれたり、変数に異なる値が代入されたりすると、PowerBuilder がオブジェクトへの参照を削除し、残りの参照をカウントして、参照が残っていなければオブジェクトを破棄します。

• ガベージ コレクションの間隔時間を超えたとき PowerBuilder がシステム起動イベントの実行を完了した場合、設定されたガベージ コレクションの実行間隔を超えていれば、ガベージ コレクションが行われます。デフォルトの間隔は 0.5 秒です。ガベージ コレクションの実行によって、循環参照を持つもの(互いを参照している以外に参照されていないオブジェクト)を含め、参照できないオブジェクトとクラスは削除されます。

イベントや関数をポストしてオブジェクト参照を渡す場合、ポストした時間からイベントや関数が実際に実行されるまでの間にガベージコレクションが適用されるのを防ぐため、オブジェクトへの内部参照が追加されます。この内部参照は、イベントや関数が実行されると削除されます。

ガベージ コレクション適用の例外

コレクションが適用されないオブジェクトもいくつかあります。

• ビジュアル オブジェクト 画面に表示されるオブジェクトは、画面で作成され、表示されるときに内部参照が追加されるため、コレクションの対象となりません。ビジュアル オブジェクトは、閉じられると明示的に破棄されます。

• タイミング オブジェクト 実行中のタイミング オブジェクトは、タイミング オブジェクトに対する Start 関数によって内部参照が追加されるため、コレクションの対象となりません。Stop 関数により、内部参照は削除されます。

Page 100: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

オブジェクトについて

90 PowerBuilder

• 共有オブジェクト 登録された共有オブジェクトは、SharedObjectRegister 関数によって内部参照が追加されるため、コレクションの対象となりません。内部参照は、SharedObjectUnregister 関数によって削除されます。

ガベージ コレクション発生の制御

PowerBuilder では、ガベージ コレクションは自動的に発生しますが、GarbageCollect、GarbageCollectGetTimeLimit、GarbageCollectSetTimeLimit の関数を使用すると、その場で強制的にガベージ コレクションを発生させたり、参照カウントのチェック間隔を変更できます。ガベージ コレクションの実行間隔を非常に長く設定することによって、ガベージ コレクションを実質的に無効にすることもできます。

構造体としてのユーザ オブジェクト

PowerBuilder では、非ビジュアルのユーザ オブジェクトは、構造体と同じような機能を提供します。クラス ユーザ オブジェクトのインスタンス変数は、構造体の変数と似た集合体を形成します。スクリプトでは、構造体の変数と同じように、ドット(.)表記を使用して、クラスユーザ オブジェクトのインスタンス変数を参照します。

ユーザ オブジェクトの利点

ユーザ オブジェクトは、ユーザ オブジェクト関数やユーザ オブジェクト構造体を定義できるうえ、先祖クラスから継承することもできます。しかし、構造体は、関数の定義はできません。

メモリ割り当ての違い ユーザ オブジェクトに対するメモリの割り当ては、構造体と異なります。オブジェクト変数は、オブジェクトへの参照です。したがって、変数を宣言しても、オブジェクトに対してメモリを割り当てません。オブジェクトを宣言した後に、CREATE 文でオブジェクトのインスタンスを作成しなければなりません。また、ユーザ オブジェクトに対する代入も、同じように異なります(次の「オブジェクトと構造体の代入」で解説します)。

インスタンスを自動生成するオブジェクト

メソッドと継承を持つユーザ オブジェクトに、構造体のメモリ割り当てと同じ機能を持たせる場合は、インスタンスを自動生成するユーザオブジェクトを定義します。

インスタンスを自動生成するユーザ オブジェクトは、開発者がインスタンスを作成したり破棄したりする必要がありません。構造体と同じように、オブジェクトを宣言したときにインスタンスが作成され、スコープから外れたときに、インスタンスが破棄されます。インスタンスを自動生成するオブジェクトに対する代入は、構造体と同じような動作をします。したがって、通常のオブジェクトの代入と異なり、制約事項があります。

Page 101: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 5 章 構造体とオブジェクト

PowerScript リファレンス 91

カスタム クラス ユーザ オブジェクトを自動生成するには、ユーザ オブジェクトのプロパティ シートのポップアップ メニューから[インスタンスの自動生成]チェックボックスをオンにします。

オブジェクトと構造体の代入PowerBuilder では、オブジェクトの代入は、構造体やインスタンスを自動生成するオブジェクトの代入とは異なります。

• 構造体を、同じ定義を持つ別の構造体に代入すると、構造体のすべての変数の値がコピーされ、構造体データの 2 つ目のコピーができます。

• オブジェクト データ型の変数を同じオブジェクト データ型の別の変数に代入すると、そのオブジェクトの参照がコピーされ、どちらの変数も同じオブジェクトを参照するようになります。オブジェクト自体は、コピーされません。

構造体の代入

構造体をデータ型とする変数を宣言すると、その構造体のインスタンスが作成されます。

str_emp_data str_emp1, str_emp2 // 2 つの構造体の// インスタンス

構造体を同じ定義を持つ別の構造体に代入すると、構造体のすべての変数の値がコピーされ、構造体データの 2 つ目のコピーができます。

str_emp1 = str_emp2

代入は、構造体のすべての変数の値を同じデータ型の別の構造体にコピーします。各変数は、構造体 str_emp_data のインスタンスです。

構造体の代入の制限 構造体の定義が異なる場合、構造体の変数の定義が同じでも、構造体の代入はできません。

たとえば、以下の代入はできません。

str_emp str_person1str_cust str_person2str_person2 = str_person1 // 代入できません

Page 102: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

オブジェクトと構造体の代入

92 PowerBuilder

構造体を関数の引数として渡す方法についての詳細は、112 ページの「関数とイベントへの引数の渡し方」を参照してください。

オブジェクトの代入

オブジェクト データ型の変数を宣言すると、オブジェクトの参照が宣言されます。

uo_emp_data uo_emp1, uo_emp2 // 2 つのオブジェクトの参照

CREATE 文を使用して、オブジェクトのインスタンスを作成します。

uo_emp1 = CREATE uo_emp_data

オブジェクト データ型の変数を同じオブジェクト データ型の別の変数に代入すると、オブジェクトのインスタンスへの参照がコピーされます。オブジェクトのインスタンス自体は、コピーされません。

uo_emp2 = uo_emp1 // 両方とも同じオブジェクトのインスタンスを参照します

先祖オブジェクトと子孫オブジェクト

先祖オブジェクトと子孫オブジェクト間の代入も、オブジェクトへの参照のコピーと同じようにして行われます。

たとえば、uo_emp_data を、uo_emp_active と uo_emp_inactive のそれぞれのユーザ オブジェクトの先祖ユーザ オブジェクトとします。

この先祖オブジェクト データ型の変数を宣言します。

uo_emp_data uo_emp1, uo_emp2

子孫オブジェクトのインスタンスを作成して、先祖オブジェクトの変数に子孫オブジェクトへの参照を代入します。

uo_emp1 = CREATE USING "uo_emp_active"

uo_emp1 を uo_emp2 に代入すると、両方の変数は子孫オブジェクトuo_emp_active のインスタンスを参照します。

uo_emp2 = uo_emp1

オブジェクトを関数の引数として渡す方法についての詳細は、112 ページの「関数とイベントへの引数の渡し方」を参照してください。

Page 103: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 5 章 構造体とオブジェクト

PowerScript リファレンス 93

自動生成するユーザ オブジェクトの代入

インスタンスを自動生成するユーザ オブジェクトを宣言すると、そのオブジェクトのインスタンスが自動的に生成されます(構造体と同じです)。[インスタンスの自動生成]オプション設定がされているユーザ オブジェクトに対しては、CREATE 文は使用できません。以下の例では、uo_emp_data には、[インスタンスの自動生成]オプションが設定されています。

uo_emp_data uo_emp1, uo_emp2 // 2 つのオブジェクト インスタンス

インスタンスを自動生成するユーザ オブジェクトを別のインスタンスを自動生成するユーザ オブジェクトに代入すると、オブジェクト全体がコピーされます。

uo_emp1 = uo_emp2

インスタンスを自動生成するユーザ オブジェクトへの参照は、1 つしかありません。

関数の引数渡し インスタンスを自動生成するユーザ オブジェクトを関数の引数に渡すと、構造体を渡したときと同じような動きをします。

• 値渡しは、オブジェクトのコピーを渡します。

• 参照渡しは、ほかの標準データ型と同様に、オブジェクトへの参照を渡します。

• 読み出し専用は、オブジェクトのコピーを渡しますが、コピーを修正できません。

コピーの制約事項 オブジェクト データ型が一致するか、コピー先のオブジェクトがそのオブジェクトの先祖で、インスタンスを自動生成しない場合だけ、インスタンスを自動生成するユーザ オブジェクトの代入ができます。

規則 1 インスタンスを自動生成するユーザ オブジェクトを別のインスタンスを自動生成するユーザ オブジェクトに代入する場合は、両方同じオブジェクト データ型でなければなりません。

規則 2 インスタンスを自動生成する子孫オブジェクトを先祖オブジェクトの変数に代入する場合は、先祖オブジェクトに[インスタンスの自動生成]オプションが設定されていてはいけません。先祖オブジェクトの変数には、その子孫オブジェクトのコピーへの参照が保持されます。

規則 3 先祖オブジェクトを子孫オブジェクトの変数に代入する場合は、先祖オブジェクトが子孫オブジェクトのインスタンスを保持していなければ、実行時エラーが起きます。

Page 104: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

オブジェクトと構造体の代入

94 PowerBuilder

例 以下に例を示します。宣言文は次のとおりです。なお、uo_emp_activeと uo_emp_inactive はインスタンスを自動生成するユーザ オブジェクトで、インスタンスを自動生成しないユーザ オブジェクト uo_emp_dataの子孫オブジェクトとします。

uo_emp_data uo_emp1 // 先祖uo_emp_active uo_empa, uo_empb // 子孫uo_emp_inactive uo_empi // 別の子孫

規則 1 の例 上記で宣言したユーザ オブジェクトで、インスタンスを別のインスタンスに代入します。異なるオブジェクト データ型の代入は、コンパイル エラーになります。

uo_empb = uo_empa // 有効、同じオブジェクト データ型uo_empa = uo_empi // 無効、異なるオブジェクト データ型

規則 2 の例 以下の代入をすると、uo_emp1 に子孫オブジェクトuo_empa のコピーが保持されます。uo_emp1 のオブジェクト データ型である uo_emp_data には、[インスタンスの自動生成]オプションを設定してはいけません。uo_emp_data に[インスタンスの自動生成]オプションが設定されている場合は、コンパイル エラーになります。

uo_emp1 = uo_empa

規則 3 の例 uo_emp1 がその子孫オブジェクト uo_empa のインスタンスを保持している場合だけ、代入できます。

uo_empa = uo_emp1

uo_emp1 にその子孫オブジェクトのインスタンスが保持されていない場合は、実行時エラーが起きます。

関数とイベントへの引数の渡し方についての詳細は、112 ページの「関数とイベントへの引数の渡し方」を参照してください。

Page 105: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 95

第 6 章 関数とイベントの呼び出し

この章について この章では、まず、関数やイベントのさまざまな使い方を理解するのに役立つ予備知識を説明し、次に、関数とイベントを呼び出す構文について説明します。

内容

関数とイベントについて関数とイベントの重要性 PowerScript 言語には、式や代入文で使用できる PowerScript 関数が

用意されています。

関数とイベントの種類 PowerBuilder のオブジェクトには、そのオブジェクトで使用できるイベントと関数があります。独自のユーザ定義関数とユーザイベントを定義すれば、オブジェクトを拡張することができます。また、オブジェクトにローカル外部関数を宣言することもできます。PowerScript 言語には、どのオブジェクトにも属さないシステム関数もあります。また、外部関数やリモート プロシージャ コールを宣言して、独自のグローバル関数を定義できます。

次の表に、関数とイベントの種類の一覧を示します。

項目 ページ

関数とイベントについて 95

関数とイベントの検索と実行方法 98

関数とイベントのトリガまたはポスト 100

静的呼び出しと動的呼び出し 103

関数とイベントの多重定義、上書き、拡張 110

関数とイベントへの引数の渡し方 112

戻り値の使い方 115

PowerBuilder の関数とイベントの呼び出し構文 117

先祖オブジェクトの関数とイベントの呼び出し 121

Page 106: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

関数とイベントについて

96 PowerBuilder

表 6-1: 関数とイベントの種類

分類 項目 定義

イベント イベント スクリプトの実行を開始できる、オブジェクトやコントロールのアクション。エンド ユーザはアクション(オブジェクトをクリックするかデータを入力します)によって、イベントを起動できます。また、別のスクリプトのステートメントでもイベントを起動できます。

ユーザ イベント オブジェクトの機能を拡張するために定義するイベント。引数や戻り値を指定します。また、イベントが Windows システム メッセージに対応するかどうかも指定します。ユーザ イベントの定義方法についての詳細は、PowerBuilder の『ユーザーズ ガイド』マニュアルを参照してください。

システム イベントまたは組み込みイベント

PowerBuilder であらかじめ定義されているオブジェクトに対するイベント。システム イベントは通常、エンド ユーザのアクションやシステム メッセージによって起動されます。PowerBuilder は、あらかじめ定義されているイベントに引数を渡すので、そのイベントに対するスクリプトで引数が参照できます。システム イベントは、Long 型の戻り値を指定するか、戻り値がないかのどちらかです。

関数 関数 特定の処理を実行するプログラムまたはルーチン

システム関数 オブジェクトに関連付けられていない PowerScript 関数

オブジェクト関数 オブジェクトに関連付けられた関数。PowerBuilder はあらかじめ定義されたオブジェクト関数を用意しています。また、開発者が独自に関数を定義することもできます。

ユーザ定義関数 開発者が定義する関数。関数ペインタでグローバル関数を定義し、スクリプトビューを持つほかのペインタでオブジェクト関数を定義します。

グローバル関数 アプリケーション内のすべてのスクリプトから呼び出すことができる関数。PowerScript のシステム関数はグローバルにアクセスできます。

Page 107: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 97

関数とイベントの比較 関数とイベントには次のような類似点があります。

• 引数と戻り値がある

• 動的または静的に呼び出すことができる(グローバル関数やシステム関数は動的に呼び出すことはできない)

• 関数やイベントの呼び出しをポストまたはトリガできる

関数とイベントの相違点は以下のとおりです。

• 関数はグローバルかオブジェクトの定義の一部。イベントはオブジェクトに関連付けられている

• イベントと関数の検索方法は異なる

• 定義されていないイベントの呼び出しはエラーにならないが、定義されていない関数の呼び出しはエラーになる

• オブジェクトレベルの関数は多重定義できるが、イベント(とグローバル関数)は多重定義できない

• 関数を定義するときは、関数へのアクセスを制限できるが、イベントを定義するときは、スコープ レベルを記述できない

• 関数を継承する場合、子孫のスクリプト内で先祖関数を呼び出すことによって、先祖関数を拡張できる。また、先祖関数の定義を上書きすることもできる。イベントを継承する場合、デフォルトではイベントのスクリプトが拡張される。スクリプトを拡張するか、上書きするかを選択できる

ローカル外部関数 オブジェクトに属す外部関数。ウィンドウ ペインタやユーザ オブジェクト ペインタなどで宣言します。外部関数の定義は別のライブラリ内にあります。

グローバル外部関数 アプリケーション内のすべてのスクリプトで呼び出すことができる外部関数。各種ペインタで宣言します。外部関数の定義は別のライブラリ内にあります。

リモート プロシージャ コール

スクリプトから呼び出すことのできるデータベースのストアド プロシージャ。RPCは、グローバルまたはローカル(オブジェクトに属します)で宣言できます。ストアド プロシージャの定義はデータベースにあります。

分類 項目 定義

Page 108: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

関数とイベントの検索と実行方法

98 PowerBuilder

どちらを使うか スクリプトをユーザ定義関数かユーザ イベントのどちらで記述するかは、アプリケーションの設計時に決めます。スクリプトをどちらで記述してもパフォーマンスに違いはありません。開発者がユーザ イベントの定義かユーザ定義関数の定義のどちらのインタフェースを好むか、エラー処理をどのようにするか、多重定義をするかなどを考慮して決定します。

イベントか関数のどちらか一方しか使用しないということはないでしょうが、管理を容易にするために、通常の処理にはイベントか関数のどちらかを使用するように決めた方がよいでしょう。

関数とイベントの検索と実行方法PowerBuilder は、一致する関数やイベントを、その名前と引数リストに基づいて検索します。PowerBuilder は、引数のデータ型に互換性があれば(すべての数値型など)、一致するとみなします。データ型は正確に一致する必要はありません。PowerBuilder は、互換性のあるデータ型の優先順位に従って、あるデータ型が別のデータ型とどのくらいの近さで一致するかをチェックします。

関数とイベントの大きな違いは、検索方法です。

関数の検索

関数を呼び出すときは、一致する関数が見つかるまで検索し、関数が見つかると検索が終了し、その関数が実行されます。関数名が同じで引数が異なる場合は、関数の多重定義と呼びます。詳細については、110 ページの「関数とイベントの多重定義、上書き、拡張」を参照してください。

修飾子のない関数名 関数名をオブジェクト名で修飾していない場合は、名前と引数が一致する関数が検索され、最初に見つかった関数が実行されます。PowerBuilder は、次の順序で一致する関数を検索します。

1 グローバル外部関数

2 グローバル関数

3 オブジェクト関数とローカル外部関数。オブジェクトが子孫の場合は、継承階層の最下位の階層レベルから順に一致する関数が検索される

4 システム関数

Page 109: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 99

データウィンドウ式関数

データウィンドウ ペインタにおいて、計算フィールド、フィルタ、入力条件則、およびグラフ データの式の中で使用する関数は、上書きできません。たとえば、グローバル関数 Today を作成したとします。この関数は PowerScript システム関数の Today のかわりに使用できますが、データウィンドウ式の関数 Today のかわりに使用することはできません。

修飾子のある関数名 オブジェクト関数とグローバル関数が同じ名前の場合、オブジェクト関数を呼びだすには、ドット(.)表記を使用してオブジェクト関数を修飾します。修飾子のある関数名を使えば、関数の検索は、そのオブジェクトの先祖の階層(上記の検索順の 3 番)までしか行われません。以下に例を示します。

dw_1.Update()w_employee.uf_process_list()This.uf_process_list()

オブジェクトの継承階層内で関数を検索する場合は、一致する子孫関数のかわりに、先祖関数を呼び出すことができます。

先祖関数を呼び出す構文については、121 ページの「先祖オブジェクトの関数とイベントの呼び出し」を参照してください。

イベントの検索

子孫オブジェクトのイベントは、デフォルトでは先祖イベントの拡張です。イベントを呼び出すときは、そのオブジェクトの継承階層の最下位のレベルから順に、最上位のレベルに達するか先祖オブジェクトを上書きするイベントが見つかるまで、イベントが検索されます。次に、上位の階層レベルの先祖イベントから下位の階層レベルの子孫イベントへと、検出されたすべてのイベントが実行されます。

Page 110: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

関数とイベントのトリガまたはポスト

100 PowerBuilder

関数とイベントの検索 次の図に、関数の検索方法とイベントの検索方法の違いを示します。

関数とイベントのトリガまたはポストトリガ PowerBuilder では、関数やイベントをトリガすると、関数やイベント

はすぐに呼び出されます。関数やイベントの戻り値は、呼び出し元のスクリプトで使用できます。

ポスト 関数やイベントをポストすると、オブジェクトのキューに追加され、順番に実行されます。ほとんどの場合、現行のスクリプトが終了すると実行されます。ただし、別のシステム イベントが、メソッドが実行される前に発生した場合は、キュー内でのメソッドの位置はそのシステム イベントの後になることがあります。メソッドの戻り値は、呼び出し元のスクリプトでは使用できません。

POST は、呼び出し元が戻り値を使用できなくするため、関数やイベントの呼び出しはステートメントに置き換えて考えることができます。

状態情報をチェックする前に処理を終了しなければならない場合や、さらに処理が続くような場合、ポスト機能を使用します。次の例 2 を参照してください。

Page 111: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 101

PowerBuilder メッセージの優先

PowerBuilder によってポストされたすべてのイベントは、Windows システムのキューとは別のキューによって処理されます。PowerBuilderによってポストされたメッセージは、Windows によってポストされたメッセージよりも先に処理されるため、Windows のメッセージをポストするイベントの中でポストされた PowerBuilder のイベントは、Windows のメッセージよりも先に処理されます。

たとえば、エディットマスク コントロールに文字が入力されると、PowerBuilder の pdm_keydown イベントが Windows のメッセージWM_CHAR をポストしてこの文字を入力します。入力された文字をエディットマスク コントロールから別のコントロールにコピーしたい場合は、コードを pdm_keydown イベントの中でポストされるイベントの中に記述してはいけません。この処理は、pdm_keyup にマップされたイベントなど、WM_CHAR メッセージが処理された後で発生するイベントの中で行う必要があります。

POST の制約条件 戻り値がないため、以下の制約があります。

• 式のオペランドには、ポストされた関数やイベントを使用できません。

• 関数の引数には、ポストされた関数やイベントを使用できません。

• カスケード呼び出しでは、最後の呼び出しだけ POST を使用できます。

以下のステートメントは、コンパイル エラーになります。どちらのステートメントも戻り値が必要です。

IF POST IsNull( ) THEN ...w_1.uf_getresult(dw_1.POST GetBorderStyle(2))

EAServer での非同期処理

EAServer コンポーネントの呼び出しのコンテキストでは、POST の使用はサポートされていません。EAServer クライアントで共有オブジェクトの呼び出しをポストすることにより非同期処理をシミュレートにする方法については、オンライン ヘルプの SharedObjectGet 関数を参照してください。EAServer における非同期処理の詳細については、EAServer のマニュアルで ThreadManager モジュールと MessageServiceモジュールについての説明を参照してください。

TriggerEvent 関数と PostEvent 関数

旧バージョンとの互換性のため、TriggerEvent 関数と PostEvent 関数は使用できますが、呼び出されたイベントに引数を渡すことはできません。PowerBuilder のメッセージ オブジェクトで、イベントにデータを渡さなければなりません。

Page 112: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

関数とイベントのトリガまたはポスト

102 PowerBuilder

ポストの例 以下に、イベントをポストする例を示します。

例 1 サンプル アプリケーションで、ウィンドウ w_activity_manager のOpen イベントは、ユーザ オブジェクト u_app_actman に属する関数uf_setup と uf_set_tabpgsystem を呼び出します。関数がポストされるので、Open イベントは関数が呼び出される前に終了することができます。エンド ユーザは、ウィンドウを表示させながらセットアップ処理を行うことができます。

guo_global_vars.iuo_app_actman.POST uf_setup()guo_global_vars.iuo_com_actman.POST uf_set_tabpgsystem(0)

例 2 サンプル アプリケーションで、ユーザ オブジェクトu_tabpg_amroadmap 内のツリービュー コントロール tv_roadmap のDoubleClicked イベントは、ツリービュー項目を処理する関数をポストします。関数がポストされなければ、項目の展開ボタンが設定される前に、項目のピクチャを変更するかどうかをチェックするスクリプトが実行されます。

parent.POST uf_process_item ()

Page 113: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 103

静的呼び出しと動的呼び出し関数とイベントの呼び出し

関数とイベントの呼び出しには、関数やイベントの種類と定義された検索方法に応じて、3 つの方法があります。

表 6-2: PowerBuilder による関数とイベントの呼び出し方法

静的または動的な検索の指定

オブジェクト関数やイベントでは、静的または動的な検索を指定して、PowerBuilder がいつオブジェクト関数やイベントを検索するかを指定できます。静的な検索には STATIC キーワード、動的な検索にはDYNAMIC キーワードを指定します。DYNAMIC キーワードは、オブジェクトに関連付けられた関数だけに適用されます。グローバル関数やシステム関数は、動的に呼び出すことはできません。

静的呼び出し

PowerBuilder は、デフォルトでは関数とイベントを静的に検索します。つまり、スクリプトをコンパイルするときに、メソッドの名前と引数のデータ型を照合することによって、メソッドを識別します。コンパイル時に、一致するメソッドがオブジェクトに存在しなければなりません。

関数の種類 コンパイル条件 コメント

グローバル関数とシステム関数

必須。関数はスクリプトがコンパイルされるときに存在しなければなりません。

関数は、コンパイル時に存在していなければならず、直接呼び出されます。関数は多重定義できません。したがって、実行時に同じ名前の別の関数が呼ばれることはありません。

STATIC 検索を使用するオブジェクト関数

必須。関数はスクリプトがコンパイルされるときに存在しなければなりません。

関数は多重定義できます。関数は、コンパイルするときに存在しなければなりませんが、実行時に別のクラスがインスタンス化された場合は、そのクラスの関数がかわりに呼び出されます。

DYNAMIC 検索を使用するオブジェクト関数

任意。関数はスクリプトがコンパイルされるときに、その存在をチェックされません。

関数は多重定義できます。実際に呼び出される関数は、実行時に決定されます。

Page 114: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

静的呼び出しと動的呼び出し

104 PowerBuilder

静的呼び出しの結果 静的呼び出しでは、コンパイル時に識別された関数やイベントが実行されるとは限りません。たとえば、先祖オブジェクトをデータ型として変数を定義し、その先祖オブジェクトには関数が定義されているとします。その変数に子孫オブジェクトのインスタンスを代入します。子孫オブジェクトに先祖関数(コンパイル時に見つけられた先祖の関数)を上書きする関数がある場合は、その子孫関数が実行されます。

動的呼び出し

PowerBuilder で動的呼び出しを指定すると、スクリプトをコンパイルするときは、関数やイベントの存在がチェックされません。実行時には適切な関数やイベントが存在していなければなりません。

動的呼び出しは、関数やイベントの実行時に、その関数やイベントが検索されます。このようにすれば柔軟性が提供され、先祖オブジェクトに存在しない子孫オブジェクトの関数やイベントを呼び出すことができます。

動的呼び出しの結果 以下のオブジェクトがあるものとして、動的呼び出しの結果を説明します。

• 関数 Set(Integer) を持つ先祖ウィンドウ w_a

• 2 つの関数を持つ子孫ウィンドウ w_a_desc。関数 Set(Integer) は、先祖関数を上書きする。関数 Set(String) は、多重定義された関数

例 1 先祖ウィンドウ クラス w_a のウィンドウ mywindow を開いたとします。

w_a mywindowOpen(mywindow)

次の表に、関数 Set を静的または動的に呼び出したときの結果を示します。

ステートメント 結果

mywindow.Set(1)関数が先祖ウィンドウ w_a で見つけられるので正しくコンパイルされます。

実行時は、先祖の関数 Set(Integer) が実行されます。

mywindow.Set("hello")コンパイルできません。呼び出し元の関数と一致する関数が w_a にありません。

Page 115: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 105

例 2 子孫のウィンドウ クラス w_a_desc として mywindow を開くとします。

w_a mywindowOpen(mywindow, "w_a_desc")

次の表に、子孫のウィンドウ クラスで、関数 Set を静的または動的に呼び出したときの結果を示します。

動的呼び出しの欠点 パフォーマンスが遅い 動的呼び出しは、実行時に呼び出される関数が検索されるので、静的呼び出しよりパフォーマンスが悪くなります。パフォーマンスが要求される場合は、動的呼び出しをしないように、アプリケーションを設計します。

エラー チェックが少ない 動的呼び出しを使用すると、コンパイラによるエラー チェックを行いません。動的に呼び出される関数は、実行時に使用できないことがあるので、アプリケーションの実行時エラーを起こす可能性が高くなります。したがって、静的呼び出しで対応できる場合は、動的呼び出しを使用しないでください。

mywindow.DYNAMIC Set("hello")DYNAMIC キーワードが指定されているので正しくコンパイルされます。

実行時は一致する関数が見つからないため、実行時エラーになります。

ステートメント 結果

mywindow.Set(1)関数が先祖ウィンドウ w_a で見つけられるので正しくコンパイルされます。

実行時は、子孫の関数 Set(Integer) が実行されます。

mywindow.Set("hello")コンパイルできません。呼び出し元の関数と一致する関数が先祖にありません。

mywindow.DYNAMIC Set("hello")DYNAMIC キーワードが指定されているので正しくコンパイルされます。

実行時は、子孫の関数 Set(String) が実行されます。

ステートメント 結果

Page 116: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

静的呼び出しと動的呼び出し

106 PowerBuilder

動的呼び出しの使用例 サンプル アプリケーションで、先祖ウィンドウ w_datareview_frame は、メニュー m_datareview_framemenu のメニュー項目で呼び出される関数を定義します。関数の静的呼び出しがコンパイルできるように、関数には何も記述されていないスクリプトがあります。先祖ウィンドウw_datareview_frame の子孫であるほかのウィンドウには、先祖関数を上書きする子孫関数のスクリプトがあります。

関数 wf_print は先祖関数の 1 つです。先祖関数には何も記述されていないスクリプトがあり、各子孫ウィンドウの子孫スクリプトには適切なスクリプトが記述されています。

guo_global_vars.ish_currentsheet.wf_print ()

メニュー m_file のメニュー項目 m_export で呼び出される関数 wf_exportは、先祖ウィンドウでは定義されていません。メニュー項目 m_exportの以下のスクリプトは、関数 wf_export の呼び出しに DYNAMIC キーワードを使用します。スクリプトが実行されると、変数 ish_currentsheet の値は、関数 wf_export の定義がある子孫ウィンドウのインスタンスになります。

guo_global_vars.ish_currentsheet.DYNAMIC wf_export()

関数とイベントを動的に呼び出すときのエラー

関数やイベントを動的に呼び出す場合、何も影響しなかったり、実行時エラーになったりと、そのときの状況に応じてさまざまな結果をもたらします。次の表に、条件別にエラーの状態を示します。

関数 関数の動的呼び出しの規則は、関数が存在しなければならないことを除けば、イベントと似ています。関数が見つからない場合は、実行時エラーが起きます。イベントはスクリプトがなくても定義できますが、関数を定義するときは、スクリプトがなければなりません。次のようなステートメントを考えてみてください。

1 次のステートメントは戻り値を無視します。

object.DYNAMIC funcname( )

2 次のステートメントは Integer 型の戻り値を必要とします。

int li_intli_int = object.DYNAMIC funcname( )

3 次のステートメントは Any 型の戻り値を必要とします。

any la_anyla_any = object.DYNAMIC funcname( )

Page 117: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 107

次の表は、これらのステートメントを例として使用しています。

表 6-3: 動的な関数の呼び出しエラー

イベント 次のようなステートメントを考えてみてください。

1 次のステートメントは戻り値を無視します。

object.EVENT DYNAMIC eventname( )

2 次のステートメントは Integer 型の戻り値を必要とします。

int li_intli_int = object.EVENT DYNAMIC eventname( )

3 次のステートメントは Any 型の戻り値を必要とします。

any la_anyla_any = object.EVENT DYNAMIC eventname( )

次の表は、これらのステートメントを例として使用しています。

表 6-4: 動的なイベントの呼び出しエラー

条件 1 条件 2 結果 例

関数が存在しない場合

なし 実行時エラー 65:「動的関数が参照できません」が起きます。

すべてのステートメントで実行時エラー 65 が起きます。

関数が存在し、実行されるが、戻り値が定義されていない場合

スクリプトが戻り値を必要とする場合

実行時エラー 63:「戻り値のない関数 /イベントが式の中で使われています」が起きます。

ステートメント 2 と 3 では、実行時エラー 63 が起きます。

条件 1 条件 2 結果 例

イベントが存在しない場合

スクリプトが戻り値を必要としない場合

呼び出しは失敗しますが、エラーは起きません。

ステートメント 1 の実行は失敗しますが、エラーは起きません。

スクリプトが戻り値を必要とする場合

Any 型の null が返されます。

ステートメント 3 では、変数 La_any に null が設定されます。

Page 118: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

静的呼び出しと動的呼び出し

108 PowerBuilder

スクリプトが必要とする戻り値のデータ型が Any 型でない場合、実行時エラー 19 が起きます。Any 型の戻り値を適切なデータ型に変換することはできません。

ステートメント 2 では、変数 li_int への代入は実行時エラー 19 が起きます。

イベントが存在するが、実装されない(スクリプトがない)場合

イベントに戻り値が定義されている場合

定義されたデータ型の null が返されます。

イベント eventname が Integer 型の戻り値を返すように定義されている場合、ステートメント 2 では、変数 li_int に null が設定されます。

イベントに戻り値が 定義されていない場合

Any 型の null が返されます。

ステートメント 3 では、変数 La_any に null が設定されます。

スクリプトが必要とする戻り値のデータ型が Any 型でない場合、実行時エラー 19 が起きます。Any 型の戻り値を適切なデータ型に変換することはできません。

ステートメント 2 では、変数 li_int への代入は実行時エラー 19 が起きます。

イベントが存在し、実行されるが、戻り値が定義されていない場合

スクリプトが戻り値を必要とする場合

実行時エラー 63:「戻り値のない関数 /イベントが式の中で使われています」が起きます。

ステートメント 2 と 3 では、実行時エラー 63 が起きます。

条件 1 条件 2 結果 例

Page 119: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 109

エラーが起きた場合 実行時エラーが起きたときにアプリケーションを終了させないために、動的関数呼び出しを try-catch ブロックで囲むことができます。SystemError イベントでエラーを処理することもできますが、アプリケーションをそのまま継続させないでください。SystemError イベントでは、エラーの後処理をし、アプリケーションを終了させる必要があります。

try-catch ブロックの使用法については、『アプリケーション テクニック』マニュアルの例外処理の章を参照してください。

引数が一致しない場合 関数の引数は、関数定義の一部です。したがって、引数が一致しない場合は(データ型に互換性があれば一致するとみなす)、その関数は異なる関数です。関数が存在しない場合と同じ結果となります。

引数が一致しないイベントを動的に呼び出す場合は、呼び出しは失敗し、制御が呼び出し元のスクリプトに戻ります。実行時エラーは起きません。

エラーのないスクリプトの記述方法

関数とイベントの動的呼び出しは、実行時エラーが起きやすくなります。これらのエラーを回避する方法は、関数とイベントを静的に呼び出すことです。または、アプリケーションの設計とテストを十分に行って、関数やイベントが、正しいデータ型の戻り値を確実に返すようにします。

エラーをチェックすることで、実行時エラーを回避できるのは、データ型の変換エラーです。

上記の表で前述したとおり、関数やイベントが定義されていても実装されていない場合、関数やイベントは、Any 型の変数または定義された戻り値のデータ型の変数として、null を返します。

動的呼び出しで、戻り値を Any 型の変数に代入する場合、スクリプトで値を使用する前に、null(失敗)かどうかをチェックできます。

以下の例は、戻り値を使用する前に null をチェックします。

any la_anyinteger li_gotvaluela_any = object.DYNAMIC uf_getaninteger( )IF IsNull(la_any) THEN

... // エラー処理ELSE

li_gotvalue = la_anyEND IF

Page 120: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

関数とイベントの多重定義、上書き、拡張

110 PowerBuilder

関数とイベントの多重定義、上書き、拡張PowerBuilder で関数を継承する場合、次の「関数の多重定義と上書き」で説明しているように、関数を多重定義するか、その定義を上書きするかを選択できます。

イベントを継承する場合、デフォルトではイベントのスクリプトが拡張されます。111 ページの「イベントの拡張と上書き」で説明しているように、スクリプトを拡張するか、上書きするかを選択できます。

関数の多重定義と上書き

多重定義する関数を作成するには、ほかの関数の場合と同じように、[挿入|関数]を使って関数を宣言します。

関数の上書きは、先祖オブジェクトの関数と同じ名前で同じ引数の関数を、子孫オブジェクトで定義することを意味します。子孫オブジェクトでは、スコープ記号(::)を使用しない限り、先祖関数のかわりに子孫関数が常に呼び出されます。

関数を上書きするには、ペインタで子孫オブジェクトを開き、スクリプト ビューでその関数を選択し、新しいスクリプトを作成します。関数にスクリプトがあることを示すアイコンは、その関数が先祖から継承されている場合、半分影付きになっています。

オブジェクト関数だけが多重定義や上書きができます。グローバル関数は多重定義できません。

多重定義された関数の引数を一致させるときのデータ型の上位変換

引数に数値を渡す関数と文字列を渡す関数が多重定義されている場合、開発者には、どの引数を指定すれば、どちらの関数が呼び出されるかは明らかです。多重定義された関数の引数のデータ型は、互換性がないほうがよいでしょう。このような多重定義では、アプリケーションに必要な関数を確実に呼び出せます。

問題のある多重定義 多重定義された関数の引数のデータ型が互換性がある場合(数値データ型、文字列と文字)、どの関数が呼び出されるかを決定するには、どのようにデータ型が上位変換されるかを考慮しなければなりません。どの関数が呼び出されるかを決定するのが複雑なため、このような多重定義は望ましくありません。

Page 121: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 111

引数に式を渡して関数を呼び出した場合、式のデータ型が明確でないときがあります。しかし、引数のデータ型は、多重定義された関数のうちどの関数を呼び出すかを決定するので重要です。

数値データ型のデータ型上位変換は複雑なため、異なる数値データ型の引数を持つ関数は多重定義しないほうがよいでしょう。後で何か変更を行った場合、その変更が変更前と異なる関数を呼び出してしまうと、アプリケーションを実行したときに予期せぬ結果になることがあります。

データ型の上位変換の動作方法

式が評価されるときは、定数や変数のデータ型を変換して、演算や文字列の連結をします。

数値 算術演算式が評価されるとき、演算子とオペランドのデータ型に応じて、式のデータ型が上位変換されます。たとえば、式 n/2 は除算なので、式のデータ型は Double 型になります。変数 n のデータ型は、データ型の変換には関係しません。

文字列 文字と文字列を連結する式が評価されるとき、文字(Char 型)は文字列(String 型)に上位変換されます。

データ型の上位変換についての詳細は、79 ページの「PowerBuilder 式のデータ型」を参照してください。

データ型の変換関数の使い方

データ型の変換関数を呼び出すことにより、式のデータ型を制御できます。データ型の変換関数を用いて、式のデータ型を変換し、呼び出す関数の引数のデータ型に合わせることができます。

たとえば、式 n/2 は除算なので、式のデータ型は Double 型になります。しかし、呼び出す関数の引数のデータ型が Long 型の場合は、呼び出す関数とオブジェクトに定義されている関数を一致させるために、Long関数を使用して、式のデータ型を Long 型に変換します。

CalculateHalf(Long(n/2))

イベントの拡張と上書き

PowerBuilder で、子孫オブジェクトでイベントのスクリプトを記述する場合は、先祖で記述したスクリプトを拡張または上書きできます。

イベントの拡張(デフォルト)は、まず先祖スクリプトを実行して、次に子孫のイベント スクリプトを実行します。

イベントの上書きは、先祖スクリプトを無視して、子孫スクリプトだけを実行します。

Page 122: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

関数とイベントへの引数の渡し方

112 PowerBuilder

イベントの多重定義はできません

同じ名前で異なる引数のイベントを定義しても、イベントは多重定義できません。イベント名は固有でなければなりません。

拡張または上書きを選択するには、スクリプト ビューでスクリプトを開き、メニューの[編集]またはポップアップ メニューの[先祖スクリプトを拡張]をオンまたはオフにします。

関数とイベントへの引数の渡し方PowerBuilder では、組み込みまたはユーザ定義の関数とイベントに引数を渡す方法は、3 種類あります。

表 6-5: 関数とイベントへの引数の渡し方

引数の渡し方 説明

値渡し(By value)

関数やイベントのスクリプトでは、呼び出し元の変数のコピーが使用できます。渡された引数の変更は、変数のコピーだけに影響します。呼び出し元のスクリプトにあるオリジナルの変数は、変更されません。

参照渡し(By reference)

関数やイベントのスクリプトに呼び出し元の変数へのポインタが渡されます。渡された引数の変更は、呼び出し元のスクリプトにあるオリジナルの変数を変更します。

読み取り専用 関数やイベントで呼び出し元の変数が使用できます。引数の値は定数と同じように扱われます。渡された引数の変更はできません。引数を変更するスクリプトを記述するとコンパイル エラーになります。

読み取り専用は値渡しのようにデータのコピーを作成しないので、いくつかのデータ型ではパフォーマンスがよくなります。読み取り専用によってパフォーマンスがよくなるデータ型は、String 型、Blob型、Date 型、Time 型、DateTime 型です。

ほかのデータ型については、読み取り専用で引数を渡すことによって、開発者に引数が読み取りしか使用されないことを明確にさせます。

Page 123: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 113

オブジェクトの渡し方

関数やイベントの引数にオブジェクトを渡すと、そのオブジェクトのプロパティと関数を参照するときは、オブジェクトが存在しなければなりません。関数を呼び出してもオブジェクトのインスタンスが破棄されていた場合は、null オブジェクトの参照のため実行時エラーになります。これは、参照渡し、値渡し、読み取り専用のいずれの方法で引数を渡したとしてもエラーになります。

たとえば、シングルライン エディットがあるウィンドウがあるとします。ウィンドウの Close イベントで、関数にシングルライン エディットを渡してポストする場合、関数が実行するときにはウィンドウが存在しません。シングルライン エディットに入力した情報を使用するには、引数にオブジェクトを渡すのではなく、オブジェクト名などの情報そのものを渡さなければなりません。

オブジェクトを渡しても、関数ではオブジェクトのコピーは取得できません。参照渡しと値渡しはオブジェクト自身でなく、オブジェクトの参照が渡されます。

値渡しされたオブジェクト

オブジェクトを値渡しすると、オブジェクトへの参照のコピーが渡されます。その参照はオリジナルのオブジェクトをそのまま指しています。渡されたオブジェクトのプロパティを変更すると、オリジナルのオブジェクトが変更されます。ただし、オリジナルのオブジェクトに影響しないで、別のオブジェクトを参照するように引数の値を変更することもできます。

参照渡しされたオブジェクト

オブジェクトを参照渡しすると、オリジナルのオブジェクトの参照へのポインタが渡されます。渡されたオブジェクトのプロパティを変更すると、オリジナルのオブジェクトが変更されます。渡された引数の値を変更して、オリジナルのオブジェクトへの参照を新しいオブジェクトへの参照にすることができます。

読み取り専用で渡されたオブジェクト

オブジェクトを読み取り専用で渡すと、オブジェクトへの参照のコピーが渡されます。新しいオブジェクトを指すように、オリジナルのオブジェクトへの参照を変更することはできませんが(読み取り専用は CONSTANT 宣言に等しいため)、オリジナルのオブジェクトのプロパティを変更することはできます。

Page 124: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

関数とイベントへの引数の渡し方

114 PowerBuilder

構造体の渡し方

引数に構造体を渡す場合は、オブジェクトと違って変数と同じように動作します。

値渡しされた構造体 構造体を値渡しすると、構造体のコピーが渡されます。オリジナルの構造体に影響しないで、引数の値を変更することができます。

参照渡しされた構造体 構造体を参照渡しすると、構造体への参照が渡されます。引数の値を変更すると、オリジナルの構造体が変更されます。構造体は、スコープの外に出るまで存在するので、null オブジェクトの参照エラーになることはありません。

読み取り専用で渡された構造体

構造体を読み取り専用で渡すと、構造体のコピーが渡されます。引数の値は変更できません。

配列の渡し方

引数が配列の場合は、関数やイベントの定義で引数名の後に角カッコ([])を指定します。

引数としての可変長配列

たとえば、関数 uf_convertarray の引数に、Integer 型の可変長配列を定義するとします。引数の名前を intarray とすると、引数名に intarray[ ]、データ型に integer を指定します。

関数を呼び出すスクリプトで、配列変数を宣言するか、インスタンス変数か受け取った値を使用します。変数の宣言は、次のとおりです。

integer a[]

関数を呼び出すときは配列全体を渡すので、角カッコを省略します。角カッコを指定すると、配列から値を 1 つしか渡せません。

uf_convertarray(a)

引数としての固定長配列

関数 uf_convertarray の引数に、10 個の要素を持つ Integer 型の固定長配列を定義するとします。引数の名前を intarray とすると、引数名にintarray[10]、データ型に integer を指定します。

渡される変数の宣言は、以下のようになります。

integer a[10]

角カッコを指定しないで関数を呼び出します。

uf_convertarray(a)

Page 125: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 115

配列の次元が一致しない場合

渡された配列変数の次元が、関数で定義されている配列引数の次元と一致しない場合は、配列から配列への代入規則が適用されます。詳細については、52 ページの「配列の宣言」を参照してください。

戻り値の使い方関数とイベントの戻り値は使用できます。

関数

すべての PowerScript 関数は、戻り値を返します。戻り値は、使用することも、無視することもできます。ユーザ定義関数と外部関数は、必ずしも戻り値を返すとは限りません。

戻り値を使用するには、適切なデータ型の変数に戻り値を代入するか、戻り値と同じデータ型の値が使用できる箇所で関数を呼び出します。

関数のポスト

関数をポストすると、その戻り値は使用できません。

例 組み込みの Asc 関数は String 型の引数を受け取り、渡された文字列の最初の文字の Unicode コード ポイント値を返します。

string S1 = "Carton"long TestTest=32+Asc(S1) // 変数 Test の値は現在 99 です

// ("C" のコード ポイント値は 67 です)。

SelectRow 関数は、最初の引数に行番号を受け取ります。GetRow 関数の戻り値は、行番号を返します。

dw_1.SelectRow(dw_1.GetRow(), true)

戻り値を無視するには、1 つのステートメントとして関数を呼び出します。

Beep(4) // Beep 関数は戻り値を返しますが、 // ほとんど必要とされません。

Page 126: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

戻り値の使い方

116 PowerBuilder

イベント

ほとんどのシステム イベントは戻り値を返します。戻り値は Long 型の数値のコードで、イベントごとに特別な意味があります。イベントに対するスクリプトで RETURN 文を使用して、イベントの戻り値を指定します。

エンド ユーザのアクションかシステム メッセージによってイベントが起動された場合、値はスクリプトにではなくシステムに戻されます。

システム イベントやユーザ定義イベントをスクリプトで起動する場合は、戻り値は呼び出し元のスクリプトに戻されます。スクリプトでは、その戻り値を使用できます。イベントをポストすると、戻り値は使用できません。

カスケード呼び出しと戻り値の使い方

PowerBuilder のドット(.)表記を使用して、いくつかのオブジェクト関数またはイベントを連続的に呼び出すことができます。関数またはイベントの戻り値は、次に呼び出される関数またはイベントが属すオブジェクトと同じオブジェクト データ型でなければなりません。

次の構文は、3 つの関数をカスケード呼び出しする場合の戻り値の関係を示します。

func1returnsobject( ).func2returnsobject( ).func3returnsanything( )

カスケード呼び出しの欠点

関数をカスケード呼び出しすると、関数の戻り値をチェックできなくなるため、関数の呼び出しが成功したかどうかを確認することができません。関数の戻り値をチェックする場合、各関数を別々に呼び出し、戻り値を変数に代入します。そして、カスケード呼び出しの最後の関数名の前に、エラー チェックした変数をドット(.)表記で指定できます。

動的呼び出し カスケード呼び出しで DYNAMIC キーワードを使用すると、呼び出されるすべての関数に適用されます。

次の例では、関数 func1 と func2 がどちらとも動的に呼び出されます。

object1.DYNAMIC func1().func2()

カスケード呼び出しで DYNAMIC キーワードを複数使用すると、コンパイル エラーになります。次の例は、エラーになります。

object1.DYNAMIC func1().DYNAMIC func2() // エラー

Page 127: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 117

ポストされた関数とイベント

ポストされた関数やイベントは、呼び出し元のスクリプトに戻り値を戻しません。したがって、カスケード呼び出しの最後の関数またはイベントだけが POST キーワードを使用できます。最後の呼び出しの前の呼び出しは、最後に呼び出される関数またはイベントが属すオブジェクトと同じオブジェクト データ型の戻り値を戻さなければなりません。

システム イベント システム イベントの戻り値のデータ型は Long 型であるか、または戻り値がないので、システム イベントはカスケード呼び出しの最後に指定しなければなりません。システム イベントは、次の呼び出しで使用できるオブジェクトを戻しません。

ユーザ定義イベントは、オブジェクト データ型の戻り値を定義できます。したがって、ユーザ定義イベントをカスケード呼び出しに指定できます。

PowerBuilder の関数とイベントの呼び出し構文説明 これは、PowerBuilder のすべての関数とイベントを呼び出すための構

文です。指定するキーワードによって、システム関数、グローバル関数、オブジェクト関数、ユーザ定義関数、外部関数、およびユーザ定義イベントを呼び出すことができます。

構文 { objectname.}{ type } { calltype } { when } name ( { argumentlist } )

次の表に、関数とイベントを呼び出すときに使用する引数を示します。

表 6-6: 関数とイベントの呼び出しで使用する引数

引数 説明

objectname (オプション)

関数またはイベントが定義されているオブジェクトの名前またはその子孫オブジェクトの名前。後にピリオド(.)が続きます。または、2 つのコロン(::)が続く先祖クラスの名前です。

修飾子のない関数名の場合、PowerBuilder は関数の検索規則に従い、最初に見つけた関数を実行します。

システム関数やグローバル関数の場合は、objectname を省略します。

修飾子のない関数名を検索するための検索規則についての詳細は、98 ページの「関数とイベントの検索と実行方法」を参照してください。

Page 128: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerBuilder の関数とイベントの呼び出し構文

118 PowerBuilder

解説 関数名とイベント名は大文字と小文字を区別しません。たとえば、以下のステートメントは同じです。

Clipboard("PowerBuilder")clipboard("PowerBuilder")CLIPBOARD("PowerBuilder")

引数の呼び出し type、calltype、when キーワードは、objectname の後であれば、どの順序で指定してもかまいません。

イベントまたは関数によっては、適用されない構文のオプションがあります。たとえば、PowerScript オブジェクト関数の動的呼び出しは、余分なオーバーヘッドを引き起こすだけです。しかし、異なるオブジェクトに同じ名前のユーザ定義関数がある場合は、その関数を動的に呼び出せば、有効なこともあるでしょう。

type (オプション)

関数またはイベントのどちらを呼び出すかを指定するキーワード。値は以下のとおりです。

• FUNCTION(デフォルト)

• EVENT

calltype (オプション)

PowerBuilder が関数またはイベントをいつ検索するかを指定するキーワード。値は以下のとおりです。

• STATIC(デフォルト)

• DYNAMIC

静的呼び出しと動的呼び出しについての詳細は、103 ページの「静的呼び出しと動的呼び出し」を参照してください。動的呼び出しについての詳細は、104 ページの「動的呼び出し」を参照してください。

when (オプション)

関数またはイベントをただちに実行するか、現行のスクリプトが終了した後に実行するかを指定するキーワード。値は以下のとおりです。

• TRIGGER -(デフォルト)関数またはイベントをただちに実行します。

• POST - 関数またはイベントがオブジェクトのキューに追加され、キュー内のほかのメッセージが処理された後で順番が来たら実行します。

トリガとポストについての詳細は、100 ページの「関数とイベントのトリガまたはポスト」を参照してください。

name 呼び出すオブジェクト関数またはイベントの名前

argumentlist (オプション)

name に渡す値。ここで指定する値のデータ型は、関数またはイベントの定義で宣言されたデータ型に対応しなければなりません。

引数 説明

Page 129: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 119

ユーザ定義グローバル関数やシステム関数をトリガまたはポストすることはできますが、動的に呼び出すことはできません。

関数の検索 指定した名前のグローバル関数が存在しない場合、PowerBuilder は、システム関数を検索する前に、関数の名前と引数が一致するオブジェクト関数を検索します。

先祖オブジェクトの関数とイベントの動的呼び出し PowerBuilder に子孫オブジェクトの関数やイベントを検索させないで、先祖オブジェクトの関数やイベントを検索させる場合は、グローバル スコープ記号(::)を使用します。

グローバル スコープ記号についての詳細は、121 ページの「先祖オブジェクトの関数とイベントの呼び出し」を参照してください。

カスケード呼び出し ドット(.)表記を使用して、カスケード呼び出しを行えます。各関数やイベントの戻り値は、次に呼び出される関数またはオブジェクトが属すオブジェクトと同じオブジェクト データ型でなければなりません。

カスケード呼び出しについての詳細は、116 ページの「カスケード呼び出しと戻り値の使い方」を参照してください。

戻り値の使い方 関数に戻り値がある場合、別の関数の引数か式のオペランドとして、代入文の右辺に関数を指定できます。

外部関数 外部関数を呼び出すには、まず、その関数を宣言しなければなりません。外部関数の宣言についての詳細は、61 ページの「外部関数の宣言」を参照してください。

例 例 1 以下のステートメントは、最も簡単な関数呼び出し構文を使用する各種の関数呼び出しです。

以下のステートメントは、システム関数 Asc を呼び出します。

charnum = Asc("x")

以下のステートメントは、データウィンドウ コントロールのスクリプトで、データウィンドウ関数を呼び出します。

Update( )

以下のステートメントは、グローバル ユーザ定義関数 gf_setup_appl を呼び出します。

gf_setup_appl(24, "Window1")

以下のステートメントは、システム関数 PrintRect を呼び出します。

PrintRect(job, 250, 250, 7500, 1000, 50)

Page 130: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerBuilder の関数とイベントの呼び出し構文

120 PowerBuilder

例 2 以下のステートメントは、グローバル関数とシステム関数の呼び出しです。

以下のステートメントは、グローバル ユーザ定義関数 gf_setup_appl をポストします。呼び出し元のスクリプトが終了すると、関数が実行されます。

POST gf_setup_appl(24, "Window1")

以下のステートメントは、システム関数 PrintRect をポストします。呼び出し元のスクリプトが終了すると、関数が実行されます。job で指定された印刷ジョブはまだ開いていなければなりません。

POST PrintRect(job, 250, 250, 7500, 1000, 50)

例 3 以下のステートメントは、コントロールのスクリプトで、そのコントロールが配置されているウィンドウで定義したユーザ定義関数を呼び出します。FUNCTION、STATIC、TRIGGER の各キーワードはデフォルトなので、以下の 2 つのステートメントは同じです。

Parent.FUNCTION STATIC TRIGGER wf_process( )Parent.wf_process( )

例 4 以下のステートメントは、データ ウィンドウ コントロールの Clicked イベントに対するスクリプトで同じコントロールの DoubleClicked イベントを呼び出します。システムが Clicked イベントに渡した引数は、DoubleClicked イベントにそのまま渡されます。DoubleClicked イベントがシステムによって起動された場合は、PowerBuilder が引数を DoubleClicked に渡します。

This.EVENT DoubleClicked(xpos, ypos, row, dwo)

以下のステートメントは、DoubleClicked イベントをポストします。

This.EVENT POST DoubleClicked(xpos, ypos, row, dwo)

例 5 変数 iw_a は、先祖ウィンドウ データ型 w_ancestorsheet のインスタンス変数です。

w_ancestorsheet iw_a

メニューには関数 wf_export を呼び出すスクリプトがありますが、その関数は先祖で定義されていないとします。スクリプトをコンパイルするためには、DYNAMIC キーワードが必要です。

iw_a.DYNAMIC wf_export( )

実行時に、関数 wf_export の定義を持つ子孫ウィンドウを開く場合、子孫ウィンドウのインスタンスは変数 iw_a に割り当てられ、関数wf_export の呼び出しは成功します。

Page 131: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 121

先祖オブジェクトの関数とイベントの呼び出し説明 PowerBuilder では、子孫オブジェクトのインスタンスを作成する場合、

そのクラスが先祖で、子孫オブジェクトに先祖を上書きする関数またはイベントが定義されていても、子孫の関数またはイベントが実行されます。先祖の関数またはイベントを実行するには、グローバル スコープ記号(::)を使って、明示的に先祖の関数またはイベントを呼び出します。

構文 { objectname.} ancestorclass ::{type } { when } name ( { argumentlist } )

次の表に、オブジェクトの先祖の関数とイベントを呼び出すときに使用する引数を示します。

表 6-7: 先祖の関数とイベントの呼び出しで使用する引数

解説 AncestorReturnValue 変数 子孫オブジェクトでイベント スクリプトを拡張する場合、コンパイラはローカル変数 AncestorReturnValue を自動的に生成します。先祖イベント スクリプトの戻り値を知る必要がある場合は、この変数を使います。また、先祖スクリプトを上書きし、CALL 構文を使って先祖イベント スクリプトを呼び出す場合にも、この変数が生成されます。

引数 説明

objectname (オプション)

先祖オブジェクトに実行する関数が定義されているオブジェクトの名前

ancestorclass 実行する関数またはイベントがある先祖クラスの名前。ancestorobject が現行のオブジェクトのすぐ上の先祖の場合は、代名詞 Super が指定できます。

type (オプション)

関数またはイベントのどちらを呼び出すかを指定するキーワード。値は以下のとおりです。

• FUNCTION(デフォルト)

• EVENT

when (オプション)

関数またはイベントをただちに実行するか、現行のスクリプトが終了した後に実行するかを指定するキーワード。値は以下のとおりです。

• TRIGGER -(デフォルト)関数またはイベントをただちに実行します。

• POST - 関数またはイベントがオブジェクトのキューに追加され、キュー内のほかのメッセージが処理された後で順番が来たら実行します。

name 呼び出すオブジェクト関数またはイベントの名前

argumentlist (オプション)

name に渡す値。ここで指定する値のデータ型は、関数またはイベントの定義で宣言されたデータ型に対応しなければなりません。

Page 132: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

先祖オブジェクトの関数とイベントの呼び出し

122 PowerBuilder

AncestorReturnValue 変数のデータ型は、そのイベントの戻り値に定義されたデータ型と常に一致します。呼び出しに渡される引数は、子孫オブジェクトのイベントに渡される引数になります。

イベント スクリプトの拡張 AncestorReturnValue 変数は、拡張したイベント スクリプトで使用できます。イベント スクリプトを拡張すると、PowerBuilder が次の構文を生成し、イベント スクリプトの先頭に挿入します。

CALL SUPER::event_name

オブジェクトの構文をエクスポートする場合、またはソース エディタに表示する場合、ステートメントの参照のみ可能です。

次に、拡張したイベント スクリプトの例を示します。

If AncestorReturnValue = 1 THEN// スクリプトを実行するELSE// 別のスクリプトを実行するEND IF

イベント スクリプトの上書き イベント スクリプトを上書きする前に、以下のいずれかの CALL 構文で先祖イベントを呼び出す場合だけ、AncestorReturnValue 変数を使用できます。

CALL SUPER::event_name

CALL ancestor_name::event_name

コンパイラは、キーワード SUPER と先祖の名前を区別できません。スクリプトをコンパイルする前に、キーワード SUPER は先祖クラスの名前に置換されます。

CALL イベント構文を使用する場合だけ、AncestorReturnValue 変数が宣言されて値が代入されます。次の新しいイベント構文を使う場合はこの変数は宣言されません。

ancestor_name::EVENT event_name( )

先祖のイベント スクリプトを上書きするスクリプトに先祖と同じスクリプトを記述できますが、AncestorReturnValue 変数を使用する前にCALL 文を記述する必要があります。

// 事前処理のためのスクリプトを実行するCALL SUPER::uo_myeventIF AncestorReturnValue = 1 THEN...

CALL 文についての詳細は、130 ページの「CALL」を参照してください。

Page 133: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 6 章 関数とイベントの呼び出し

PowerScript リファレンス 123

例 例 1 ウィンドウ w_ancestor にイベント ue_process が定義されているとします。子孫ウィンドウには、同じイベントに対するスクリプトが記述されています。

子孫スクリプトの以下のステートメントは、継承階層内のイベントを検索して、一致するイベントをすべて呼び出します。子孫スクリプトが先祖スクリプトを拡張する場合は、その継承階層の最上位レベルの先祖スクリプトから順番に実行され、子孫スクリプトは最後に実行されます。子孫スクリプトが先祖スクリプトを上書きする場合は、その子孫スクリプトだけが実行されます。

EVENT ue_process( )

以下のステートメントは、先祖イベントだけを呼び出します。呼び出し元のスクリプトが別のオブジェクトまたは子孫ウィンドウに属す場合に、このスクリプトは実行できます。

w_ancestor::EVENT ue_process( )

例 2 代名詞 Super を使用して、先祖を参照できます。子孫ウィンドウのスクリプトまたはそのウィンドウ上のコントロールのスクリプトにおいて、以下のステートメントは、その子孫ウィンドウのすぐ上の先祖の Clicked イベントを呼び出します。

Super::EVENT Clicked(0, x, y)

例 3 以下のステートメントは、先祖ウィンドウの関数 wf_myfunc を呼び出します。子孫ウィンドウに wf_myfunc と呼ばれる関数が定義されていても、先祖の関数が呼ばれます。

Super::wf_myfunc( )Super::POST wf_myfunc( )

Page 134: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

先祖オブジェクトの関数とイベントの呼び出し

124 PowerBuilder

Page 135: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 2 部 ステートメント、イベント、および関数

Page 136: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix
Page 137: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 127

第 7 章 PowerScript 文

この章について この章では、PowerScript の各ステートメントとスクリプト内におけるステートメントの使い方について説明します。

内容項目 ページ

値の代入文 128

CALL 130

CHOOSE CASE 131

CONTINUE 133

CREATE 134

DESTROY 138

DO...LOOP 139

EXIT 141

FOR...NEXT 142

GOTO 144

HALT 145

IF...THEN 146

RETURN 148

THROW 149

THROWS 150

TRY...CATCH...FINALLY...END TRY 151

Page 138: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

値の代入文

128 PowerBuilder

値の代入文機能 変数やオブジェクトのプロパティに値を代入します。また、オブジェ

クト変数にオブジェクト参照を代入します。

構文 variablename = expression

解説 変数に値を代入するには、代入文を使います。スクリプト内で変数に値を代入するには、以下のように等号(=)を使います。

String1 = "Part is out of stock"TaxRate = .05

複数の変数への代入は不可 等号は論理演算子でもあるため、1 つのステートメントの中で複数の変数に値を代入することはできません。たとえば、次のステートメントは、A と B に 0 を代入するものではありません。

A=B=0 // このステートメントは A と B に 0 を代入しません。

このステートメントは、まず、B=0 が true か false かを評価し、次にこの論理値を A に代入します。A が Boolean 型の変数でなければ、このステートメントはコンパイル時にエラーとなります。

配列への値の代入 配列に対しては、以下のように 1 つの代入文で複数の値を代入できます。

int Arr[]Arr = {1, 2, 3, 4}

さらに、配列の内容をコピーすることもできます。たとえば、次のステートメントは、配列 Arr2 の内容を配列 Arr1 にコピーします。

Arr1 = Arr2

後置式演算式 次の表に示す PowerScript の後置式演算式を使用して変数に値を代入すれば、パフォーマンスが多少向上します。

引数 説明

variablename 値を代入する変数の名前またはオブジェクトのプロパティの名前。variablename は、ドット(.)表記を使用して、変数を 1 つ以上のオブジェクト名で修飾できます。

expression 式。式のデータ型は、variablename のデータ型と互換性がなければなりません。

Page 139: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 129

表 7-1: 後置式演算式を使用した値の代入

変数名にハイフンを使える場合は、-- や -= の前にスペースを入れる必要があります。スペースが入っていないと、マイナス符号は変数名の一部とみなされます。詳細については、5 ページの「識別子の命名」を参照してください。

例 例 1 以下のステートメントは、変数 ld_date に、それぞれ値を代入します。

date ld_dateld_date = Today( )ld_date = 2006-01-01ld_date = Date("2006/1/1")

例 2 以下のステートメントは、Window データ型の変数に、現行のコントロールの親への参照を代入します。

window lw_current_windowlw_current_window = Parent

例 3 以下のステートメントは、チェックボックス cbk_on を非表示にします。

cbk_on.Visible = FALSE

例 4 以下のステートメントは、代入文ではありません。シングルライン エディット sle_emp の中の文字列を判別します。

IF sle_emp.Text = "N" THEN Open(win_1)

例 5 以下のステートメントは、2 つの文字列を連結して、その結果をString 型の変数 Text1 に代入します。

string Text1Text1 = sle_emp.Text+".DAT"

値の代入文 例 同等の文

++ i ++ i = i +1

-- i -- i = i - 1

+= i += 3 i = i + 3

-= i -= 3 i = i -3

*= i *= 3 i = i * 3

/= i /= 3 i = i / 3

^= i ^=3 i = i ^ 3

Page 140: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

CALL

130 PowerBuilder

例 6 以下のステートメントでは、後置式演算式を使用しています。

int i = 4i ++ // i の値は 5i -- // i の値は再び 4 となるi += 10 // i の値は 14i /= 2 // i の値は 7

後置式演算子は、後置式代入文だけで使用できます。また、ステートメントの中で、ほかの演算子と一緒に使用することはできません。たとえば、以下のステートメントは無効です。

int i, ji = 12j = i ++ // このステートメントは無効です。

以下のステートメントは、++ が単独で使用されているので有効です。

int i, ji = 12i ++j = i

CALL機能 子孫オブジェクトのスクリプトから先祖オブジェクトのスクリプトを

呼び出します。先祖ユーザ オブジェクト、先祖メニュー、先祖ウィンドウの、イベントに対するスクリプトを呼び出すことができます。また、先祖ユーザ オブジェクトや先祖ウィンドウ内のコントロールのイベントに対するスクリプトを呼び出すこともできます。

CALL 文を使用して先祖イベント スクリプトを呼び出す場合、AncestorReturnValue 変数が生成されます。AncestorReturnValue 変数の詳細については、193 ページの「イベントについて」を参照してください。

構文 CALL ancestorobject {`controlname}::event

パラメータ 説明

ancestorobject 子孫オブジェクトの先祖

controlname (オプション)

先祖ウィンドウやカスタム ユーザ オブジェクトに配置されているコントロール名

event 先祖オブジェクトのイベント

Page 141: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 131

解説 標準的な構文の使い方

原則として、関数やイベントを呼び出す際には標準的な構文を使用してください。標準的な構文についての詳細は、117 ページの「PowerBuilder の関数とイベントの呼び出し構文」を参照してください。

標準的な構文を使用すると、先祖オブジェクトのイベントや関数をトリガまたはポストして、引数を渡すことができます。ただし、標準的な構文では、先祖オブジェクトのコントロールのスクリプトを呼び出すことはできません。

ancestorobject が子孫オブジェクトのすぐ上の先祖の場合は、代名詞Super を使うことができます。詳細については、15 ページの「Super 代名詞」を参照してください。

先祖イベントの呼び出しが行われると、現行イベントに渡される引数は自動的に先祖イベントに伝搬されます。先祖以外のイベントを呼び出し、引数を渡す場合は、新しい構文を使用する必要があります。新しい構文を使用しないと、各引数に null が渡されます。

例 例 1 次のステートメントでは、先祖ウィンドウのイベントに対するスクリプトを呼び出します。

CALL w_emp::Open

例 2 次のステートメントでは、先祖ウィンドウに配置されているコントロールのイベントに対するスクリプトを呼び出します。

CALL w_emp`cb_close::Clicked

CHOOSE CASE機能 条件式の値(通常は変数)に基づいてプログラムの実行内容を変更し

ます。

構文 CHOOSE CASE testexpressionCASE expressionlist

statementblock{ CASE expressionlist

statementblock. . .CASE expressionlist

statementblock } CASE ELSE

statementblock } END CHOOSE

Page 142: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

CHOOSE CASE

132 PowerBuilder

解説 CHOOSE CASE 文には、最低 1 つの CASE 句が必要です。また、ENDCHOOSE 文で完結させなければなりません。

CHOOSE CASE 文の次に記述された testexpression と CASE 句の expressionlist の値が一致した場合には、その expressionlist の直後の statementblock を実行します。その後、END CHOOSE 句の次のステートメントを実行します。

CASE 句が複数存在する場合は、testexpression と各 expressionlist に一致する値が見つかるか、CASE ELSE 句または END CHOOSE 句を検出するまで照合を行います。

testexpression と各 expressionlist に一致する値が見つからない場合、CASE ELSE 句が存在すれば、CASE ELSE 句の statementblock を実行します。CASE ELSE 句が存在しなければ、END CHOOSE 句の次のステートメントを実行します。

例 例 1 以下のステートメントは、変数 Weight の値によって異なった処理を行います。

CHOOSE CASE WeightCASE IS<16

Postage=Weight*0.30Method="USPS"

CASE 16 to 48Postage=4.50Method="UPS"

CASE ELSEPostage=25.00Method="FedEx"

END CHOOSE

パラメータ 説明

testexpression スクリプトの実行内容を決定する式

expressionlist 以下のいずれかの式

• 単一の値

• カンマで区切られた値の並び(たとえば、2, 4, 6, 8)

• TO 句(たとえば、1 TO 30)

• IS に続く関係演算子と比較値(たとえば、IS>5)

• 上記の式の任意の組み合わせ。式と式は暗黙的に OR で結合されます(たとえば、1, 3, 5, 7, 9, 27 TO 33, IS>42)

statementblock 条件式と expressionlist の値が一致する場合に実行する実行文ブロック

Page 143: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 133

例 2 以下のステートメントは、シングルライン エディット コントロールの中のテキストを Real 型の値に変換し、その値によって異なった処理を行います。

CHOOSE CASE Real(sle_real.Text)CASE is < 10.99999

sle_message.Text = "Real Case < 10.99999"CASE 11.00 to 48.99999

sle_message.Text = "Real Case 11 to 48.9999CASE is > 48.9999

sle_message.Text = "Real Case > 48.9999"CASE ELSE

sle_message.Text = "Cannot evaluate!"END CHOOSE

CONTINUE機能 DO...LOOP または FOR...NEXT 文の中で使用して、ループ内のステート

メントをスキップします。CONTINUE 文はパラメータを取りません。

構文 CONTINUE

解説 DO...LOOP 文または FOR...NEXT 文の中で CONTINUE 文を使うと、制御は次の LOOP 文または NEXT 文に移ります。その回のループ処理に限って、CONTINUE 文とループの最終文の間のステートメントがスキップされます。ネストされたループ処理では、CONTINUE 文は現行のループ内でステートメントをスキップします。

制御を現行のループ処理の外に移す場合は、141 ページの「EXIT」を参照してください。

例 例 1 以下のステートメントは、メッセージ ボックスを B = 2 と B = 3のときの 2 回だけ表示します。B > 3 になると、CONTINUE 文の後のステートメントはループの各反復処理においてスキップされます。

integer A=1, B=1DO WHILE A < 100

A = A+1B = B+1IF B > 3 THEN CONTINUEMessageBox("Hi", "B is " + String(B) )

LOOP

Page 144: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

CREATE

134 PowerBuilder

例 2 以下のステートメントは、Count > 15 になるまで B に 1 を加算します。

integer A=0, B=0, CountFOR Count = 1 to 100

A = A + 1IF Count > 15 THEN CONTINUEB = B + 1

NEXT// 実行後、A=100、B=15 となります。

CREATE機能 指定されたオブジェクト データ型のオブジェクトのインスタンスを

作成します。CREATE 文の実行後、作成されたオブジェクトのインスタンスのプロパティは、ドット(.)表記を用いて参照できます。

CREATE 文で作成されたオブジェクトのインスタンスは、同じオブジェクト データ型の変数に保持できます。

形式 1 では、オブジェクト データ型を直接指定します。形式 2 では、アプリケーションは動的にオブジェクト データ型を選択できます。

構文 形式 1(オブジェクト データ型を直接指定)

objectvariable = CREATE objecttype

形式 2(アプリケーションは動的にオブジェクト データ型を選択)

objectvariable = CREATE USING objecttypestring

パラメータ 説明

objectvariable データ型が objecttype のグローバル変数、インスタンス変数あるいはローカル変数

objecttype オブジェクト データ型

パラメータ 説明

objectvariable データ型が、作成されるオブジェクトのクラスか、そのクラスの先祖と同じクラスである、グローバル変数、インスタンス変数あるいはローカル変数

objecttypestring String 型の値。作成するクラスのデータ型の名前を指定します。

Page 145: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 135

解説 CREATE 文は、任意のクラス ユーザ オブジェクト(mailSession やTransaction などの標準クラス ユーザ オブジェクトを含む)を初めて参照するときに使用します。

PowerBuilder は、標準クラス ユーザ オブジェクトのうち、Message、Error、Transaction、DynamicDescriptionArea、DynamicStagingArea のデフォルトのオブジェクト インスタンスを 1 つずつ作成します。これらのオブジェクトのインスタンスをほかにも作成する場合は、CREATE 文を使用します。

開いているウィンドウに定義されていないメニューが必要な場合は、CREATE 文でそのメニューのインスタンスを作成します。908 ページの「PopMenu」を参照してください。

ビジュアル ユーザ オブジェクトやウィンドウのインスタンスを作成するには、CREATE 文ではなく、適切な Open 関数を使います。

以下は、メモリを割り当てるために、CREATE 文を使用しません。

• Integer や String などの標準データ型

• 環境オブジェクトなどの構造体

• AutoInstantiate が true に設定されているオブジェクト

• Open 関数などの関数を使用してインスタンスを作成したオブジェクト

オブジェクト型の動的指定 CREATE USING 文を使用して、アプリケーションはオブジェクト データ型を動的に選択できます。通常は、先祖オブジェクトのインスタンスとその子孫オブジェクトのインスタンスを作成するために使用します。特定の子孫オブジェクトは、実行時に選択されます。

たとえば、先祖オブジェクト uo_a に uo_a_desc1 と uo_a_desc2 の 2 つの子孫オブジェクトがある場合、アプリケーションの実行時にインスタンスを作成するオブジェクトを選択できます。

uo_a uo_a_varstring ls_objectname

IF ... THENls_objectname = "uo_a_desc1"

ELSEls_objectname = "uo_a_desc2"

END IFuo_a_var = CREATE USING ls_objectname

Page 146: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

CREATE

136 PowerBuilder

作成したインスタンスの破棄 作成したオブジェクトのインスタンスの使用後、DESTROY 文を呼び出して、そのオブジェクトのインスタンスが使用したメモリを解放することができます。ただし、DESTROY 文を呼び出すのは、ほかのオブジェクトによってそのオブジェクトが参照されていない場合のみです。ガベージ コレクション機能によって、各オブジェクトへの参照数がカウントされ、参照されていないオブジェクトは自動的に破棄されます。

ガベージ コレクションについての詳細は、89 ページの「ガベージ コレクション」を参照してください。

例 例 1 以下のステートメントでは、新しいトランザクション オブジェクトのインスタンスを作成し、そのインスタンスを変数 DBTrans に格納します。

transaction DBTransDBTrans = CREATE transactionDBTrans.DBMS = 'ODBC'

例 2 以下のステートメントは、アプリケーションがユーザ オブジェクトのサービスを必要としている場合に(PFC のサービス オブジェクト)、そのサービスを提供するサービス オブジェクトのインスタンスを作成します。サービス オブジェクトにアクセスするスクリプトでは、サービス オブジェクトの関数を呼び出す前に、サービス オブジェクトのインスタンスが存在するかどうかをチェックします。

サービス オブジェクトのインスタンスを作成するオブジェクトは、インスタンス変数として invo_service を宣言します。

n_service invo_service

オブジェクトの Open イベントで、サービス オブジェクトのインスタンスを作成します。

// あるオブジェクトの Open イベントIF (some condition) THEN

invo_service = CREATE n_serviceEND IF

別のスクリプトがサービス オブジェクト n_service の関数を呼び出す場合、そのスクリプトはサービス オブジェクトのインスタンスが作成されているか、変数 invo_service をチェックします。

IF IsValid(invo_service) THENinvo_service.of_perform_some_work( )

END IF

Page 147: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 137

サービス オブジェクトのインスタンスが作成されている場合は、そのインスタンスを破棄する必要があります。

IF isvalid(invo_service) THEN DESTROY invo_service

例 3 データストア オブジェクトのインスタンスを作成する場合は、データストア オブジェクトを使用する前に、DataObject プロパティにデータウィンドウ オブジェクト名を指定して、SetTransObject 関数を呼び出します。

l_ds_delete = CREATE u_dsl_ds_delete.DataObject = 'd_user_delete'l_ds_delete.SetTransObject(SQLCA)li_cnt = l_ds_delete.Retrieve(lstr_data.name)

例 4 以下の例は、n_file_service_class は先祖オブジェクトで、n_file_service_class_ansi と n_file_service_class_dbcs がその子孫オブジェクトです。2 つの子孫オブジェクトは、アプリケーションにサービスを提供するための関数と変数を持ちます。エンド ユーザが DBCS 環境で実行しているかどうかによって、インスタンスを作成する子孫オブジェクトを選択します。

n_file_service_class lnv_fileservicestring ls_objectnameenvironment luo_env

GetEnvironment ( luo_env )IF luo_env.charset = charsetdbcs! THEN

ls_objectname = "n_file_service_class_dbcs"ELSE

ls_objectname = "n_file_service_class_ansi"END IF

lnv_fileservice = CREATE USING ls_objectname

Page 148: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DESTROY

138 PowerBuilder

DESTROY機能 CREATE 文で作成したオブジェクトのインスタンスを破棄します。

DESTROY 文の実行後は、破棄されたオブジェクトのインスタンスのプロパティを参照することはできません。

構文 DESTROY objectvariable

解説 作成したオブジェクトのインスタンスの使用後、DESTROY 文を呼び出して、そのオブジェクトのインスタンスが使用したメモリを解放することができます。ただし、DESTROY 文を呼び出すのは、ほかのオブジェクトによってそのオブジェクトが参照されていない場合のみです。ガベージ コレクション機能によって、各オブジェクトへの参照数がカウントされ、参照されていないオブジェクトは自動的に破棄されます。

ガベージ コレクションについての詳細は、89 ページの「ガベージ コレクション」を参照してください。

アプリケーションを終了すると、オブジェクトのインスタンスはすべて自動的に破棄されます。

例 例 1 次のステートメントでは、CREATE 文で作成したトランザクション オブジェクトのインスタンス DBTrans を破棄します。

DESTROY DBTrans

例 2 以下の例は、ウィンドウの Open イベントが発生したときにOLEStorage 変数 istg_prod_pic を作成します。ウィンドウを閉じるときには、Close イベントのスクリプトでそのオブジェクトを破棄します。変数の宣言は、次のとおりです。

OLEStorage istg_prod_pic

ウィンドウの Open イベントでは、オブジェクトのインスタンスを作成して、OLE ストレージ ファイルを開きます。

integer li_resultistg_prod_pic = CREATE OLEStorageli_result = stg_prod_pic.Open("PICTURES.OLE")

ウィンドウの Close イベントでは、変数 istg_prod_pic を破棄します。

integer li_resultli_result = istg_prod_pic.Save( )IF (li_result 0) THEN

DESTROY istg_prod_picEND IF

パラメータ 説明

objectvariable データ型が PowerBuilder オブジェクトの変数

Page 149: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 139

DO...LOOP機能 一般的な反復処理ステートメントです。条件が true である間または

true になるまで実行文ブロックを実行します。

DO... LOOP 文には、以下の 4 つの書式があります。

• DO UNTIL 指定した条件が true になるまで実行文ブロックを実行します。条件の最初の評価が true となる場合、実行文ブロックは実行されません。

• DO WHILE 指定した条件が true の間、実行文ブロックを実行します。条件が false になると反復処理は終了します。条件の最初の評価が false となる場合、実行文ブロックは実行されません。

• LOOP UNTIL 実行文ブロックを最低 1 回実行し、指定した条件がtrue になるまで実行を続けます。

• LOOP WHILE 実行文ブロックを最低 1 回実行し、指定した条件がtrue の間は実行を続けます。条件が false になると反復処理は終了します。

DO...LOOP 文では、DO 文は反復処理する実行文ブロックの始まりを示し、LOOP 文は終わりを示します。

DO...LOOP 文はネストできます。

構文 DO UNTIL conditionstatementblock

LOOP

DO WHILE conditionstatementblock

LOOP

DOstatementblock

LOOP UNTIL condition

DOstatementblock

LOOP WHILE condition

解説 条件が true(WHILE に対して)または false(UNTIL に対して)の場合だけ実行文ブロックを実行したいときには、DO WHILE 文または DO UNTIL文を使用します。DO WHILE 文および DO UNTIL 文は、実行文ブロックを実行する前に条件を評価します。

パラメータ 説明

condition 評価する条件

statementblock 反復処理する実行文ブロック

Page 150: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DO...LOOP

140 PowerBuilder

実行文ブロックを最低 1 回実行したいときには、LOOP WHILE 文またはLOOP UNTIL 文を使用します。LOOP WHILE 文と LOOP UNTIL 文は、実行文ブロックの実行後に条件を評価します。

例 DO UNTIL 以下の DO UNTIL 文は、A > 15 になるまで Beep 関数ブロックを実行します。

integer A = 1, B = 1

DO UNTIL A > 15Beep(A)A = (A + 1) * B

LOOP

DO WHILE 以下の DO WHILE 文は、A <= 15 の間だけ Beep 関数ブロックを実行します。

integer A = 1, B = 1

DO WHILE A <= 15Beep(A)A = (A + 1) * B

LOOP

LOOP UNTIL 以下の LOOP UNTIL 文は、A > 15 になるまで Beep 関数ブロックを実行します。

integer A = 1, B = 1DO

Beep(A)A = (A + 1) * B

LOOP UNTIL A > 15

LOOP WHILE 以下の LOOP WHILE 文は、A <= 15 の間 Beep 関数ブロックを実行します。

integer A = 1, B = 1

DOBeep(A)A = (A + 1) * B

LOOP WHILE A <= 15

Page 151: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 141

EXIT機能 DO...LOOP 文または FOR...NEXT 文の中で用いて、制御を現行のループ

処理の外に移します。EXIT 文はパラメータを取りません。

構文 EXIT

解説 DO...LOOP 文または FOR...NEXT 文の中で EXIT 文を使用すると、制御がLOOP 文または NEXT 文の後のステートメントに移ります。また、ネストされたループ処理の中で、EXIT 文を使用すると、制御が実行中のループの外に移ります。

ループ処理の制御を次の LOOP 文または NEXT 文に移す方法についての詳細は、133 ページの「CONTINUE」を参照してください。

例 例 1 以下の EXIT 文は、配列 Nbr の要素の値が 0 のときループ処理を終了します。

int Nbr[10]int Count = 1// 配列 Nbr に値を代入する処理。

DO WHILE Count < 11IF Nbr[Count] = 0 THEN EXITCount = Count + 1

LOOP

MessageBox("Hi", "現在のカウントの値 : " + String(Count) )

例 2 以下の EXIT 文は、配列 Nbr の要素の値が 0 のときループ処理を終了します。

int Nbr[10]int Count// 配列 Nbr に値を代入する処理。

FOR Count = 1 to 10IF Nbr[Count] = 0 THEN EXIT

NEXT

MessageBox("Hi", "現在のカウントの値 : " + String(Count) )

Page 152: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

FOR...NEXT

142 PowerBuilder

FOR...NEXT機能 数値に基づいて反復処理を行います。1 つまたは複数のステートメン

トを、指定した回数だけ実行するときに使います。

構文 FOR varname = start TO end {STEP increment}statementblock

NEXT

解説 start パラメータと end パラメータ increment が正のとき end は start より大きく、increment が負のとき end は start より小さくなければなりません。

increment が正で start が end より大きい場合、または increment が負でstart が end より小さい場合には、statementblock は実行されません。

start および end を式で指定している場合、ループのたびに式が評価されます。式の結果の値が変わるとループ回数も変わります。次の例では、DeleteRow 関数でデータウィンドウの行を削除するので、ループごとに RowCount 関数の戻り値が変わります。

FOR n = 1 TO dw_1.RowCount( )dw_1.DeleteRow(1)

NEXT

加算値に変数を用いるには

加算値に変数を使用しなければならない場合には、DO...LOOP 文のいずれかの書式を使用し、ループ処理の間にその変数を加算します。

ネスト FOR...NEXT 文は、ネストできます。各 FOR 文には必ず対応する NEXT 文がなければなりません。

NEXT 文のかわりに END FOR 文を使用することもできます。

パラメータ 説明

varname 反復処理カウンタ変数名。どの数値データ型(byte、integer、double、real、long、longlong、decimal)でも可能ですが、Integer 型が最も高速です。

start varname の開始値

end varname の終了値

increment (オプション)

加算値を表す定数。increment は定数で varname と同じデータ型でなければなりません。increment を入力する場合にはSTEP 文が必要です。+1 はデフォルトの加算値です。

statementblock 反復処理する実行文ブロック

Page 153: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 143

オーバーフローの回避

start または end が varname のデータ型の上限値を超える場合、varnameはオーバーフローして無限ループになります。以下のステートメントは、Integer 型の変数 li_int を使用します。

FOR li_int = 1 TO 50000

end に指定した 50000 は Integer 型の上限を超えています。ループ処理で変数 li_int が加算されると、li_int が 50000 になる前にオーバーフローして無限ループになります。

例 例 1 以下のステートメントは、n >=5 かつ n <=25 の間、A に 10 を加えます。

FOR n = 5 to 25A = A+10

NEXT

例 2 以下のステートメントは、n >=5 かつ n <=25 の間、A に 10 を加え、n に 5 ずつ加算します。

FOR N = 5 TO 25 STEP 5A = A+10

NEXT

例 3 以下の 2 行のステートメントは、パラメータ increment が負でstart が end より小さいので実行されません。

FOR Count = 1 TO 100 STEP -1 IF Count < 1 THEN EXIT // この 2 行は Box[Count] = 10 // 実行されません。NEXT

例 4 以下のステートメントは、ネストされた FOR...NEXT 文です。

Int Matrix[100,50,200]FOR i = 1 to 100

FOR j = 1 to 50FOR k = 1 to 200

Matrix[i,j,k]=1NEXTNEXT

NEXT

Page 154: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

GOTO

144 PowerBuilder

GOTO機能 制御をスクリプトの中のあるステートメントから、ラベルの指示する

別のステートメントに移します。

構文 GOTO label

例 例 1 以下の GOTO 文は、Taxable=FALSE の行をスキップします。

Goto NextStepTaxable=FALSE //このステートメントは、実行されません。NextStep:Rate=Count/Count4

例 2 次の GOTO 文では、ラベル「OK:」があるステートメントに制御を移します。

GOTO OK...OK:...

パラメータ 説明

label 制御を移したいステートメントを指示するラベル。ラベルの識別子のあとにはコロンを付けます(たとえば、OK: )。GOTO 文の中ではラベルにはコロンを付けません。

Page 155: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 145

HALT機能 アプリケーションを終了します。

構文 HALT {CLOSE}

解説 キーワード CLOSE を伴わない HALT 文は、直ちにそのアプリケーションを終了します。

キーワード CLOSE を伴った HALT 文は、直ちにアプリケーションのClose イベントに対するスクリプトと、アプリケーションを終了する前にすべてのインスタンス化したオブジェクトで CloseQuery、Close、 および Destructor イベントのスクリプトを実行します。これらのイベントに対するスクリプトがない場合には、直ちにアプリケーションを終了します。

サーバ環境で動作するコンポーネントには HALT 文を入れないでください。PowerBuilder コンポーネントが EAServer または J2EE などのサーバで動作している場合に HALT 文が見つかると、アプリケーション(この場合はサーバ自体)を終了するかわりに、PowerBuilder VM は実行時エラーを送出し、動作を続けます。コンポーネントのライフサイクルは、コンテナが管理します。EAServer では、エラー メッセージは、Jaguar ログに書き込まれます。これは、実行時エラーによってトランザクション ロールバックが発生し、トランザクションが新しいトランザクションによって上書きされた場合でも同じです。

例 例 1 以下のステートメントは、シングルライン エディット sle_passwordに、String 型の変数 CorrectPassword に保持されている値と一致しないパスワードが入力されると、アプリケーションを終了します。

IF sle_password.Text <> CorrectPassword THEN HALT

例 2 以下のステートメントは、シングルライン エディット sle_passwordに、String 型の変数 CorrectPassword に保持されている値と一致しないパスワードが入力されると、アプリケーションを終了する前に、そのClose イベントのスクリプトを実行します。

IF sle_password.Text <> CorrectPassword &THEN HALT CLOSE

Page 156: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

IF...THEN

146 PowerBuilder

IF...THEN機能 条件が true の場合は、スクリプトで指定した処理を実行します。単一

行書式の形式 1 と、複数行書式の形式 2 があります。

構文 形式 1(単一行書式)

IF condition THEN action1 {ELSE action2}

形式 2(複数行書式)

IF condition1 THENaction1

{ ELSEIF condition2 THENaction2

. . . }{ ELSE

action3 }END IF

パラメータ 説明

condition 評価する条件式

action1 条件が true の場合に実行する処理。処理を指定するステートメントは、IF 文と同じ行の単一文でなければなりません。

action2 (オプション)

条件が false の場合に実行する処理。処理を指定するステートメントは、IF 文と同じ行の単一文でなければなりません。

パラメータ 説明

condition1 評価する最初の条件

action1 condition1 が true の場合に実行する処理。処理は、単一行をセミコロンで区切った複数のステートメント、または複数行で記述されたステートメントでもかまいません。最低 1 つの処理が必要です。

condition2 (オプション)

condition1 が false の場合に評価する条件。IF...THEN 文の中に複数の ELSEIF...THEN 文を記述できます。

action2 condition2 が true の場合に実行する処理。処理は、単一行をセミコロンで区切った複数のステートメント、または複数行で記述されたステートメントでもかまいません。

action3 (オプション)

前の条件のいずれも true でなかった場合に実行する処理。処理は、単一行をセミコロンで区切った複数のステートメント、または複数行で記述されたステートメントでもかまいません。

Page 157: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 147

解説 継続行文字を使用して、単一行書式を複数行に渡って記述できます。

複数行書式の IF...THEN 文は、END IF で完結させなければなりません。

例 例 1 次の単一行書式の IF...THEN 文では、Num の値が 1 の場合にウィンドウ w_first を開き、それ以外の場合にはウィンドウ w_rest を開きます。

IF Num = 1 THEN Open(w_first) ELSE Open(w_rest)

例 2 次の単一行書式の IF...THEN 文では、シングルライン エディットsle_State の値が "TX" の場合にメッセージを表示します。継続行文字を使用して、単一行のステートメントを 2 行で記述しています。

IF sle_State.text="TX" THEN &MessageBox("Hello","Tex")

例 3 次の複数行書式の IF...THEN 文では、w_first と w_second の 2 つのウィンドウの X 座標の値を比較します。w_first が w_second の右側にある場合、w_first は画面の左端に移動します。

IF w_first.X > w_second.X THENw_first.X = 0

END IF

例 4 次の複数行書式の IF...THEN 文では、アプリケーションに以下の処理を実行させます。

• X と Y が等しい場合、ビープ音を 2 回鳴らす

• X と Z が等しい場合、リストボックス lb_parts を表示し、5 つ目の項目をハイライト表示する

• X がブランクの場合、リストボックス lb_choose を表示する

• 上記のどの条件も true でない場合は、コマンドボタン cb_empty を非表示にし、コマンドボタン cb_full を表示する

IF X=Y THENBeep(2)

ELSEIF X=Z THENShow (lb_parts); lb_parts.SetState(5,TRUE)

ELSEIF X=" " THENShow (lb_choose)

ELSEHide(cb_empty)Show(cb_full)

END IF

Page 158: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

RETURN

148 PowerBuilder

RETURN機能 イベントや関数の実行を直ちに停止します。

構文 RETURN { expression }

解説 ユーザのアクションによってイベントが起動された場合、そのイベントに対するスクリプトの中に RETURN 文が使用されていると、そのイベントの実行を停止して、ユーザからの次のアクションを待ちます。

また、スクリプトから関数やイベントを呼び出す場合、呼び出された関数やイベントのスクリプトの中に RETURN 文が使用されていると、関数やイベントが呼び出された行に制御を移します(値を返します)。

例 例 1 以下のスクリプトを実行すると、システムはビープ音を 1 回鳴らします。2 番目の Beep 関数は実行されません。

Beep(1)RETURNBeep(1) // このステートメントは実行されません。

例 2 ユーザ定義関数の中の以下のステートメントは、変数 Arg2 が 0でないときには変数 Arg1 を変数 Arg2 で割った結果を返し、0 のときには -1 を返します。

IF Arg2 <> 0 THENRETURN Arg1/Arg2

ELSERETURN -1

END IF

パラメータ 説明

expression 関数の戻り値(または式)。戻り値は、関数の定義で指定した戻り値のデータ型と同じでなければなりません。

Page 159: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 149

THROW機能 ユーザ定義例外の例外処理を手動でトリガするときに使用します。

構文 THROW exlvalue

解説 THROW 予約語に続く変数は、Throwable データ型から派生した有効なオブジェクト インスタンスか、その有効なオブジェクト インスタンスを生成する式であることが必要です。たとえば、次の式を使用できます。

THROW create ExceptionType

ExceptionType は Throwable 型のオブジェクトです。

インスタンス化されていない例外を送出しようとすると、取得する例外情報が NullObjectError のみになり、必要な例外情報を再び取得することができなくなります。

メソッド スクリプトでは、メソッド プロトタイプ内で宣言している例外か、try-catch ブロック内で処理する例外のみ送出できます。プロトタイプの Throws 文内で宣言していないか、適切な try-catch ブロックで囲んでいないユーザ定義の例外を送出しようとすると、PowerScript コンパイラはエラー メッセージを表示します。

RuntimeError または RuntimeError の子孫が送出されると、行番号情報を含むインスタンス変数が THROW 文の発生する場所に埋め込まれます。エラーが処理され、再び送出されると、この情報は、null に設定されるまで更新されません。

例 long ll_resultll_result = myConnection.ConnectToServer()

ConnectionException exex = create ConnectionExceptionex.connectResult = ll_resultTHROW ex

end if

パラメータ 説明

exlvalue Throwable 型の変数(またはオブジェクトの有効なインスタンスを評価する式)。通常、送出されるオブジェクト型は、Throwable 型を継承する、システム Exception クラスから派生したユーザ定義例外クラスです。

Page 160: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

THROWS

150 PowerBuilder

THROWS機能 メソッドがトリガする例外型を宣言するのに使用します。メソッド プ

ロトタイプの一部になります。

構文 methodname ( {arguments} ) THROWS ExceptionType { , ExceptionType, ... }

解説 内部使用のみ

PowerBuilder スクリプトの関数呼び出しに THROWS 句を入力したり追加したりすることはありません。ただし、THROWS 句を、PowerBuilder関数、または pbm イベント ID によって定義されていないユーザ イベントに追加することはできます。

関数やイベントのプロトタイプに THROWS 句を追加する方法については、PowerBuilder の『ユーザーズ ガイド』マニュアルを参照してください。例外処理についての詳細は、『アプリケーション テクニック』マニュアルを参照してください。

パラメータ 説明

methodname 例外を送出するメソッドの名前

arguments 例外を送出するメソッドの引数。メソッドによっては、メソッドの引数は省略できます。

ExceptionType Throwable 型のオブジェクト。通常、送出されるオブジェクト型は、システム Exception クラスから派生したユーザ定義の例外クラスです。1 つのメソッドに対して複数の例外を定義する場合、カンマで例外型を区切ることにより、同じ句内で各例外型を送出できます。

Page 161: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 7 章 PowerScript 文

PowerScript リファレンス 151

TRY...CATCH...FINALLY...END TRY機能 例外の原因になるコードを分離し、特定の型の例外が発生した場合に

何をすべきかを説明し、例外が発生したかどうかに関わらず、ファイルやネットワークの接続を閉じる(およびオブジェクトを元の状態に戻す)ことができるようにします。

構文 TRYtrystatements

CATCH ( ThrowableType1 exIdentifier1 )catchstatements1

CATCH ( ThrowableType2 exIdentifier2 )catchstatements2

...CATCH ( ThrowableTypeN exIdentifierN )

catchstatementsNFINALLY

cleanupstatementsEND TRY

解説 TRY ブロックは、例外を送出する可能性のあるコードを分離するために使用します。なお、TRY ブロックとは、TRY キーワードと CATCH キーワードの間のステートメント ブロックです。CATCH 句を指定していない場合は、TRY キーワードと FINALLY キーワードの間のステートメント ブロックになります。TRY ブロック内のステートメントは、ステートメントのブロック全体が実行されたり、そのブロック内の一部のステートメントが例外の送出を引き起こしたりするまで、無条件に実行されます。

パラメータ 説明

trystatements 例外を送出する可能性のあるコードのブロック

ThrowableTypeN キャッチする例外のオブジェクト型。FINALLY ブロックを指定している場合、CATCH ブロックは省略可能です。CATCH ブロックは複数指定することもできます。try-catch ブロック内の CATCH ブロックごとに、対応する例外オブジェクト型とその型のローカル変数を指定する必要があります。

exIdentifierN ThrowableTypeN 型のローカル変数

catchstatementsN キャッチする例外の処理コード

cleanupstatements クリーンアップ コード。1 つ以上の CATCH ブロックを指定している場合、FINALLY ブロックは省略可能です。

Page 162: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

TRY...CATCH...FINALLY...END TRY

152 PowerBuilder

TRY ブロック内で送出される例外を処理するには、1 つまたは複数のCATCH ブロックを使用します。例外が送出されると、TRY ブロックの実行は停止し、その例外が CATCH キーワードの後の識別子が示す型と同じ型、またはその子孫である場合にのみ、最初の CATCH ブロック内のステートメントが実行されます。

送出された例外が最初の CATCH ブロックの識別子と同じ型またはその子孫でない場合、例外はこの CATCH ブロックによる処理を受けません。CATCH ブロックが複数ある場合は、その出現順に評価が実行されます。例外をどの CATCH ブロックによっても処理できない場合は、FINALLY ブロックのステートメントが実行されます。

例外は、外側にネストされた try-catch ブロックへのコール スタックの解放を続けます。外側にネストされたブロックがない場合、アプリケーション オブジェクトの SystemError イベントが起動します。

送出される例外がない場合、FINALLY ブロックがあればこのブロックの最初から実行が続行され、なければ END TRY ステートメントに続く行から実行が続行されます。

関連項目 THROW

Page 163: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 153

第 8 章 SQL 文

この章について この章では、埋め込み SQL 文と動的 SQL 文について説明し、さらにそのスクリプトでの使い方を解説します。

内容項目 ページ

スクリプトにおける SQL 文の使い方 154

CLOSE Cursor 157

CLOSE Procedure 158

COMMIT 159

CONNECT 160

DECLARE Cursor 161

DECLARE Procedure 162

DELETE 163

DELETE Where Current of Cursor 165

DISCONNECT 166

EXECUTE 166

FETCH 167

INSERT 168

OPEN Cursor 169

ROLLBACK 170

SELECT 171

SELECTBLOB 172

UPDATE 174

UPDATEBLOB 175

UPDATE Where Current of Cursor 176

動的 SQL の使い方 177

動的 SQL 書式 1 181

動的 SQL 書式 2 182

動的 SQL 書式 3 183

動的 SQL 書式 4 186

Page 164: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

スクリプトにおける SQL 文の使い方

154 PowerBuilder

スクリプトにおける SQL 文の使い方 PowerScript は、スクリプトにおける標準の埋め込み SQL 文と動的 SQL文をサポートしています。通常、PowerScript は、これらの SQL 文の中で使用される DBMS 固有のすべての句と予約語をサポートしています。たとえば、PowerBuilder では、SELECT 文の中で用いられる DBMS固有の組み込み関数をサポートしています。

埋め込み SQL 文についての詳細は、オンライン ヘルプを参照してください。

スクリプトにおける PowerScript 変数の参照

SQL 文の中で定数を参照できる箇所では、PowerScript 変数をその先頭にコロン(:)を付けることによって代用できます。これにはどのような PowerScript 変数でも使用できます。次の INSERT 文は、定数値を使用しています。

INSERT INTO EMPLOYEE ( SALARY )VALUES ( 18900 ) ;

上記のステートメントを、PowerScript 変数で定数を参照する形にすると、以下のようになります。

int Sal_varSal_var = 18900INSERT INTO EMPLOYEE ( SALARY )

VALUES ( :Sal_var ) ;

インジケータ変数の使い方

PowerBuilder は、データベース検索後に null 値や変換エラーの判別に使用されるインジケータ変数(Indicator Variables)をサポートしています。インジケータ変数は Integer 型で、FETCH 文や SELECT 文のHostVariableList(ホスト変数リスト)において指定します。

各インジケータ変数とインジケータ変数が示している変数は、スペース(カンマは付けない)で区切ります。たとえば、次のステートメントは、インジケータ変数を含まない HostVariableList です。

:Name, :Address, :City

次のステートメントは、インジケータ変数を含む上記と同じ HostVariableList です。

:Name :IndVar1, :Address :IndVar2, :City :IndVar3

インジケータ変数は、以下のいずれかの値を持ちます。

数値 意味

0 有効な null 以外の値

-1 null 値-2 変換エラー

Page 165: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 155

エラーの報告

あるカラムのデータ型が、関連する変数のデータ型と一致しない場合、すべての DBMS が必ず変換エラーを返すとは限りません。

次のステートメントは、インジケータ変数 IndVar2 を使用して、Addressに null 値が入っているかどうかを調べます。

if IndVar2 = -1 then...

また、次のステートメントは、インジケータ変数を使用せずに PowerScriptの IsNull 関数を使用して、Address に null 値が入っているかどうかを調べます。

if IsNull( Address ) then ...

次のステートメントは、インジケータ変数 IndVar3 を使用して、City にnull 値を設定します。

IndVar3 = -1

また、次のステートメントは、インジケータ変数を使用せずに PowerScriptの SetNull 関数を使用して、City に null 値を設定します。

SetNull( City )

スクリプトにおけるエラー処理

これまで例示した SQL 文のスクリプトにはエラー処理が含まれていませんが、各ステートメントの実行後に、トランザクション オブジェクトの成否コード(SQLCode プロパティ)をテストすることをお勧めします。以下に、SQLCode プロパティの値とその意味を示します。

DELETE 文、FETCH 文、および UPDATE 文など、特定のステートメントの実行後には、これらのアクションが少なくとも 1 行に対して適用されたことを確認するため、トランザクション オブジェクトの SQLNRowsプロパティもチェックするとよいでしょう。

値 意味

0 正常に終了しました。

100 検索する行が見つかりません。

-1 エラーが発生し、ステートメントの実行は失敗しました。SQLErrText プロパティまたは SQLDBCode プロパティの値を使用して詳細情報を入手してください。

Page 166: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

スクリプトにおける SQL 文の使い方

156 PowerBuilder

SQLErrText プロパティと SQLDBCode プロパティ トランザクション オブジェクトの String 型の SQLErrText プロパティには、データベース ベンダが提供するエラー メッセージが保持されています。また、Long 型の SQLDBCode プロパティには、データベース ベンダが定めたステータス コードが保持されています。

IF SQLCA.SQLCode = -1 THEN MessageBox("SQL エラー ", SQLCA.SQLErrText)

END IF

標準 SQL 文の貼り付け

以下の SQL 文をスクリプトや関数に貼り付けることができます。

• SQL カーソルおよびストアド プロシージャの宣言

• カーソルを使用する FETCH 文、UPDATE 文、および DELETE 文

• カーソルを使用しない SELECT 文、INSERT 文、UPDATE 文、および DELETE 文

スコープ(適用範囲)の詳細については、35 ページの「変数の宣言場所」を参照してください。

カーソルおよびストアド プロシージャを、グローバル変数、インスタンス変数、共有変数、またはローカル変数のスコープで宣言できます。カーソルまたはプロシージャは、ペインタバーの[SQL 貼付]ボタンを使用して、スクリプト ビューで宣言できます。

ペインタバーの[SQL 貼付]ボタン、またはポップアップ メニューの[形式を指定して貼り付け| SQL]を使用して、スクリプト ビュー、関数ペインタ、およびデータベース ペインタの ISQL ビューで標準の埋め込み SQL 文をペイントできます。

サポートしている SQL 文

一般に、PowerScript 言語では、PowerScript がサポートしている SQL 文における DBMS 固有の機能をサポートしています。たとえば、PowerScript は、SELECT 文中の DBMS 固有の組み込み関数をサポートしています。

しかし、スクリプトのコンパイルが成功するためには、SELECT 句を含むすべての SQL 文に FROM 句を含まなければなりません。この問題を解決するためには、FROM 句を持たない SELECT 文に「ダミー」のテーブルを使用する FROM 句を追加します。次に例を示します。

string resselect user_name() into:res from dummy;select db_name() into:res from dummy;select date('2001-01-02:21:20:53') into:res from dummy;

Page 167: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 157

コンパイル時と構築時のデータベース接続を無効にする

PowerBuilder は埋め込み SQL を含むアプリケーションをコンパイルする時、構築処理中にデータベース アクセス エラーをチェックするために最後に使用したデータベース プロファイルに接続します。複数のデータベースを使用するアプリケーションでは、アプリケーションで実際に使用するデータベースではなく、最後に使用した 1 つのデータベースに対してだけ埋め込み SQL が検証されるため、構築中に誤ったエラーになることがあります。さらに、夜通しかかる再構築などの自動構築は、データベース接続を行えないと停止することがあります。

これらの問題を避けるために、システム オプション ダイアログボックスの[全般]ページで[コンパイル時と構築時のデータベース接続を無効にする]チェックボックスを選択します。

注意

データベースにサイン オンせずにコンパイルしたい場合のみチェックボックスを選択してください。データベースに接続しないコンパイルは、構築処理でデータベース エラーをチェックしないため、後で実行時エラーになることがあります。

CLOSE Cursor機能 CursorName で指定された SQL カーソルをクローズして、CursorName

の処理を終了します。

構文 CLOSE CursorName ;

解説 クローズするカーソルは、その時点で、OPEN 文によってオープンされていなければなりません。また、カーソルを宣言したステートメントの中でトランザクション オブジェクトが指定されているため、CLOSECursor 文で USING TransactionObject 句を用いることはできません。

CLOSE Procedure 文は、フェッチ後の SQLCode プロパティの値が 100(行が見つからない)のときに実行されるステートメントの中でよく使用されます。

パラメータ 説明

CursorName クローズするカーソル名

Page 168: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

CLOSE Procedure

158 PowerBuilder

エラー処理

CLOSE Cursor 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

例 次のステートメントは、カーソル Emp_cursor をクローズします。

CLOSE Emp_cursor ;

CLOSE Procedure機能 ProcedureName で指定された SQL プロシージャをクローズして、

ProcedureName の処理を終了します。

ストアド プロシージャのサポート

すべての DBMS がストアド プロシージャをサポートしているとは限りません。

構文 CLOSE ProcedureName;

解説 クローズするプロシージャは、その時点で、EXECUTE 文によって実行されていなければなりません。また、プロシージャを宣言したステートメントの中でトランザクション オブジェクトが指定されているため、CLOSE Procedure 文で USING TransactionObject 句を用いることはできません。

CLOSE Procedure 文は、結果集合を返すプロシージャをクローズするときにのみ使用してください。結果集合を返さないプロシージャは、PowerBuilder によって自動的にクローズされ、SQLCode プロパティの値に 100 が設定されます。

CLOSE Procedure 文は、フェッチ後の SQLCode プロパティの値が 100(行が見つからない)のときに実行されるステートメントの中でよく使用されます。

パラメータ 説明

ProcedureName クローズするストアド プロシージャ名

Page 169: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 159

エラー処理

CLOSE Procedure 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

例 次のステートメントは、ストアド プロシージャ Emp_proc をクローズします。

CLOSE Emp_proc ;

COMMIT機能 指定されたトランザクション オブジェクトに対して前回の COMMIT、

ROLLBACK、または CONNECT 以降に行われたすべてのデータベース処理を永久的に更新します。

サーバ コンポーネントにおける COMMIT と ROLLBACK の使用

サーバ コンポーネントの中に埋め込まれた COMMIT コマンドとROLLBACK コマンドは、UseContextObject の DBParm パラメータの設定によって、効果が異なる場合があります。

UseContextObject のパラメータについては、『データベースとの接続』マニュアルを参照してください。トランザクション サーバへのコンポーネントの配布については、『アプリケーション テクニック』マニュアルを参照してください。

構文 COMMIT {USING TransactionObject};

解説 COMMIT 文は、データベースとの接続は解除しませんが、オープンしているカーソルまたはプロシージャをすべてクローズします(PowerBuilder における DISCONNECT 文は、COMMIT 文を発行することに注意してください)。

パラメータ 説明

TransactionObject 前回の COMMIT、ROLLBACK、または CONNECT 以降の、データベースに対するあらゆる処理を確定したいトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 170: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

CONNECT

160 PowerBuilder

エラー処理

COMMIT 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

例 例 1 次のステートメントは、デフォルト トランザクション オブジェクトで指定されたデータベースに対するすべての処理内容をコミットします。

COMMIT ;

例 2 次のステートメントは、トランザクション オブジェクト Emp_tranで指定されたデータベースに対するすべての処理内容をコミットします。

COMMIT USING Emp_tran ;

CONNECT 機能 指定されたデータベースに接続します。

構文 CONNECT {USING TransactionObject};

解説 CONNECT 文は、デフォルト トランザクション オブジェクトまたは指定されたトランザクション オブジェクトを使用してデータベース操作(INSERT、UPDATE、または DELETE)を行う前に実行しなければなりません。

エラー処理

CONNECT 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

例 例 1 次のステートメントは、デフォルト トランザクション オブジェクトで指定されたデータベースに接続します。

CONNECT ;

パラメータ 説明

TransactionObject 接続するデータベースに対する必要な接続情報を保持しているトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 171: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 161

例 2 次のステートメントは、トランザクション オブジェクト Emp_tranで指定されたデータベースに接続します。

CONNECT USING Emp_tran ;

DECLARE Cursor機能 指定されたトランザクション オブジェクトに対してカーソルを宣言

します。

構文 DECLARE CursorName CURSOR FOR SelectStatement {USING TransactionObject};

解説 DECLARE Cursor 文は非実行コマンドであり、変数の宣言に似ています。

ローカル カーソルを宣言するには、スクリプト ビューでスクリプトを開き、ペインタバーの[SQL 貼付]を使用するか、[編集|形式を指定して貼り付け]メニューを選択します。グローバル、インスタンス、または共有のカーソルを宣言するには、スクリプト ビューの最初のドロップダウン リストから[Declare]を選択し、2 つ目のドロップダウン リストから[Global Variables]、[Instance Variables]、または[SharedVariables]を選択します。その後、[SQL 貼付]を選択します。

グローバル変数、インスタンス変数,共有変数、およびローカル変数のスコープについては、35 ページの「変数の宣言場所」を参照してください。

例 次のステートメントは、デフォルト トランザクション オブジェクトで指定されたデータベースに対して、カーソル Emp_cur を宣言します。さらに、このステートメントは変数 Sal_var を参照します。この変数には、OPEN Emp_cur 文を実行する前に、適切な値を設定しておく必要があります。

DECLARE Emp_cur CURSOR FORSELECT employee.emp_number, employee.emp_nameFROM employeeWHERE employee.emp_salary > :Sal_var ;

パラメータ 説明

CursorName 有効な PowerBuilder 名SelectStatement 有効な SELECT 文TransactionObject カーソルを宣言するトランザクション オブジェクト

名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 172: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DECLARE Procedure

162 PowerBuilder

DECLARE Procedure 機能 指定されたトランザクション オブジェクトに対してプロシージャを

宣言します。

ストアド プロシージャのサポート

すべての DBMS がストアド プロシージャをサポートしているとは限りません。

構文 DECLARE ProcedureName PROCEDURE FOR StoredProcedureName@Param1=Value1, @Param2=Value2,...{USING TransactionObject};

解説 DECLARE Procedure 文は非実行コマンドであり、変数の宣言に似ています。

ローカル プロシージャを宣言するには、スクリプト ビューでスクリプトを開き、ペインタバーの[SQL 貼付]を使用するか、[編集|形式を指定して貼り付け]メニューを選択します。グローバル、インスタンス、または共有のプロシージャを宣言するには、スクリプト ビューの最初のドロップダウン リストから[Declare]を選択し、2 つ目のドロップダウン リストから[Global Variables]、[Instance Variables]、または[Shared Variables]を選択します。その後、[SQL 貼付]を選択します。

グローバル変数、インスタンス変数,共有変数、およびローカル変数のスコープについては、35 ページの「変数の宣言場所」を参照してください。

パラメータ 説明

ProcedureName 有効な PowerBuilder 名StoredProcedureName データベース中のストアド プロシージャ名

@Paramn=Valuen ストアド プロシージャで指定されたパラメータ(引数)の名前と有効な PowerBuilder の式。n はパラメータと値の番号を表します。

TransactionObject プロシージャを宣言するトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 173: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 163

例 例 1 次のステートメントは、デフォルト トランザクション オブジェクトで指定された Sybase ASE のストアド プロシージャ GetName に対して、プロシージャ Emp_proc を宣言するものです。このステートメントは、変数 Emp_name_var と Emp_sal_var を参照します。これらの変数には、EXECUTE Emp_proc 文を実行する前に、適切な値を設定しておく必要があります。

DECLARE Emp_proc procedure for GetName@emp_name = :Emp_name_var, @emp_salary = :Emp_sal_var ;

例 2 次のステートメントは、デフォルト トランザクション オブジェクトで指定された ORACLE のストアド プロシージャ GetName に対して、プロシージャ Emp_proc を宣言するものです。このステートメントは、変数 Emp_name_var と Emp_sal_var を参照します。これらの変数には、EXECUTE Emp_proc 文を実行する前に、適切な値を設定しておく必要があります。

DECLARE Emp_proc procedure for GetName(:Emp_name_var, :Emp_sal_var) ;

DELETE機能 Criteria で指定された条件によって TableName で指定されたテーブル

の行を削除します。

構文 DELETE FROM TableName WHERE Criteria {USING TransactionObject};

パラメータ 説明

TableName 行を削除するテーブル名

Criteria 削除する行を指定する条件

TransactionObject 削除するテーブルが格納されているデータベースを指定したトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 174: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DELETE

164 PowerBuilder

解説 エラー処理

DELETE 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。DELETE 文が正常に終了したかどうかは、SQLCode をテストして成否コードを調べれば確認できます。ただし、WHERE 句で指定した条件に合う行がなく、1 行も削除されなかった場合でも、SQLCode プロパティには 0 が設定されます。少なくとも1 行が削除されたことを確認するには、トランザクション オブジェクトの SQLNRows プロパティをチェックしてください。

例 例 1 次のステートメントは、デフォルト トランザクション オブジェクトで指定されたデータベースの Employee テーブルから、Emp_numカラムの値が 100 より小さいデータ行を削除します。

DELETE FROM Employee WHERE Emp_num < 100 ;

例 2 以下のステートメントは、トランザクション オブジェクトEmp_tran で指定されたデータベースの Employee テーブルから、Emp_num カラムの値がシングルライン エディット sle_number に入力された値と等しいデータ行を削除します。

int Emp_numEmp_num = Integer(sle_number.Text)DELETE FROM Employee

WHERE Employee.Emp_num = :Emp_num ;

Integer 型の変数 Emp_num を WHERE 句で使用するときには、PowerBuilder 変数であることを示すために、変数名の先頭にコロンを付ける必要があります。

Page 175: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 165

DELETE Where Current of Cursor機能 カーソルが現在位置している行を削除します。

DELETE Where Current of Cursor 文のサポート

すべての DBMS が DELETE Where Current of Cursor 文をサポートしているとは限りません。

構文 DELETE FROM TableName WHERE CURRENT OF CursorName;

解説 カーソルを宣言したステートメントの中でトランザクション オブジェクトが指定されているため、DELETE Where Current of Cursor 文で USINGTransactionObject 句を用いることはできません。

エラー処理

DELETE Where Current of Cursor 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

例 次のステートメントは、Employee テーブルからカーソル Emp_cur が現在位置している行を削除します。

DELETE FROM Employee WHERE current of Emp_curs ;

パラメータ 説明

TableName 行を削除するテーブル名

CursorName テーブルを指定するカーソル名

Page 176: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DISCONNECT

166 PowerBuilder

DISCONNECT機能 指定されたトランザクション オブジェクトに対して COMMIT 文を実行

してから、データベースとの接続を解除します。

構文 DISCONNECT {USING TransactionObject};

解説 エラー処理

DISCONNECT 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

例 例 1 次のステートメントは、デフォルト トランザクション オブジェクトで指定されたデータベースとの接続を解除します。

DISCONNECT ;

例 2 次のステートメントは、トランザクション オブジェクト Emp_tranで指定されたデータベースとの接続を解除します。

DISCONNECT USING Emp_tran ;

EXECUTE機能 ProcedureName で指定されたあらかじめ宣言されているプロシージャ

を実行します。

構文 EXECUTE ProcedureName;

解説 プロシージャを宣言したステートメントの中でトランザクション オブジェクトが指定されているため、EXECUTE 文で USING TransactionObject句を用いることはできません。

パラメータ 説明

TransactionObject 接続を解除し、かつ前回の COMMIT、ROLLBACK、または CONNECT 以降の、データベースに対するあらゆる処理内容を確定したいトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

パラメータ 説明

ProcedureName 実行するプロシージャの DECLARE 文で割り当てられた名前。プロシージャはあらかじめ宣言されていなければなりません。ProcedureName は、データベースに格納されているプロシージャ名と同一とは限りません。

Page 177: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 167

エラー処理

EXECUTE 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

例 次のステートメントは、ストアド プロシージャ Emp_proc を実行します。

EXECUTE Emp_proc ;

FETCH機能 Cursor または Procedure が現在位置している行の次の行をフェッチし

ます。

構文 FETCH Cursor | Procedure INTO HostVariableList;

解説 カーソルまたはプロシージャを宣言したステートメントの中でトランザクション オブジェクトが指定されているため、FETCH 文で USINGTransactionObject 句を用いることはできません。

使用している DBMS が標準の(デフォルトの)FETCH NEXT 文以外のFETCH 文書式をサポートしている場合には、FETCH FIRST、FETCHPRIOR、または FETCH LAST 文を使用できます。

エラー処理

FETCH 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。FETCH 文が正常に終了したかどうかは、SQLCode をテストして成否コードを調べれば確認できます。ただし、WHERE 句で指定した条件に合う行がなく、1 行もフェッチされなかった場合でも、SQLCode プロパティには 100 が設定されます。少なくとも 1 行がフェッチされたことを確認するには、トランザクション オブジェクトの SQLNRows プロパティをチェックしてください。

パラメータ 説明

Cursor or Procedure フェッチする行を指示するカーソル名またはプロシージャ名

HostVariableList 検索されたデータ値が保持される PowerScript 変数

Page 178: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

INSERT

168 PowerBuilder

例 例 1 以下のステートメントは、カーソル Emp_cur の宣言で指定したSELECT 句で検索されたデータをフェッチし、その値を変数 Emp_numと Emp_name に代入します。

int Emp_numstring Emp_nameFETCH Emp_cur INTO :Emp_num, :Emp_name ;

例 2 sle_emp_num と sle_emp_name がシングルライン エディットの場合、以下のステートメントは、カーソル Emp_cur からデータをフェッチし、そのデータを変数 Emp_num と sle_emp_name に保持します。次に、変数 Emp_num を Integer 型から String 型に変換して、それらの値をシングルライン エディット sle_emp_num と sle_emp_name に代入します。

int Emp_numstring Emp_nameFETCH Emp_cur INTO :emp_num, :emp_name ;sle_emp_num.Text = string(Emp_num)sle_emp_name.Text = Emp_name

INSERT機能 RestOfInsertStatement で指定されたテーブルに、1 つまたは複数の新し

い行を挿入します。

構文 INSERT RestOfInsertStatement {USING TransactionObject} ;

解説 エラー処理

INSERT 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

パラメータ 説明

RestOfInsertStatement INSERT 文の中身(INTO 句、カラムのリスト、値またはソースのリスト)

TransactionObject 目的のテーブルが格納されているデータベースを指定したトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 179: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 169

例 例 1 以下のステートメントは、デフォルト トランザクション オブジェクトで指定されている Employee テーブルに 1 行挿入し、Emp_nbrカラムと Emp_name カラムに変数 EmpNbr と EmpName の値を代入します。

int EmpNbrstring EmpName...INSERT INTO Employee (employee.Emp_nbr,

employee.Emp_name)VALUES (:EmpNbr, :EmpName) ;

例 2 以下のステートメントは、トランザクション オブジェクトEmp_tran の Employee テーブルに 1 行挿入します。挿入する行のEmp_nbr カラムと Emp_name カラムの値は、シングルライン エディット sle_number と sle_name に入力された値になります。

int EmpNbrstring EmpNameEmpNbr = Integer(sle_number.Text)EmpName = sle_name.TextINSERT INTO Employee (employee.Emp_nbr,

employee.Emp_name)VALUES (:EmpNbr, :EmpName) USING Emp_tran ;

OPEN Cursor機能 カーソルを宣言したときに指定された SELECT 文を実行して、カーソ

ルをオープンします。

構文 OPEN CursorName ;

解説 カーソルを宣言したステートメントの中でトランザクション オブジェクトが指定されているため、OPEN Cursor 文で USING TransactionObject句を用いることはできません。

エラー処理

OPEN Cursor 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

パラメータ 説明

CursorName オープンするカーソル名

Page 180: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ROLLBACK

170 PowerBuilder

例 次のステートメントは、カーソル Emp_cur をオープンします。

OPEN Emp_curs ;

ROLLBACK機能 指定されたデータベースにおける前回の COMMIT、ROLLBACK、または

CONNECT 以降のすべてのデータベース処理を取り消します。

サーバ コンポーネントにおける COMMIT と ROLLBACK の使用

サーバ コンポーネントの中に埋め込まれた COMMIT コマンドとROLLBACK コマンドは、UseContextObject の DBParm パラメータの設定によって、効果が異なる場合があります。

UseContextObject のパラメータについては、『データベースとの接続』マニュアルを参照してください。トランザクション サーバへのコンポーネントの配布については、『アプリケーション テクニック』マニュアルを参照してください。

構文 ROLLBACK {USING TransactionObject} ;

解説 ROLLBACK 文は、データベースとの接続は解除しませんが、オープンしているカーソルまたはプロシージャをすべてクローズします。

エラー処理

ROLLBACK 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

例 例 1 次のステートメントは、デフォルト トランザクション オブジェクトで指定されたデータベースにおけるすべての処理内容を取り消します。

ROLLBACK ;

パラメータ 説明

TransactionObject 前回の COMMIT、ROLLBACK、または CONNECT 以降の、データベースに対するあらゆる処理内容を取り消すトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 181: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 171

例 2 次のステートメントは、トランザクション オブジェクト Emp_tranで指定されたデータベースにおけるすべての処理内容を取り消します。

ROLLBACK USING emp_tran ;

SELECT機能 RestOfSelectStatement で指定されたテーブルから 1 行検索します。

構文 SELECT RestOfSelectStatement {USING TransactionObject} ;

解説 SELECT 文が複数行を返した場合には、エラーになります。

エラー処理

SELECT 文の実行後に SQLCode プロパティの値をテストして、成否を確認することをお勧めします。

INTO 句を使用した場合、PowerBuilder では、カラムとテーブルの存在をチェックするだけで、取得したカラムのデータ型がホスト変数のデータ型と一致するかどうかについては検証しません。データ型の一致については、開発者のほうで確認してください。すべてのデータベースのデータ型が PowerBuilder のデータ型と同じであるとは限らないため、注意が必要です。

例 以下のステートメントは、Employee テーブルの Emp_nbr カラムの値が変数 Emp_num と等しい行の Emp_LName と Emp_FName カラムのデータを検索し、そのデータをシングルライン エディット sle_LName とsle_FName に代入します。トランザクション オブジェクトにはEmp_tran が使用されています。

int Emp_numstring Emp_lname, Emp_fname

パラメータ 説明

RestOfSelectStatement SELECT 文の中身(カラムのリスト、INTO 句、FROM句、WHERE 句、そのほかの句)

TransactionObject 検索するテーブルが格納されているデータベースを指定したトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 182: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

SELECTBLOB

172 PowerBuilder

Emp_num = Integer(sle_Emp_Num.Text)

SELECT employee.Emp_LName, employee.Emp_FNameINTO :Emp_lname, :Emp_fnameFROM EmployeeWHERE Employee.Emp_nbr = :Emp_numUSING Emp_tran ;

IF Emp_tran.SQLCode = 100 THENMessageBox("従業員の照会 ", &"従業員が見つかりません ")

ELSEIF Emp_tran.SQLCode > 0 thenMessageBox("データベース エラー ", &Emp_tran.SQLErrText, Exclamation!)

END IFsle_Lname.text = Emp_lnamesle_Fname.text = Emp_fname

SELECTBLOB機能 RestOfSelectStatement で指定されたテーブル中の 1 行から、1 つの Blob

型カラムを 1 つ検索します。

構文 SELECTBLOB RestOfSelectStatement {USING TransactionObject} ;

解説 SELECTBLOB 文が複数行を返した場合には、エラーになります。

エラー処理

SELECTBLOB 文の実行後に成否を確認することをお勧めします。また、SQLCA または該当するトランザクション オブジェクトの SQLNRowsプロパティをチェックして、行が更新されたかどうかを確認できます。SQLCode プロパティまたは SQLDBCode プロパティでは、SELECTBLOB文の実行結果の成否はわかりません。

パラメータ 説明

RestOfSelectStatement SELECT 文の中身(INTO 句、FROM 句、WHERE 句)

TransactionObject 検索するテーブルが格納されているデータベースを指定したトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 183: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 173

INTO 句内のホスト変数のリスト(ターゲット パラメータ)にインジケータ変数を挿入すれば、空の Blob(長さがゼロの Blob)および変換エラーを調べることができます。

データベース情報

Sybase ASE を使用している場合は、SELECTBLOB 関数を呼び出す前に、トランザクション オブジェクトの AutoCommit プロパティを true に設定する必要があります。AutoCommit プロパティについては、『データベースとの接続』マニュアルを参照してください。

例 以下のステートメントは、Employee テーブルの Emp_num カラムの値が 100 である行から Blob 型カラム Emp_pic を検索し、その値を Blob 型変数 Emp_id_pic に代入します。次に、ピクチャ p_1 に Emp_id_pic のビットマップを設定します。トランザクション オブジェクトにはEmp_tran が使用されています。

Blob Emp_id_picSELECTBLOB Emp_pic

INTO :Emp_id_pic FROM EmployeeWHERE Employee.Emp_Num = 100USING Emp_tran ;

p_1.SetPicture(Emp_id_pic)

Blob 型変数 Emp_id_pic を SELECTBLOB 文の INTO 句で使用するときは、(PowerScript の)ホスト変数であることを示すために、変数名の先頭にコロンを付ける必要があります。

Page 184: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

UPDATE

174 PowerBuilder

UPDATE機能 RestOfUpdateStatement で指定された行を更新します。

構文 UPDATE TableName RestOfUpdateStatement {USING TransactionObject} ;

解説 エラー処理

UPDATE 文の実行後に成否を確認することをお勧めします。SQLCodeプロパティの値をテストできます。ただし、WHERE 句で指定した条件に合う行がなく、1 行も更新されなかった場合でも、SQLCode プロパティには 0 が設定されます。トランザクション オブジェクトのSQLNRows プロパティをチェックして、行が更新されたかどうかを確認できます。

例 以下のステートメントは、トランザクション オブジェクト Emp_tran で指定されたデータベース中の Employee テーブルにおいて、Emp_numカラムの値がシングルライン エディット sle_Number に入力された値と等しい行を更新します。

int Emp_numEmp_num=Integer(sle_Number.Text )UPDATE Employee

SET emp_name = :sle_Name.TextWHERE Employee.emp_num = :Emp_num USING Emp_tran ;

IF Emptran.SQLNRows > 0 THENCOMMIT USING Emp_tran ;

END IF

Integer 型の変数 Emp_num およびシングルライン エディット sle_Nameを UPDATE 文で使用するときには、これらが(PowerScript の)ホスト変数であることを示すために、変数名の先頭にコロンを付ける必要があります。

パラメータ 説明

TableName 行を更新するテーブル名

RestOfUpdateStatement UPDATE 文の中身(SET 句と WHERE 句)

TransactionObject 検索するテーブルが格納されているデータベースを指定したトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 185: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 175

UPDATEBLOB機能 TableName で指定された行の BlobColumn カラムを更新します。

構文 UPDATEBLOB TableName SET BlobColumn = BlobVariableRestOfUpdateStatement {USING TransactionObject} ;

解説 エラー処理

UPDATEBLOB 文の実行後に成否を確認することをお勧めします。また、SQLCA または該当するトランザクション オブジェクトの SQLNRowsプロパティをチェックして、行が更新されたかどうかを確認できます。SQLCode プロパティまたは SQLDBCode プロパティでは、UPDATEBLOB文の実行結果の成否はわかりません。

データベース情報

Sybase ASE を使用している場合は、UPDATEBLOB 関数を呼び出す前に、トランザクション オブジェクトの AutoCommit プロパティを True に設定する必要があります。AutoCommit プロパティについては、

『データベースとの接続』マニュアルを参照してください。

例 以下のステートメントは、トランザクション オブジェクト Emp_tran で指定されたデータベース中の Employee テーブルにおいて、Emp_num カラムの値が 100 の行の Blob 型カラム emp_pic を更新します。

int fhblob Emp_id_picfh = FileOpen("c:\emp_100.bmp", StreamMode!)IF fh <> -1 THEN

FileRead(fh, emp_id_pic)FileClose(fh)

パラメータ 説明

TableName 更新するテーブル名

BlobColumn TableName の更新するカラム名。このカラムはBlob 型でなければなりません。

BlobVariable Blob 型の PowerScript 変数

RestOfUpdateStatement UPDATE 文の中身(WHERE 句)

TransactionObject 検索するテーブルが格納されているデータベースを指定したトランザクション オブジェクト名。この句は、デフォルト(SQLCA)以外のトランザクション オブジェクトに対して必要となります。

Page 186: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

UPDATE Where Current of Cursor

176 PowerBuilder

UPDATEBLOB Employee SET emp_pic = :Emp_id_picWHERE Emp_num = 100USING Emp_tran ;

END IF

IF Emptran.SQLNRows > 0 THENCOMMIT USING Emp_tran ;

END IF

Blob 型の変数 Emp_id_pic を UPDATEBLOB 文で使用するときには、(PowerScript の)ホスト変数であることを示すために、コロンを付ける必要があります。

UPDATE Where Current of Cursor機能 SetStatement で指定された値を使用して、カーソルが現在位置している

行を更新します。

構文 UPDATE TableName SetStatement WHERE CURRENT OF CursorName ;

解説 カーソルを宣言したステートメントの中でトランザクション オブジェクトが指定されているため、UPDATE Where Current of Cursor 文でUSING TransactionObject 句を用いることはできません。

例 以下のステートメントは、Employee テーブルのカーソル Emp_curs が位置している行を更新します。

UPDATE EmployeeSET salary = 17800WHERE CURRENT of Emp_curs ;

パラメータ 説明

TableName 行を更新するテーブル名

SetStatement SET ステートメントの後に、カンマで区切られた ColumnName = value という形式のリストを続けたもの

CursorName テーブルを参照するカーソル名

Page 187: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 177

動的 SQL の使い方概要 通常、データベース アプリケーションは決められた処理を行うため、

スクリプトを記述してコンパイルする時点で、その処理を記述したSQL 文が完成しています。しかし、PowerBuilder が記述したい埋め込み SQL 文(たとえば、データ定義言語)をサポートしていない場合、また、SQL 文のパラメータや使用すべき書式がコンパイル時にはわからない場合は、アプリケーション実行時に SQL 文を作成する必要があります。これを動的 SQL といいます。動的 SQL 文で使用するパラメータは、プログラムが実行される状況に応じて変わる可能性があります。

SQL Anywhere の使い方

SQL Anywhere™ での動的 SQL の使い方については、SQL Anywhere のマニュアルを参照してください。

4 つの書式 Power Builder には、コンパイル時の状況に応じて、以下の 4 つの動的SQL 書式が用意されています。

以下のものを用いて、コンパイル時の状況に応じた処理を行います。

• PowerBuilder の動的 SQL 文

• CLOSE 文、DECLARE 文、FETCH 文、OPEN 文、および EXECUTE 文の動的 SQL バージョン

• PowerBuilder データ型の DynamicStagingArea および DynamicDescriptionArea の変数

前提条件

例では、デフォルト トランザクション オブジェクト(SQLCA)に有効な値が割り当てられていること、CONNECT 文が正常に終了していることを前提としています。また、例ではエラー チェックを行っていませんが、通常は、各 SQL 文の後で SQLCode プロパティの値をチェックするべきです。

書式 書式を用いる状況

書式 1 入力パラメータを持たず、結果集合を返さないステートメント

書式 2 入力パラメータを持つ、結果集合を返さないステートメント

書式 3 コンパイル時に入力パラメータと結果集合カラムの内容が判明している、結果集合を返すステートメント

書式 4 コンパイル時に入力パラメータまたは結果集合カラム、あるいはその両方とも判明していない、結果集合を返すステートメント

Page 188: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

動的 SQL の使い方

178 PowerBuilder

動的 SQL 文 以下に、PowerBuilder の動的 SQL 文を示します。

DESCRIBE DynamicStagingAreaINTO DynamicDescriptionArea ;

EXECUTE {IMMEDIATE} SQLStatement{USING TransactionObject} ;

EXECUTE DynamicStagingAreaUSING ParameterList ;

EXECUTE DYNAMIC Cursor | ProcedureUSING ParameterList ;

OPEN DYNAMIC Cursor | ProcedureUSING ParameterList ;

EXECUTE DYNAMIC Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea ;

OPEN DYNAMIC Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea ;

PREPARE DynamicStagingAreaFROM SQLStatement {USING TransactionObject} ;

2 つのデータ型 DynamicStagingArea DynamicStagingArea は PowerBuilder のデータ型です。PowerBuilder はこのデータ型の変数を使用して、次に続く動的SQL 文で使用される情報を保持します。

DynamicStagingArea は、動的 SQL 文とトランザクション オブジェクト間の唯一の通信手段であり、PowerBuilder が内部的に使用します。開発者は、DynamicStagingArea の保持する情報にはアクセスできません。

PowerBuilder は、SQLSA という DynamicStagingArea 型のグローバル変数を用意しているので、DynamicStagingArea 型の変数が必要なときにこのデフォルト変数を使用することができます。

必要であれば、DynamicStagingArea データ型の別のオブジェクト変数を宣言して作成できます。以下のステートメントは、動的 SQL 文で参照する変数を、事前に宣言し作成します。

DynamicStagingArea dsa_stage1dsa_stage1 = CREATE DynamicStagingArea

EXECUTE 文が終了した後は、SQLSA を参照できません。

DynamicDescriptionArea DynamicDescriptionArea は PowerBuilder のデータ型です。PowerBuilder は、このデータ型の変数を使用して、動的 SQL の書式 4 で用いられる入出力パラメータについての情報を保持します。

Page 189: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 179

PowerBuilder は、SQLDA という DynamicDescriptionArea 型のグローバル変数を用意しているので、DynamicDescriptionArea 型の変数が必要なときにこのデフォルト変数を使用することができます。

必要であれば、DynamicDescriptionArea データ型の別のオブジェクト変数を宣言して使用できます。以下のステートメントは、動的 SQL 文で参照する変数を、事前に宣言し作成します。

DynamicDescriptionArea dda_desc1dsa_desc1 = CREATE DynamicDescriptionArea

SQLDA については、186 ページの「動的 SQL 書式 4」を参照してください。

動的 SQL を使用する前に

動的 SQL 文を使用するときには、以下のことが重要です。

• 書式 1 以外のすべての書式における DynamicStagingArea 型の変数の準備

• 書式 4 における DynamicDescriptionArea 型の変数の記述

• 動的 SQL 文の実行順序

準備と記述 SQLSA ステージング エリアは、SQL 文の実行とトランザクション オブジェクト間の唯一の通信手段であるため、SQL 文を正しく記述しておかないとエラーが発生します。

SQLSA および SQLDA 以外にも、DynamicStagingArea 型および DynamicDescriptionArea 型の変数を宣言できます。しかし、別の変数を宣言する必要があるのは、スクリプトで複数の動的 PREPARE 文を同時に使用する場合だけです。

以下の動的カーソルは有効です。

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;PREPARE SQLSA FROM "SELECT emp_id FROM employee" ;OPEN DYNAMIC my_cursor ;

以下の動的カーソルは無効です。PREPARE 文が存在しないので実行エラーが発生します。

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;OPEN DYNAMIC my_cursor ;

動的 SQL 文の実行順序 スクリプトにおいて動的 SQL 文を記述する場所はさほど重要ではありませんが、書式 2、3、4 では動的 SQL 文を実行する順序は非常に重要です。動的 SQL 文を実行する際には、以下の点に注意してください。

1 DECLARE 文と PREPARE 文は、ほかの動的 SQL 文の前に実行します。

Page 190: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

動的 SQL の使い方

180 PowerBuilder

2 書式 3、4 では、OPEN 文を FETCH 文の前に実行します。

3 CLOSE 文は最後に実行します。

PREPARE 文が複数ある場合には、実行順序によって SQLSA の内容が異なります。

以下のスクリプトは、正しい順序で記述されています。

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSAstring sql1, sql2sql1 = "SELECT emp_id FROM department "&WHERE salary > 90000"sql2 = "SELECT emp_id FROM department "&WHERE salary > 20000"

IF deptId = 200 thenPREPARE SQLSA FROM :sql1 USING SQLCA ;

ELSEPREPARE SQLSA FROM :sql2 USING SQLCA ;

END IFOPEN DYNAMIC my_cursor ; // my_cursor にマップされる

// SELECT 文は条件によって// 異なります。

SQL Native Client データベース インタフェースを使用したプロシージャの宣言

PowerBuilder SQL Native Client(SNC)データベース インタフェースを使用して Microsoft SQL Server に接続する場合、プロシージャを宣言するための構文は以下のとおりです。

DECLARE logical_procedure_name PROCEDURE FOR [@rc=]procedure_name{@param1 = value1 [OUTPUT], @param2 = value2 [OUTPUT], ...}{USING transaction_object};

[@rc=] は、プロシージャの戻り値を取得する必要があることを示します。

出力パラメータの値を取得したい場合、キーワードの OUTPUT またはOUT を使用して、出力パラメータを指定します。

BindSPInput データベース パラメータが 0 の場合、value1、value2,... には PowerBuilder のスクリプト変数またはリテラル値を指定できます。BindSPInput が 1 の場合、value1、value2... は PowerBuilder のスクリプト変数でなければなりません。リテラル値を指定すると、SNC インタフェースが実行時エラーを返します。

プロシージャを含む動的 SQL 文を宣言する場合、SQL 文内で IN/OUTパラメータごとに疑問符(?)を入力します。代入値は位置に依存します。例については、動的 SQL 書式 3 および 4 を参照してください。

Page 191: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 181

動的 SQL 書式 1 機能 入力パラメータを必要とせず、結果集合を返さない SQL 文を実行する

ときには、書式 1 を使用します。この書式では、あらゆる形式のデータ定義言語(DDL)を実行できます。

構文 EXECUTE IMMEDIATE SQLStatement {USING TransactionObject} ;

例 以下のステートメントは、Trainees テーブルを作成します。このステートメントは、文字列 Mysql に CREATE 文を保持しています。

Sybase ASE をご使用の場合

ASE データベースに接続している場合は、CREATE 文を実行する前にAUTOCOMMIT プロパティに true を設定してください。

string MyASEMyASE = "CREATE TABLE Trainees "&

+"(emp_id integer not null,"&+"emp_fname char(10) not null, "&+"emp_lname char(20) not null)"

EXECUTE IMMEDIATE :MyASE ;

以下のステートメントは、トランザクション オブジェクト My_trans が存在し、データベースと正常に接続されていることを前提としています。

string MyASEMyASE="INSERT INTO department Values (1234,"&

+"'Purchasing',1234)" EXECUTE IMMEDIATE :MyASE USING My_trans ;

パラメータ 説明

SQLStatement 有効な SQL 文を示す文字列。この文字列は通常、文字列定数または先頭にコロンを付けた PowerBuilder の変数(たとえば :mysql)です。この文字列は 1 行に収める必要があり、式を用いることはできません。

TransactionObject(オプション)

データベースを指定するトランザクション オブジェクト名

Page 192: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

動的 SQL 書式 2

182 PowerBuilder

動的 SQL 書式 2 機能 入力パラメータを必要とし、結果集合を返さない SQL 文を実行すると

きには、書式 2 を使用します。この書式では、あらゆる形式のデータ定義言語(DDL)を実行できます。

構文 PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject} ;

EXECUTE DynamicStagingArea USING {ParameterList} ;

解説 null 値を指定するときには、SetNull 関数を使用します。

例 以下のステートメントは、SQLSA 上に入力パラメータを 1 つ持つDELETE 文を作成し、PowerScript 変数 Emp_id_var の値を用いて実行します。

INT Emp_id_var = 56PREPARE SQLSA

FROM "DELETE FROM employee WHERE emp_id=?" ;EXECUTE SQLSA USING :Emp_id_var ;

以下のステートメントは、SQLSA 上に入力パラメータを 3 つ持つINSERT 文を作成し、PowerScript 変数 Dept_id_var、Dept_name_var 、Mgr_id_var の値を用いて実行します。Mgr_id_var には null 値が設定されています。

INT Dept_id_var = 156INT Mgr_id_var String Dept_name_var

パラメータ 説明

DynamicStagingArea DynamicStagingArea 型の変数名(通常は、SQLSA)

SQLSA 以外の DynamicStagingArea 変数が必要な場合は、CREATE 文で変数を宣言し、インスタンス化してから使用してください。

SQLStatement 有効な SQL 文を示す文字列。この文字列は通常、文字列定数または先頭にコロンを付けた PowerBuilderの変数(たとえば :mysql)です。この文字列は 1 行に収める必要があり、式を用いることはできません。

SQL 文の各入力パラメータを疑問符(?)で代用する必要があります。各パラメータの値は記述した順序で代入されます。

TransactionObject(オプション)

データベースを指定するトランザクション オブジェクト名

ParameterList (オプション)

カンマで区切られた PowerScript 変数のリスト。各PowerScript 変数の先頭にはコロン(:)を付けます。

Page 193: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 183

Dept_name_var = "Department"SetNull(Mgr_id_var)PREPARE SQLSA

FROM "INSERT INTO department VALUES (?,?,?)" ;EXECUTE SQLSA USING :Dept_id_var,:Dept_name_var,:Mgr_id_var ;

動的 SQL 書式 3 機能 入力パラメータと結果集合カラムの内容がコンパイル時に判明してい

る場合、結果集合を返す SQL 文を実行するときは、書式 3 を使用します。

構文 DECLARE Cursor | Procedure DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea ;

PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject} ;

OPEN DYNAMIC Cursor {USING ParameterList} ;

EXECUTE DYNAMIC Procedure{USING ParameterList} ;

FETCH Cursor | ProcedureINTO HostVariableList ;

CLOSE Cursor | Procedure ;

パラメータ 説明

Cursor または Procedure 使用するカーソル名またはプロシージャ名

DynamicStagingArea DynamicStagingArea 型の変数名(通常は、SQLSA)

SQLSA 以外の DynamicStagingArea 変数が必要な場合は、CREATE 文で変数を宣言し、インスタンス化してから使用してください。

SQLStatement 有効な SQL SELECT 文を示す文字列。この文字列は通常、文字列定数または先頭にコロンを付けた PowerBuilder 変数(たとえば :mysql)です。この文字列は 1 行に収める必要があり、式を用いることはできません。

SQL 文の各入力パラメータを疑問符(?)で代用する必要があります。各パラメータの値は記述した順序で代入されます。

Page 194: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

動的 SQL 書式 3

184 PowerBuilder

解説 null 値を指定するときには、SetNull 関数を使用します。

DECLARE 文は非実行文です。また、グローバル変数として宣言することができます。

使用している DBMS が標準の(デフォルトの)FETCH NEXT 文以外のFETCH 文書式をサポートしている場合には、FETCH FIRST、FETCHPRIOR、または FETCH LAST 文を使用できます。

書式 3 で使用する FETCH 文と CLOSE 文は、標準の埋め込み SQL 文と同じです。

ローカル変数のスコープでカーソルまたはプロシージャを宣言するには、スクリプト ビューでスクリプトを開き、ペインタバーの[SQL 貼付]を使用するか、[編集|形式を指定して貼り付け]メニューを選択します。グローバル変数、インスタンス変数、または共有変数のカーソルまたはプロシージャを宣言するには、スクリプト ビューの最初のドロップダウン リストから[Declare]を選択し、2 つ目のドロップダウン リストから[Global Variables]、[Instance Variables]、または[SharedVariables]を選択します。その後、[SQL 貼付]を選択します。

グローバル変数、インスタンス変数,共有変数、およびローカル変数のスコープについては、35 ページの「変数の宣言場所」を参照してください。

例 例 1 以下のステートメントは、カーソル my_cursor を SQLSA に関連付け、SQLSA 上に SELECT 文を作成し、カーソルをオープンして、現行の行の従業員番号を PowerScript 変数 Emp_id_var に返します。

integer Emp_id_varDECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;PREPARE SQLSA FROM "SELECT emp_id FROM employee" ;OPEN DYNAMIC my_cursor ;FETCH my_cursor INTO :Emp_id_var ;CLOSE my_cursor ;

静的な埋め込み SQL 文の場合と同じように、ループでカーソルを処理することができます。

TransactionObject(オプション)

データベースを指定するトランザクション オブジェクト名

ParameterList (オプション)

カンマで区切られた PowerScript 変数のリスト。各 PowerScript 変数の先頭にはコロン(:)を付けます。

HostVariableList 検索したデータ値を格納する PowerScript 変数のリスト

パラメータ 説明

Page 195: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 185

例 2 以下のステートメントは、カーソル my_cursor を SQLSA に関連付け、SQLSA 上に入力パラメータを 1 つ持つ SELECT 文を作成し、カーソルをオープンして、SELECT 文のパラメータに変数 Emp_state_var の値を代入します。そのカーソル行の従業員番号を PowerBuilder 変数Emp_id_var に返します。

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;integer Emp_id_varstring Emp_state_var = "MA"string sqlstatement

sqlstatement = "SELECT emp_id FROM employee "&+"WHERE state = ?"

PREPARE SQLSA FROM :sqlstatement ;OPEN DYNAMIC my_cursor using :Emp_state_var ;FETCH my_cursor INTO :Emp_id_var ;CLOSE my_cursor ;

例 3 以下のステートメントは前述の例と同じ処理を行いますが、ストアド プロシージャ Emp_select を用いています。

// emp_select の構文は以下のようになっています。// create procedure emp_select (@stateparm char(2)) as // SELECT emp_id FROM employee WHERE [email protected] my_proc DYNAMIC PROCEDURE FOR SQLSA ;integer Emp_id_varstring Emp_state_var

PREPARE SQLSA FROM "execute emp_select @stateparm=?" ;Emp_state_var = "MA"EXECUTE DYNAMIC my_proc USING :Emp_state_var ;FETCH my_proc INTO :Emp_id_var ;CLOSE my_proc ;

例 4 以下のステートメントは、SQL Native Client(SNC)接続の場合の戻り値があるストアド プロシージャの例です。

integer var1, ReturnValstring var2

PREPARE SQLSA FROM "execute @rc = myproc @parm1=?, @parm2=? OUTPUT ";DECLARE my_proc DYNAMIC PROCEDURE FOR SQLSA ;

EXECUTE DYNAMIC my_proc USING :var1, :var2 ;

//結果セットをフェッチします。. . .

Page 196: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

動的 SQL 書式 4

186 PowerBuilder

//戻り値と出力パラメータをフェッチします。FETCH my_proc INTO : ReturnVal, :var2;

CLOSE my_proc ;

動的 SQL 書式 4 機能 入力パラメータの数または結果集合のカラム数、あるいは両方がコン

パイル時に判明していない場合、結果集合を返す SQL 文を実行するときは、書式 4 を使用します。

構文 DECLARE Cursor | Procedure DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea ;

PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject} ;

DESCRIBE DynamicStagingAreaINTO DynamicDescriptionArea ;

OPEN DYNAMIC CursorUSING DESCRIPTOR DynamicDescriptionArea ;

EXECUTE DYNAMIC ProcedureUSING DESCRIPTOR DynamicDescriptionArea ;

FETCH Cursor | Procedure USING DESCRIPTOR DynamicDescriptionArea ;

CLOSE Cursor | Procedure ;

パラメータ 説明

Cursor または Procedure 使用するカーソル名またはプロシージャ名

DynamicStagingArea DynamicStagingArea 型の変数名(通常は、SQLSA)

SQLSA 以外の DynamicStagingArea 変数が必要な場合は、CREATE 文で変数を宣言し、インスタンス化してから使用してください。

SQLStatement 有効な SQL SELECT 文を示す文字列。この文字列は通常、文字列定数または先頭にコロンを付けた PowerBuilder の変数(たとえば :mysql)です。この文字列は 1 行に収める必要があり、式を用いることはできません。

SQL 文の各入力パラメータを疑問符(?)で代用する必要があります。各パラメータの値は記述した順序で代入されます。

Page 197: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 187

解説 DECLARE 文は非実行文です。また、グローバル変数として宣言することができます。

使用している DBMS が標準の(デフォルトの)FETCH NEXT 文以外のFETCH 文書式をサポートしている場合には、FETCH FIRST、FETCHPRIOR、または FETCH LAST 文を使用できます。

ローカル変数のスコープでカーソルまたはプロシージャを宣言するには、スクリプト ビューでスクリプトを開き、ペインタバーの[SQL 貼付]を使用するか、[編集|形式を指定して貼り付け]メニューを選択します。グローバル変数、インスタンス変数、または共有変数のカーソルまたはプロシージャを宣言するには、スクリプト ビューの最初のドロップダウン リストから[Declare]を選択し、2 つ目のドロップダウン リストから[Global Variables]、[Instance Variables]、または[SharedVariables]を選択します。その後、[SQL 貼付]を選択します。

グローバル変数、インスタンス変数,共有変数、およびローカル変数のスコープについては、35 ページの「変数の宣言場所」を参照してください。

プロパティ情報へのアクセス DynamicDescriptionArea 型の変数に SQL文が記述されると、その DynamicDescriptionArea 型の変数のプロパティを調べることによって、下表に示す情報を入手できます。

パラメータ値の設定とアクセス DynamicDescriptionArea 型の変数には、入力パラメータ値の配列と出力パラメータ値の配列を保持しています。入力パラメータの値は、SetDynamicParm 関数を使用して配列に設定します。また、以下の関数を使用して、出力パラメータの値を配列から入手できます。

TransactionObject (オプション)

データベースを指定するトランザクション オブジェクト名

DynamicDescriptionArea DynamicDescriptionArea の名前(通常は、SQLDA)。

SQLDA 以外の DynamicDescriptionArea 変数が必要な場合は、CREATE 文で変数を宣言し、インスタンス化してから使用してください。

パラメータ 説明

情報 プロパティ

入力パラメータの数 NumInputs

入力パラメータのデータ型を保持する配列 InParmType

出力パラメータの数 NumOutputs

出力パラメータのデータ型を保持する配列 OutParmType

Page 198: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

動的 SQL 書式 4

188 PowerBuilder

GetDynamicDate GetDynamicDateTime GetDynamicDecimal GetDynamicNumber GetDynamicString GetDynamicTime

これらの関数の詳細については、591 ページの「GetDynamicDate」、593ページの「GetDynamicDateTime」、594 ページの「GetDynamicDecimal」、595 ページの「GetDynamicNumber」、596 ページの「GetDynamicString」、および 597 ページの「GetDynamicTime」を参照してください。

パラメータのデータ型 以下のカタログ データ型は、入力パラメータと出力パラメータのデータ型の有効な値を示すのに用います。

TypeBoolean!TypeByte!TypeDate!TypeDateTime!TypeDecimal!TypeDouble!TypeInteger!TypeLong!TypeLongLong!TypeReal!TypeString!TypeTime!TypeUInt!TypeULong!TypeUnknown!

入力パラメータ PREPARE 文の各入力パラメータのデータ型と値は、開発者が設定できます。DESCRIBE 文が実行されるときに PowerBuilder によって SQLDA の NumInputs プロパティに値が代入されます。この値を SetDynamicParm 関数で使用すれば、個々の入力パラメータのデータ型と値を設定できます。入力パラメータはオプションですが、使用する場合には、OPEN 文または EXECUTE 文を実行する前に入力パラメータの値をすべて代入しておく必要があります。

出力パラメータ PREPARE 文の各出力パラメータのデータ型と値にアクセスできます。データベースが出力パラメータ記述子をサポートしている場合、DESCRIBE 文が実行されるときに PowerBuilder によってSQLDA の NumOutputs プロパティの値が生成されます。データベースが出力パラメータ記述子をサポートしていない場合は、FETCH 文が実行されるときに NumOutputs プロパティの値が生成されます。

Page 199: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 189

NumOutputs プロパティの出力パラメータ数を関数で用いれば、OutParmType プロパティの保持する出力パラメータのデータ型配列から個々のパラメータのデータ型を入手できます。データ型を入手すれば、FETCH 文の後で適切な関数を呼び出して出力値を検索できます。

例 例 1 以下のステートメントは、出力パラメータ記述子が 1 つしかなく、データ型が Integer であるものとして記述されています。また、CHOOSE CASE 文をループで処理するように拡張すると、出力パラメータ記述子とそのデータ型をいくつでもサポートできます。

string Stringvar, Sqlstatementinteger IntvarLong LongVar

Sqlstatement = "SELECT emp_id FROM employee"PREPARE SQLSA FROM :Sqlstatement ;DESCRIBE SQLSA INTO SQLDA ;DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;FETCH my_cursor USING DESCRIPTOR SQLDA ;// FETCH 文が正常終了した場合、出力記述子配列は、// 結果集合の最初の行から// 返された値を保持します。// SQLDA.NumOutputs プロパティは、出力記述子の数を// 保持します。// SQLDA.OutParmType 配列は、// NumOutput エントリを保持し、各エントリは// カタログ データ型 ParmType // (TypeInteger!、TypeLongLong! または TypeString!)の// 値を保持します。CHOOSE CASE SQLDA.OutParmType[1]

CASE TypeString!Stringvar = GetDynamicString(SQLDA, 1)

CASE TypeInteger!Intvar = GetDynamicNumber(SQLDA, 1)

CASE TypeLongLong! Longvar = GetDynamicDecimal(SQLDA, 1)END CHOOSECLOSE my_cursor ;

例 2 以下のステートメントは、String 型の入力パラメータ記述子が 1つあるものとして、入力パラメータに MA を設定します。

string Sqlstatement, sValueSqlstatement = "SELECT emp_fname, emp_lname " &

+ "FROM employee WHERE state = ?"PREPARE SQLSA FROM :Sqlstatement ;

Page 200: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

動的 SQL 書式 4

190 PowerBuilder

DESCRIBE SQLSA INTO SQLDA ;

// DESCRIBE 文が正常終了した場合、// OPEN 文の実行前に入力記述子配列の入力記述子に// 値を代入しておく必要があります。

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;SetDynamicParm(SQLDA, 1, "MA")

OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;

FETCH my_cursor USING DESCRIPTOR SQLDA ;

// FETCH 文が正常終了した場合、出力記述子配列は、// 前述の例と同じように // 結果集合の最初の行から// 返される値を保持します。

// 値をテストして確認しますsValue = SQLDA.GetDynamicString(1)//messagebox("",sValue)sValue = SQLDA.GetDynamicString(2)//messagebox("",sValue)Do While sqlca.sqlcode <> 100

FETCH my_cursor USING DESCRIPTOR SQLDA ;sValue = SQLDA.GetDynamicString(1)//messagebox("",sValue)sValue = SQLDA.GetDynamicString(2)//messagebox("",sValue)

Loop

CLOSE my_cursor ;

例 3 以下は、SQL Native Client(SNC)接続の場合の戻り値があるストアド プロシージャの例です。

integer var1, ReturnValstring var2

PREPARE SQLSA FROM "execute @rc = myproc @parm1=?, @parm2=? OUTPUT ";

DESCRIBE SQLSA INTO SQLDA ;

DECLARE my_proc DYNAMIC PROCEDURE FOR SQLSA ;

SetDynamicParm(SQLDA, 1, var1)

Page 201: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 8 章 SQL 文

PowerScript リファレンス 191

SetDynamicParm(SQLDA, 2, var2)

EXECUTE DYNAMIC my_proc USING DESCRIPTOR SQLDA ;

//結果セットをフェッチします。. . .

//戻り値と出力パラメータをフェッチします。FETCH my_proc USING DESCRIPTOR SQLDA ;

//戻り値を取得します。CHOOSE CASE SQLDA.OutParmType[1]CASE TypeInteger!

rc = GetDynamicNumber(SQLDA, 1)CASE TypeLong!

rc = GetDynamicNumber(SQLDA, 1)CASE TypeString!

Var2 = GetDynamicString(SQLDA, 1)END CHOOSE

//出力値を取得します。

CHOOSE CASE SQLDA.OutParmType[2]CASE TypeString!

Var2 = GetDynamicString(SQLDA, 2)CASE TypeInteger!

rc = GetDynamicNumber(SQLDA, 2)CASE TypeLong!

rc = GetDynamicNumber(SQLDA, 2)END CHOOSE

CLOSE my_proc ;

Page 202: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

動的 SQL 書式 4

192 PowerBuilder

Page 203: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PowerScript リファレンス 193

第 9 章 PowerScript のイベント

この章について この章では、イベントの種類について説明した後で、データウィンドウとデータストア以外の PowerBuilder のすべてのコントロールとオブジェクトに対するイベントとそのイベント ID、引数、戻り値について解説します。解説と例では、イベント スクリプトで一般的に行われる処理内容について説明します。

データウィンドウとデータストアのイベントについては、『データウィンドウ リファレンス』マニュアルを参照してください。

内容 イベントは、アルファベット順に解説されています。

イベントについてイベントにはいくつかの種類があります。

表 9-1: PowerBuilder のイベントの種類

イベント ID、引数、戻り値に関する以下の解説は、すべての種類のイベントに適用されます。

イベントの種類 イベントを起動させるもの

イベント ID のあるシステム イベント

ユーザの操作、ほかのシステム メッセージ、スクリプトによる呼び出し

イベント ID のないシステム イベント

PowerBuilder メッセージ、スクリプトによる呼び出し

イベント ID のあるユーザ定義イベント

ユーザの操作、ほかのシステム メッセージ、スクリプトによる呼び出し

イベント ID のないユーザ定義イベント ID

スクリプトによる呼び出し

Page 204: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

イベントについて

194 PowerBuilder

イベント ID イベント ID は、システム メッセージとイベントを対応付けするものです。ユーザ操作やシステム アクティビティによって起動されるイベントには、必ず、イベント ID があります。イベント ID を持つ一般的なイベントが、PowerBuilder のオブジェクトに対して定義されています。この章で解説されているのは、この種のイベント ID を持つイベントです。また、ほかのシステム メッセージのために、イベント宣言用のダイアログボックスで表示されるイベント ID リストを使用して、独自のイベントを定義することもできます。

イベント ID のないイベント アプリケーション オブジェクトの Open イベントのように、システム イベントによっては、イベント ID がないものがあります。このようなシステム イベントは、システム アクティビティにではなく、PowerBuilder のアクティビティに対応付けられています。これらのイベントは、PowerBuilder によって適切なときに起動されます。

引数 システムが起動するイベント システム イベントは、引数をそれぞれ持っています。PowerBuilder がシステム メッセージに応答してイベントを起動するときに、引数に値が提供されます。引数は、そのイベントのスクリプトで参照できます。

ユーザが起動するシステム イベント システム イベントを別のイベントのスクリプトで起動する場合、必要な引数を指定しなければなりません。たとえば、次のステートメントによってウィンドウの Clicked イベントから DoubleClicked イベントを起動できます。この際、DoubleClickedイベントに対し引数 flags、xpos、ypos を渡します。

w_main.EVENT DoubleClicked(flags, xpos, ypos)

DoubleClicked はシステム イベントなので、引数の内容は固定です。つまり引数を独自に追加することはできません。

引数を指定しないイベントの呼び出し方法

CALL 文を使用すれば、引数を指定しないでシステム イベントを起動することができます。しかし、CALL 文は互換性の目的でのみ残されており、130 ページの「CALL」 で説明している場合を除き、新しいアプリケーションでの使用は避けてください。

戻り値 戻り値はどこに行くのか ほとんどのイベントには戻り値があります。システムがイベントを起動する場合、システムに戻り値が返されます。

スクリプトがユーザ定義イベントやシステム イベントを起動する場合には、代入文によって戻り値を取得することができます。

li_rtn = w_main.EVENT process_info(mydata)

Page 205: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 195

イベントをポストとして起動する場合、ポストしたスクリプトが実際に実行されるときには、呼び出し元のスクリプトはすでに終了しているため、戻り値は失われます。ポストされるイベントに対して代入文を挿入すると、コンパイル エラーとなります。

リターン コード 戻り値のあるシステム イベントでは、デフォルト リターン コードとして 0 が返されます。この値は「特別なアクションをせずに処理を続行する」という意味です。イベントによっては、イベント後の処理を変更するためにリターン コードが追加されています。たとえば、リターン コードの値に応じて、エラー メッセージ表示を省略したり、行われた変更を取り消したりすることができます。

RETURN 文はイベント スクリプトに必ずしも記述しなくてもかまいませんが、通常は、RETURN 文を記述しておくことが推奨されます。戻り値のあるイベントに RETURN 文が記述されていない場合、イベントは 0 を返します。

システム イベントによっては戻り値がないものがあります。これらのイベントに対して RETURN 文を記述すると、コンパイル エラーとなります。

先祖イベント スクリプトの戻り値

子孫オブジェクトのイベントでなんらかの処理を実行するとき、その処理が先祖イベント スクリプトが返す戻り値に依存することがあります。このような場合、AncestorReturnValue というローカル変数を使うことができます。この変数は、自動的に宣言され、先祖イベントの値が代入されます。

AncestorReturnValue については、121 ページの「先祖オブジェクトの関数とイベントの呼び出し」を参照してください。

ユーザ定義イベント イベント ID のあるイベント システム メッセージによって起動されるユーザ定義イベントを宣言する場合は、イベント ID のリストから適切なイベント ID を選択します。イベント宣言用のダイアログボックスに表示される pbm(PowerBuilder Message)コードは、システム メッセージに対応しています。

イベント ID に関連付けられている戻り値と引数は、イベント宣言の一部となります。これらはシステム メッセージに対応するものなので、修正することはできません。

システム メッセージが発生すると、PowerBuilder は対応するイベントを起動し、イベントの引数に値を渡します。

イベント ID のないイベント システム メッセージに対応付けられないユーザ イベントを宣言するときは、イベント ID を選択しません。

この場合、独自の引数と戻り値のデータ型をイベント宣言用のダイアログボックスで指定することができます。

Page 206: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

イベントについて

196 PowerBuilder

イベント ID を持たないイベントは、ユーザ操作やシステム アクティビティによっては起動されません。アプリケーションのスクリプトで起動しなければなりません。

詳細について システム イベントなど、イベントを起動する際の呼び出し構文の詳細については、117 ページの「PowerBuilder の関数とイベントの呼び出し構文」を参照してください。

ユーザ定義イベントの詳細については、PowerBuilder の『ユーザーズガイド』マニュアルを参照してください。

Page 207: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 197

Activate機能 ウィンドウがアクティブになる直前に発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Activate イベントが発生すると、ウィンドウ上でタブ順序の最初のオブジェクトにフォーカスが移ります。ウィンドウに表示されているオブジェクトがない場合は、ウィンドウがフォーカスを得ます。

Activate イベントは新たに開かれたウィンドウに対しても発生します。これは、ウィンドウが開かれた後に、そのウィンドウがアクティブになるためです。

Activate イベントは、メニュー項目を使用可能にしたり使用不可にしたりするのによく用いられます。

例 例 1 次のコードは、ウィンドウの Activate イベントにおいて、m_frameの[ファイル]メニューの[シート]メニュー項目を使用不可にします。

m_frame.m_file.m_sheet.Enabled = FALSE

例 2 次のコードは、ウィンドウがアクティブになるときに、w_sheetシートを上重ね表示で開きます。

w_sheet.ArrangeSheets(Layer!)

関連項目 CloseOpenShow

イベント ID オブジェクト

pbm_activate ウィンドウ

Page 208: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

BeginDownload

198 PowerBuilder

BeginDownload機能 ダウンロード プロシージャの最初に発生します。

イベント ID

引数 なし

戻り値 なし

解説 このイベントを使用して、同期のダウンロードの開始段階にカスタムアクションを追加します。

MobiLink 同期サーバがデータを受信すると、統合データベースを更新してから、該当するすべての変更が含まれたダウンロード ストリームを作成してリモート サイトに送信します。同期の正常終了時に、統合データベースとリモート データベースの一貫性が確保されます。トランザクションの全体の同期を行うか、または同期を一切行わないかのいずれかです。これにより各データベースでトランザクションの整合性を確保できます。

BeginDownload イベントは、ダウンロード トランザクションの開始を示します。

接続および同期イベントのリストと使用例については、MobiLink のマニュアルを参照してください。

関連項目 BeginSyncBeginUploadConnectMobiLink

BeginDragBeginDrag イベントは、オブジェクトによって引数の内容が異なります。

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

オブジェクト 構文

リストビュー コントロール 構文 1

ツリービュー コントロール 構文 2

Page 209: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 199

構文 1 リストビュー コントロールに対して

機能 ユーザがリストビュー コントロール内でマウスの左ボタンを押して、ドラッグを開始するときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザがマウス ボタンを押してドラッグを開始すると、ドラッグの可能、不可能に関わらず、BeginDrag イベントと BeginRightDrag イベントが発生します。ドラッグを可能にするには、次のようにします。

• DragAuto プロパティを true に設定します。リストビューの DragAutoプロパティが true の場合、ユーザがクリックすると自動的にドラッグ モードになります。

• Drag 関数を呼び出します。DragAuto プロパティが false の場合は、BeginDrag イベント スクリプトで Drag 関数を呼び出し、ドラッグ操作を開始します。

リストビュー項目を別のコントロールにドラッグすると、ドラッグ関連の標準イベント(DragDrop、DragEnter、DragLeave、DragWithin)が発生します。ほかのコントロールがリストビューの境界内にドラッグされると、同様なドラッグ関連のイベントが発生します。

例 次の例はリストビュー項目をリストビューから別のリストビューに移動します。Ilvi_dragged_object は ListViewItem 型のウィンドウ インスタンス変数です。リストビュー項目をコピーする場合は、移動元のリストビューからリストビュー項目を削除するコードを省いてください。

次のコードは、移動元のリストビューの BeginDrag イベントのスクリプトです。

// リストビューの DragAuto プロパティが FALSE の場合This.Drag(Begin!)

This.GetItem(This.SelectedIndex(), &

イベント ID オブジェクト

pbm_lvnbegindrag リストビュー

引数 説明

index Integer 型。値によって渡されます(ドラッグされているリストビュー項目のインデックス)。

Page 210: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

BeginDrag

200 PowerBuilder

ilvi_dragged_object)

// 移動でなくコピーの場合は、次の 2 行を省くことThis.DeleteItem(This.SelectedIndex())This.Arrange()

次のコードは、移動先のリストビューの DragDrop イベントのスクリプトです。

This.AddItem(ilvi_dragged_object)This.Arrange()

関連項目 BeginRightDragDragDropDragEnterDragLeaveDragWithin

構文 2 ツリービュー コントロールに対して

機能 ユーザがツリービュー コントロールのラベル上でマウスの左ボタンを押して、ドラッグを開始するときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザがマウス ボタンを押してドラッグを開始すると、ドラッグの可能、不可能に関わらず、BeginDrag イベントと BeginRightDrag イベントが発生します。ドラッグを可能にするには、次のようにします。

• DragAuto プロパティを true に設定します。ツリービューの DragAutoプロパティが true の場合、ユーザがクリックすると自動的にドラッグ モードになります。

イベント ID オブジェクト

pbm_tvnbegindrag ツリービュー

引数 説明

handle Long 型。値によって渡されます(ドラッグされているツリービュー項目のハンドル)。

Page 211: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 201

• Drag 関数を呼び出します。DragAuto プロパティが false の場合は、BeginDrag イベント スクリプトで Drag 関数を呼び出し、ドラッグ操作を開始します。

ユーザはハイライト表示されている項目をドラッグできません。

ツリービュー項目を別のコントロールにドラッグすると、ドラッグ関連の標準イベント(DragDrop、DragEnter、DragLeave、DragWithin)が発生します。ほかのコントロールがツリービューの境界内にドラッグされると、同様なドラッグ関連のイベントが発生します。

例 次の例はツリービュー項目をツリービューから別のツリービューに移動します。itvi_dragged_object は TreeViewItem 型のウィンドウ インスタンス変数です。ツリービュー項目をコピーする場合は、移動元のツリービューからツリービュー項目を削除するコードを省いてください。

次のコードは、移動元のツリービューの BeginDrag イベントのスクリプトです。

long itemnum

// ツリービューの DragAuto プロパティが FALSE の場合This.Drag(Begin!)itemnum = 1This.GetItem(itemnum, itvi_dragged_object)

// 移動でなくコピーの場合は、次の 2 行を省くことThis.DeleteItem(itemnum)This.SetRedraw(TRUE)

次のコードは、移動先のツリービューの DragDrop イベントのスクリプトです。

This.InsertItemLast(0, itvi_dragged_object)This.SetRedraw(TRUE)

移動元のツリービューから項目をただちに削除するかわりに、DragDropイベントでの項目の挿入を確認した後で削除しても構いません。

関連項目 BeginRightDragDragDropDragEnterDragLeaveDragWithin

Page 212: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

BeginLabelEdit

202 PowerBuilder

BeginLabelEditBeginLabelEdit イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リストビュー コントロールに対して

機能 ユーザが項目を選択した後で、その項目のラベルをクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 ラベルの編集を可能にします。1 ラベルの編集ができません。

解説 ラベルの編集が可能なときは、ラベルの位置にボックスが現われ、ラベル テキストがハイライト表示されます。ユーザはこのテキストを変更することができます。

例 次の例は、BeginLabelEdit イベントを使って、編集中のリストビュー項目名をシングルライン エディットに表示します。

ListViewItem lviThis.GetItem(index, lvi)sle_info.text = "Editing " + string(lvi.label)

関連項目 EndLabelEdit

オブジェクト 構文

リストビュー コントロール 構文 1

ツリービュー コントロール 構文 2

イベント ID オブジェクト

pbm_lvnbeginlabeledit リストビュー

引数 説明

index Integer 型。値によって渡されます(選択されたリストビュー項目のインデックス)。

Page 213: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 203

構文 2 ツリービュー コントロールに対して

機能 ユーザが項目を選択した後で、その項目のラベルをクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 ラベルの編集を可能にします。1 ラベルの編集ができません。

解説 ラベルの編集が可能なときは、ラベルの位置にボックスが現われ、ラベル テキストがハイライト表示されます。ユーザはこのテキストを変更することができます。

例 次の例は、BeginLabelEdit イベントを使って、編集中のツリービュー項目名をシングルライン エディットに表示します。

TreeViewItem tviThis.GetItem(index, tvi)sle_info.text = "Editing " + string(tvi.label)

関連項目 EndLabelEdit

BeginLogScan機能 dbmlsync がアップロード データ ストリームをアセンブルするために、

トランザクション ログをスキャンする前に発生します。

イベント ID

イベント ID オブジェクト

pbm_tvnbeginlabeledit ツリービュー

引数 説明

handle Long 型。値によって渡されます(選択されたツリービュー項目のハンドル)。

イベント ID オブジェクト

なし MLSync

Page 214: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

BeginRightDrag

204 PowerBuilder

引数

戻り値 なし

解説 このイベントを使用して、アップロードのためにトランザクション ログがスキャンされる直前にカスタム アクションを追加します。同期開始前のアップロード ストリームの準備中に、BeginLogScan、ProgressInfo、および EndLogScan イベントが呼び出されます。

この同期でトランザクション ログが初めてスキャンされた場合、rescanlog の値は false、それ以外の場合は true です。MobiLink 同期サーバと dbmlsync が、スキャンの開始位置について異なる情報を持っている場合、ログが 2 度スキャンされます。

関連項目 EndLogScanProgressIndex

BeginRightDragBeginRightDrag イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リストビュー コントロールに対して

機能 ユーザがリストビュー コントロール内でマウスの右ボタンを押して、ドラッグを開始するときに発生します。

イベント ID

引数 説明

rescanlog Boolean 型。現行同期のログがスキャン済みかどうかを示します。

オブジェクト 構文

リストビュー コントロール 構文 1

ツリービュー コントロール 構文 2

イベント ID オブジェクト

pbm_lvnbeginrightdrag リストビュー

Page 215: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 205

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザがマウス ボタンを押してドラッグを開始すると、ドラッグの可能、不可能に関わらず、BeginDrag イベントと BeginRightDrag イベントが発生します。ドラッグを可能にするには、次のようにします。

• DragAuto プロパティを true に設定します。リストビューの DragAutoプロパティが true の場合、ユーザがクリックすると自動的にドラッグ モードになります。

• Drag 関数を呼び出します。DragAuto プロパティが false の場合は、BeginRightDrag イベント スクリプトで Drag 関数を呼び出し、ドラッグ操作を開始します。

リストビュー項目を別のコントロールにドラッグすると、ドラッグ関連の標準イベント(DragDrop、DragEnter、DragLeave、DragWithin)が発生します。ほかのコントロールがリストビューの境界内にドラッグされると、同様なドラッグ関連のイベントが発生します。

例 BeginDrag イベントの例を参照してください。BeginRightDrag イベントでも有効です。

関連項目 BeginDragDragDropDragEnterDragLeaveDragWithin

構文 2 ツリービュー コントロールに対して

機能 ユーザがツリービュー コントロール内でマウスの右ボタンを押して、ドラッグを開始するときに発生します。

イベント ID

引数 説明

index Integer 型。値によって渡されます(ドラッグされているリストビュー項目のインデックス)。

イベント ID オブジェクト

pbm_tvnbeginrightdrag ツリービュー

Page 216: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

BeginSync

206 PowerBuilder

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザがマウス ボタンを押してドラッグを開始すると、ドラッグの可能、不可能に関わらず、BeginDrag イベントと BeginRightDrag イベントが発生します。ドラッグを可能にするには、次のようにします。

• DragAuto プロパティを true に設定します。ツリービューの DragAutoプロパティが true の場合、ユーザがクリックすると自動的にドラッグ モードになります。

• Drag 関数を呼び出します。DragAuto プロパティが false の場合は、BeginRightDrag イベント スクリプトで Drag 関数を呼び出し、ドラッグ操作を開始します。

ユーザはハイライト表示されている項目をドラッグできません。ツリービュー項目を別のコントロールにドラッグすると、ドラッグ関連の標準イベント(DragDrop、DragEnter、DragLeave、DragWithin)が発生します。ほかのコントロールがツリービューの境界内にドラッグされると、同様なドラッグ関連のイベントが発生します。

例 BeginDrag イベントの例を参照してください。

関連項目 BeginDragDragDropDragEnterDragLeaveDragWithin

BeginSync機能 同期の最初に発生します。

イベント ID

引数 説明

handle Long 型。値によって渡されます(ドラッグされているツリービュー項目のハンドル)。

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

Page 217: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 207

引数

戻り値 なし

解説 このイベントを使用して、同期の最初にカスタム アクションを追加します。次の同期オブジェクトのイベントは、記述順に、同期サーバで発生するイベントに対応します。同期オブジェクト イベントはBeginSync、ConnectMobiLink、BeginUpload、EndUpload、BeginDownload、EndDownload、DisconnectMobiLink、EndSync です。

関連項目 BeginDownloadBeginUploadConnectMobiLink

BeginUpload機能 同期のアップロード プロシージャの最初に発生します。

イベント ID

引数 なし

戻り値 なし

解説 このイベントを使用して、アップロードを MobiLink 同期サーバに送信する直前にカスタム アクションを追加します。

BeginUpload イベントは、アップロード トランザクションの開始を示します。すべてのリモート テーブルについて、統合データベースへの挿入および更新が適切に行われ、行も適切に削除されます。EndUploadの後に、アップロードの変更がコミットされます。

関連項目 BeginDownloadConnectMobiLinkEndUpload

引数 説明

mlusername 読み取り専用文字列。MobiLink ユーザ名を識別します。

pubnames 読み取り専用文字列。同期されるパブリケーションを識別します。パブリケーションが複数ある場合はカンマで区切ります。

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

Page 218: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Clicked

208 PowerBuilder

ClickedClicked イベントは、オブジェクトによって引数の内容が異なります。

データウィンドウ コントロールの Clicked イベントについては、『データウィンドウ リファレンス』マニュアルまたはオンライン ヘルプを参照してください。

構文 1 メニュー オブジェクトに対して

機能 ユーザがメニューの項目を選択するときに発生します。

イベント ID

引数 なし

戻り値 なし(RETURN 文を使用しないでください)

解説 ユーザがメニュー項目を実行せずにハイライト表示にしただけの場合は、Selected イベントが発生します。

ユーザが、カスケード メニューに関連付けられたメニュー項目を選択した場合は、Clicked イベントが発生し、カスケード メニューが表示されます。

例 次のスクリプトは、フレーム ウィンドウの[新規作成]メニュー項目の Clicked イベントに対するものです。ここで、wf_newsheet 関数はウィンドウ関数です。また、w_genapp_frame は、アプリケーション テンプレート(新規アプリケーションの作成時に生成できます)のコンポーネントです。

/* 新規シートの作成 */w_genapp_frame.wf_newsheet( )

オブジェクト 構文

メニュー 構文 1

リストビュー コントロール 構文 2

タブ コントロール 構文 3

ツリービュー コントロール 構文 4

ウィンドウおよびプログレスバー コントロール

構文 5

ほかのコントロール 構文 6

イベント ID オブジェクト

なし メニュー

Page 219: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 209

関連項目 Selected

構文 2 リストビュー コントロールに対して

機能 ユーザがリストビュー コントロール内の項目か項目以外のスペースをクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベントはマウス ボタンが押されたときに発生します。Clickedイベントは、ダブルクリックされるときも、DoubleClicked イベントに先立って発生します。

ユーザがまだフォーカスされていない項目をクリックすると、Clickedイベントのほかに ItemChanging イベントと ItemChanged イベントが発生します。フォーカスされている項目のラベルをクリックすると、BeginLabelEdit イベントが発生します。

リストビュー コントロールに対する ItemActivate イベントの使用

リストビュー コントロールには、Clicked イベントのかわりに ItemActivate イベントを使用できます(OneClickActivate プロパティを true に設定)。

例 次のコードは、ユーザがクリックした項目の英文ラベルを大文字に変更します。

IF index = -1 THEN RETURN 0

This.GetItem(index, llvi_current)llvi_current.Label = Upper(llvi_current.Label)

イベント ID オブジェクト

pbm_lvnclicked リストビュー

引数 説明

index Integer 型。値によって渡されます(ユーザがクリックしたリストビュー項目のインデックス)。ユーザが項目以外のコントロール内部をクリックした場合、index の値は -1 になります。

Page 220: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Clicked

210 PowerBuilder

This.SetItem(index, llvi_current)RETURN 0

関連項目 ColumnClickDoubleClickedItemActivateItemChangedItemChangingRightClickedRightDoubleClicked

構文 3 タブ コントロールに対して

機能 ユーザがタブ コントロールのタブ部分をクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベントはマウス ボタンが放されるときに発生します。

ユーザがタブ コントロールの表示領域をクリックすると、タブ コントロールではなく、タブ ページが Clicked イベントを得ます。

Clicked イベントは、ダブルクリックされるときも、DoubleClicked イベントに先立って発生します。

ユーザがタブ ページ ラベルをクリックすると、Clicked イベントのほかに SelectionChanging イベントと SelectionChanged イベントが発生します。ユーザが矢印キーを押して別のタブ ページに移る場合は、Clickedイベントではなく、SelectionChanging イベントと SelectionChanged イベントの前に Key イベントが発生します。

イベント ID オブジェクト

pbm_tcnclicked タブ

引数 説明

index Integer 型。値によって渡されます(ユーザがクリックしたタブ ページのインデックス)。

Page 221: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 211

例 次のコードは 4 番目のタブ ページがクリックされたときだけ、タブ ラベルを太字に変えます。

IF index = 4 THEN This.BoldSelectedText = TRUE

ELSEThis.BoldSelectedText = FALSE

END IF

関連項目 DoubleClickedRightClickedRightDoubleClickedSelectionChangedSelectionChanging

構文 4 ツリービュー コントロールに対して

機能 ユーザがツリービュー コントロールの項目をクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベントはマウス ボタンが押されたときに発生します。

Clicked イベントは、ダブルクリックされるときも、DoubleClicked イベントに先立って発生します。

フォーカスされていなかったコントロールがクリックされる場合は、Clicked イベントのほかに、GetFocus イベントが発生します。

例 次のコードは、ユーザがクリックした項目の英文ラベルを大文字に変更します。

TreeViewItem ltvi_current

イベント ID オブジェクト

pbm_tvnclicked ツリービュー

引数 説明

handle Long 型。値によって渡されます(ユーザがクリックしたツリービュー項目のハンドル)。

Page 222: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Clicked

212 PowerBuilder

This.GetItem(handle, ltvi_current)ltvi_current.Label = Upper(ltvi_current.Label)This.SetItem(handle, ltvi_current)

関連項目 DoubleClickedRightClickedRightDoubleClickedSelectionChangedSelectionChanging

構文 5 ウィンドウおよびプログレスバー コントロールに対して

機能 ユーザがウィンドウまたはプログレスバーの未使用領域(表示可能で使用可能なオブジェクトが配置されていないエリア)をクリックするときに発生します。

イベント ID

引数

イベント ID オブジェクト

pbm_lbuttonclk ウィンドウ

pbm_lbuttondwn 水平スクロールバー、垂直スクロールバー

引数 説明

flags UnsignedLong 型。値によって渡されます(押下されたマウス ボタンと修飾キーの値の合計)。

値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン(ウィンドウのみ)

• 4 -〔Shift〕

• 8 -〔Ctrl〕

• 16 - 中央マウス ボタン(ウィンドウのみ)

ウィンドウの Clicked イベントで左マウス ボタンが押されない場合、flags の値に 1 は加算されません。

flags の詳細については、288 ページの「MouseMove」イベントの構文 2 を参照してください。

xpos Integer 型。値によって渡されます(ウィンドウ ワークスペースまたはコントロールの左辺からポインタまでの距離で、ピクセル単位の値)。

ypos Integer 型。値によって渡されます(ウィンドウ ワークスペースまたはコントロールの上辺からポインタまでの距離で、ピクセル単位の値)。

Page 223: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 213

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベントは、プログレスバーでマウス ボタンが押されるとき、およびウィンドウでマウス ボタンを放すときに発生します。

ユーザがウィンドウでコントロールやメニューをクリックすると、ウィンドウではなく、オブジェクトが Clicked イベントを得ます。なお、ウィンドウのタイトル バーをクリックしても Clicked イベントは発生しません。

ユーザがウィンドウをクリックすると、ウィンドウの MouseDown イベントと MouseUp イベントも発生します。

ユーザが、表示されているが使用不可のコントロールや、使用可能だが非表示のコントロールをクリックした場合は、ウィンドウが Clickedイベントを得ます。

例 次のコードは、ユーザがウィンドウの左上隅をクリックすると cb_clearボタンにフォーカスを移します。

IF (xpos <= 600 AND ypos <= 600) THENcb_clear.SetFocus( )

END IF

関連項目 DoubleClickedMouseDownMouseMoveMouseUpRButtonDown

構文 6 ほかのコントロールに対して

機能 ユーザがコントロールをクリックしたときに発生します。

イベント ID

引数 なし

イベント ID オブジェクト

pbm_bnclicked チェックボックス、コマンドボタン、グラフ、OLE、ピクチャ、ピクチャ ハイパーリンク、ピクチャボタン、ラジオボタン、スタティック テキスト、スタティック ハイパーリンク

pbm_lbuttondown 日付ピッカー、月表示カレンダ

Page 224: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Close

214 PowerBuilder

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベントはマウス ボタンが放されるときに発生します。

フォーカスされていなかったコントロールがクリックされる場合は、Clicked イベントのほかに、GetFocus イベントが発生します。

例 次のコードは、OLE コントロールの Clicked イベントのスクリプトです。OLE コントロール上のオブジェクトをインプレースで起動します。

integer li_successli_success = This.Activate(InPlace!)

関連項目 GetFocusRButtonDown

CloseClose イベントは、オブジェクトによって引数の内容が異なります。

構文 1 アプリケーション オブジェクトに対して

機能 ユーザがアプリケーションを閉じるときに発生します。

イベント ID

引数 なし

戻り値 なし(RETURN 文を使用しないでください)

解説 Close イベントは、すべてのウィンドウ(MDI アプリケーションの場合は MDI フレーム)が閉じるときに発生します。

オブジェクト 構文

アプリケーション 構文 1

OLE コントロール 構文 2

ウィンドウ 構文 3

イベント ID オブジェクト

なし アプリケーション

Page 225: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 215

関連項目 OpenSystemError

構文 2 OLE コントロールに対して

機能 オフサイトで起動された OLE コントロールのオブジェクト(OLE サーバがサーバのウィンドウ上で表示しているオブジェクト)のサーバが閉じられるときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

解説 ユーザが OLE サーバを閉じると、ユーザの選択によってコントロール内の OLE オブジェクトが更新され、Save イベントまたは DataChangeイベントが発生する場合があります。

このイベントの処理中に、OLE コントロールの ObjectData Blob 値を取得したい場合は、このコントロールに対してユーザ イベントをポストしないと、実行時エラーが発生します。

関連項目 DataChangeSave

構文 3 ウィンドウに対して

機能 ウィンドウが画面に表示されなくなる直前に発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

イベント ID オブジェクト

pbm_omnclose OLE

イベント ID オブジェクト

pbm_close ウィンドウ

Page 226: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

CloseQuery

216 PowerBuilder

解説 ウィンドウに対して Close 関数を呼び出す場合、Close イベントの前にCloseQuery イベントが発生します。CloseQuery イベントでは、Close イベントを発生させないでウィンドウを開いたままにするようにリターン コードを指定できます。

ウィンドウを閉じる場合は、Close イベントを起動しないで、Close 関数を呼び出してください。Close イベントを起動しても、そのイベントスクリプトが実行されるだけで、ウィンドウは閉じません。

関連項目 CloseQueryOpen

CloseQuery機能 ウィンドウが閉じるときに、Close イベントの前に発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 ウィンドウを閉じます。1 ウィンドウを閉じません。

解説 CloseQuery イベントがリターン コードとして 1 を返す場合、ウィンドウのクローズ処理は中止され、Close イベントは発生しません。

ユーザがウィンドウのクローズボックスを使ってウィンドウを閉じる場合も CloseQuery イベントが発生します。したがって、CloseQuery イベントを用いれば、ウィンドウを閉じる前にユーザに変更内容を保存するかどうかを尋ねたり、正当なデータが入力されたかどうかを調べたりすることができます。

旧形式のテクニック

Message オブジェクトの ReturnValue プロパティの値を設定する必要はなくなりました。かわりに、RETURN 文を使用してください。

イベント ID オブジェクト

pbm_closequery ウィンドウ

Page 227: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 217

例 次のスクリプトは、ウィンドウの CloseQuery イベントのものです。ユーザにウィンドウを本当に閉じるかどうかメッセージを発し、ユーザが「いいえ」と答えたらクローズ処理を中止します。

IF MessageBox("ウィンドウを閉じる ", & "ウィンドウを閉じてもよろしいですか ?", &

Question!, YesNo!) = 2 THENRETURN 1

ELSERETURN 0

END IF

次のスクリプトは、dw_1 データウィンドウに未保存のデータ変更があるかどうか調べます。変更がある場合、そのデータをデータベースに更新してからウィンドウを閉じるか、更新せずに閉じるか、また、更新しないでウィンドウを開いたままにするか、ユーザに問い合わせます。

integer li_rc

// データウィンドウに入力されたデータをすべて確定するdw_1.AcceptText()

// データが更新されたかどうかチェックするIF dw_1.DeletedCount()+dw_1.ModifiedCount() > 0 THEN

li_rc = MessageBox("閉じる ", &"変更内容を更新しますか ?", Question!, &YesNoCancel!, 3)

// データを更新してからウィンドウを閉じる処理IF li_rc = 1 THEN

Window lw_windowlw_window = w_genapp_frame.GetActiveSheet()lw_window.TriggerEvent("ue_update")RETURN 0

// データを更新しないでウィンドウを閉じる処理ELSEIF li_rc = 2 THEN

RETURN 0

// クローズ処理のキャンセルELSE

RETURN 1END IF

ELSE// 変更されたデータがなかったので、ウィンドウを単に閉じる

Page 228: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

CloseUp

218 PowerBuilder

RETURN 0END IF

関連項目 Close

CloseUp機能 ユーザがドロップダウン カレンダから日付を選択し、カレンダを閉じ

るときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

ColumnClick機能 ユーザがカラム ヘッダをクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ColumnClicked イベントは、リストビューのビューが詳細表示になっていて、ButtonHeader プロパティが true に設定されているときしか、発生しません。

イベント ID オブジェクト

pbm_dtpcloseup 日付ピッカー

イベント ID オブジェクト

pbm_lvncolumnclick リストビュー

引数 説明

column クリックされたカラムのインデックス

Page 229: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 219

例 次の例は、ColumnClicked イベントを使って、カラム引数のインスタンス変数を設定し、カラムの配置(位置揃え)情報を取得して表示します。

string ls_label, ls_aligninteger li_widthalignment la_align

ii_col = columnThis.GetColumn(column, ls_label, la_align, &

li_width)

CHOOSE CASE la_alignCASE Right!

rb_right.Checked = TRUEls_align = "Right!"

CASE Left!rb_left.Checked = TRUEls_align = "Left!"

CASE Center!rb_center.Checked = TRUEls_align = "Center!"

CASE Justify!rb_just.Checked = TRUEls_align = "Justify!"

END CHOOSE

sle_info.Text = String(column) &+ " " + ls_label &+ " " + ls_align &+ " " + String(li_width)

関連項目 Clicked

Page 230: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ConnectMobiLink

220 PowerBuilder

ConnectMobiLink機能 MobiLink 同期サーバが統合データベース サーバに接続するときに発

生します。

イベント ID

引数 なし

戻り値 なし

解説 アプリケーションが MobiLink 同期サーバとの接続を形成または再形成するときに、MobiLink 同期サーバが、その同期中にデータベースサーバとの接続を一時的に 1 つ割り当てます。

ConnectMobiLink イベントを使用して、リモート データベースがMobiLink 同期サーバに接続する直前にカスタム アクションを追加します。この段階で、dbmlsync がアップロード ストリームの生成を完了します。

次の同期オブジェクトのイベントは、記述順に、同期サーバで発生するイベントに対応します。同期オブジェクト イベントは、BeginSync、ConnectMobiLink、BeginUpload、EndUpload、BeginDownload、EndDownload、DisconnectMobiLink、EndSync です。

関連項目 BeginDownloadBeginSyncBeginUploadDisconnectMobiLink

Constructor機能 コントロールやオブジェクトが作成されるときに、そのコントロール

が配置されるウィンドウの Open イベントの前に発生します。

イベント ID

引数 なし

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

イベント ID オブジェクト

pbm_constructor すべてのオブジェクト

Page 231: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 221

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ウィンドウが表示される前にコントロールのプロパティを設定したい場合は、コントロールの Constructor イベントにスクリプトを記述できます。

ウィンドウやユーザ オブジェクトが開かれると、それらに配置されている各コントロールの Constructor イベントが発生します。ウィンドウの Control プロパティ(配列)内のコントロールの順序が Constructor イベントの発生順序を決定します。ウィンドウのコントロールにユーザオブジェクトがある場合、ユーザ オブジェクト内のすべてのコントロールの Constructor イベントが発生した後で、ウィンドウ内の次のコントロールの Constructor イベントが発生します。

OpenUserObject 関数を呼び出して動的にユーザ オブジェクトをウィンドウに追加する場合、そのユーザ オブジェクトの Constructor イベントとそれを構成するすべてのコントロールの Constructor イベントが発生します。

CREATE 文を使用してクラス(非ビジュアル)ユーザ オブジェクトのインスタンスを作成する場合、クラス ユーザ オブジェクトの Constructorイベントが発生します。

クラス ユーザ オブジェクト変数のインスタンスの自動生成(AutoInstantiate)が設定されている場合、変数がスコープ内に生成されるときにその Constructor イベントが発生します。つまり、Constructor イベントが発生するのは次の場合です。

• グローバル変数 : システムが開始するとき

• 共有変数 : 共有変数があるオブジェクトがロードされるとき

• インスタンス変数 : インスタンス変数があるオブジェクトが作成されるとき

• ローカル変数 : ローカル変数を宣言した関数の実行が開始されるとき

例 次の例は、データウィンドウ dw_1 のウィンドウが表示される前に、そのデータを検索します。

dw_1.SetTransObject(SQLCA)dw_1.Retrieve( )

関連項目 DestructorOpen

Page 232: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DataChange

222 PowerBuilder

DataChange機能 OLE サーバ アプリケーションが、OLE コントロールにデータが変更さ

れたことを通知するときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

関連項目 PropertyRequestEditPropertyChangedRenameViewChange

DateChanged機能 日付が選択された直後に発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

解説 このイベントで MessageBox 関数を呼び出すコードを記述する場合は、ユーザがマウスを使用して新しい日付を選択するとメッセージボックスを表示しません。これはマウス クリックがマウスを獲得するからです。予期しない結果が起こるため、マウスを獲得するときにはメッセージ ボックスを表示しません。ユーザが矢印キーを使用して新しい日付を選択した場合には、メッセージ ボックスは表示されます。

SetSelectedDate 関数と SetSelectedRange 関数は DateChanged イベントを起動します。DateChanged イベントの中でこれらのメソッドを呼び出すべきではありません(特に Post メソッドを使用している場合)。

関連項目 DateSelected

イベント ID オブジェクト

pbm_omndatachange OLE

イベント ID オブジェクト

pbm_mcdatechanged 月表示カレンダ

Page 233: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 223

DateSelected機能 ユーザがマウスを使用して日付を選択するときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

解説 このイベントは DateChanged に似ていますが、ユーザがマウスを使用して特定の日付けを選択したときにのみ発生します。 DateChanged イベントは日付が変更されるとき、つまり日付がマウスを使用して選択されるとき、日付がスクリプトで変更されるとき、およびユーザがキーボードで矢印キーを使用して別の日付を選択したり、コントロールの矢印で別の月にスクロールしたりするときに、常に発生します。

例 DateSelected イベントの次のスクリプトは、ユーザがマウスを使用して選択した日付をシングルライン エディット ボックスに書き出します。

date dt_selectedinteger li_retstring ls_date

li_ret = GetSelectedDate( dt_selected)ls_date = string(dt_selected)sle_2.text = ls_date

関連項目 DateChanged

DBError機能 トランザクションの最中またはトランザクション試行時のエラーに

よって発生します。

イベント ID

イベント ID オブジェクト

pbm_mcdatesel 月表示カレンダ

イベント ID オブジェクト

なし トランザクション オブジェクト

Page 234: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DBError

224 PowerBuilder

引数

戻り値 Long 型。ただし、このリターン コードは PowerBuilder にとって意味がありません。

解説 エラー コード データベース関連のエラーでは、エラー コードはすべてデータベース ドライバから提供されます。エラー テキストもデータベース ドライバから提供されます。引数 sqlsyntax は、エラーの発生時にどの SQL 構文が実行されていたかを示します。

データベース ドライバに関連のないエラーの場合、引数 code は -4 に設定されます。PowerBuilder VM がこれらの 3 種類のエラーの構文を取得できない場合、空の文字列が引数 sqlsyntax に渡されます。PowerBuilder は以下の種類のエラーの構文を取得できません。

引数 説明

code Long 型。値によって渡されます。データベース固有のエラーコードです。

コードの意味については、お使いの DBMS のマニュアルを参照してください。

DBMS からエラー コードが提供されない場合、codeには次のいずれかの値が設定されます。

-1 – データベースに接続できない-2 – データベースへの Blob の書き込みが失敗した-4 – その他のすべてのエラー(「解説」を参照)

sqlerrortext String 型。値によって渡されます。データベース固有のエラーコードです。

sqlsyntax String 型。値によって渡されます。エラーが発生したときに、DBMS に送信されていた SQL 文のフルテキストです。

• “ カーソルが開かれていません。”

• “ カーソルは既に開かれています。”

• “ ストアド プロシージャが実行されていないか、結果が得られませんでした。”

• “ ストアド プロシージャは既に実行されています。”

• “ トランザクションが接続されていません。”

• “ トラザクションが既に接続されています。”

• “ トランザクションが接続できません。トランザクション プールの設定値を超えています。”

• “DB が FETCH FIRST/FETCHLAST/FETCH PRIOR 文をサポートしていません。”

Page 235: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 225

PowerBuilder VM は、以下の種類のエラーに対して SQL 構文を取り、これらのエラーに対する Transaction オブジェクトの DBError イベントにそれを渡すことができます。

埋め込み SQL での使用 デフォルトでは、Transaction オブジェクトでエラーが発生すると、DBError イベントが呼び出されます。エラー コードとエラー メッセージはこのイベントに渡されます。これらのエラーの処理のために、DBError イベントにコードを追加できます。

データウィンドウ / データストアでの使用 Transaction オブジェクトをデータウィンドウで使用する場合、Transaction オブジェクトのDBError イベントの前に、データウィンドウ DBError イベントが起動されます。データウィンドウ DBError イベントの戻り値は、Transactionオブジェクトの DBError イベントが順番に起動すべきであるかどうかを示すために使用されます。データウィンドウ DBError イベントの戻り値が 0 または 1 のとき、Transaction オブジェクトの DBError イベントも(定義されている場合は)起動されます。データウィンドウDBError イベントの戻り値が 2 または 3 のとき、Transaction オブジェクトの DBError イベントは無視されます。

例 以下の DBError イベント内のコードは 、Transaction エラーの発生時に DBMSに送信されるエラー メッセージと SQL 文を表示します。

Messagebox("トランザクション エラー ","エラー メッセージ : "&+sqlerrortext + "★~r~n 以下の文について発生しました:★"&+sqlsyntax)

関連項目 『データウィンドウ リファレンス』マニュアルの DBErrorSQLPreview

• “Select 文が複数行を返しました。”

• “UPDATEBLOB 文では Blob 型変数を空にすることはできません。”

• “ 準備された代入変数の数と実行パラメータの数が一致しません。”

• “Open < カーソル > あるいは Execute< ストアド プロシージャ > はSQLDA 記述子を参照しなければなりません。”

• “検索したカラムと FETCH したカラムが一致しません。”

• “DB が WHERE CURRENT OF < カーソル名 > 構文をサポートしていません。”

• “DB 文は Blob 型変数を参照しなければなりません。”

Page 236: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DBNotification

226 PowerBuilder

DBNotification機能 PowerBuilder データベース ドライバがデータベース サーバから通知を

受け取る場合、PowerBuilder スクリプトまたはデータウィンドウ データベース操作コマンドにより起動されます。このイベントは、Oracle10g(O10)のネイティブ データベース インタフェースでのみサポートされます。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

• 0 データベース コマンドの処理を続行します。イベントが存在しないかまたはスクリプトが含まれていない場合、デフォルトで戻り値が 0 になります。

イベント ID オブジェクト

pbm_dbnotification トランザクション

引数 説明

notification DBNotification カタログ データ型の値。データベース インタフェースがサーバから受け取る通知の種類を判断し、DBNotification イベントを起動してこの引数に通知の種類を渡します。値は以下のとおりです。

• DBServerDown! = 1。サーバがシャットダウンされました。この通知の種類は、O10(Oracle 10g)データベース インタフェースでのみ使用されます。

• DBFailover! = 2。データベース クライアントがフェイルオーバ中です。

• DBDataTruncate! = 3。データが切り捨てられました。

DBServerDown! は、Oracle RAC データベースの HAイベント用です。DBFailover! および DBDataTruncate!は、そのほかのデータベースのフェイルオーバおよびデータの切り捨てについての警告として使用できます。

command 通知の発生時に実行されていたコマンドをユーザに知らせる文字列です。

dbmessage イベントの発生理由を示す文字列です。

Page 237: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 227

• そのほかの値 notification 引数が DBFailover! の場合は無視されます。notification 引数の値が DBServerDown! や DBDataTruncate! の場合、現行コマンドがエラーとともに返されます。SQLCA.SQLCodeに -1 が設定され、SQLCA.SQLDBCode に戻り値が設定されます。

解説 Oracle Real Application Clusters(RAC)は、共有キャッシュ アーキテクチャを使用するクラスタ データベースです。Oracle 10g Release 2 では、RAC データベースに接続されている高可用性(HA:High Availability)クライアントは、クライアントの接続に影響を与えるデータベース障害が発生したときに、サーバから通知を受ける必要があることを示すコールバックを登録できます。DBNotification イベントは、そのような障害発生の通知をクライアントが受けたときに起動されます。

デフォルト トランザクション オブジェクトの SQLCA は、このイベントをサポートしません。このイベントを使用するには、トランザクション オブジェクトから継承する標準クラス ユーザ オブジェクトを新たに作成し、DBNotification イベント スクリプトにコードを追加します。その後、アプリケーションでこのトランザクション オブジェクトを使用するか、またはアプリケーションの付加的なプロパティ ダイアログボックスの[変数の型]タブ ページで、SQLCA を作成したトランザクション オブジェクトに置き換えます。

サーバがシャットダウンしたときに通知を受けるには、O10 データベース インタフェースを使用してアプリケーションを Oracle 10g RACデータベースに接続し、HANotification データベース パラメータに 1 を設定する必要があります。サーバがシャットダウンすると、O10 ドライバが通知を受けます。アプリケーションがサーバに対するアクセスの試みを続行する場合、DBNotification イベントが起動します。notification 引数の値に DBServerDown! が設定され、command 文字列に現行コマンドの構文が設定され、dbmessage 文字列にシャットダウンについての情報が設定されます。

サーバのシャットダウン後にアプリケーションが現行の接続においてSQL 文を実行しない場合、Disconnect が呼び出されるまで DBNotificationイベントは起動しません。

DBNotification イベントの戻り値をコード化することにより、アプリケーションが現行コマンドの実行を続行するかどうかを指定できます。

• イベントが 0 を返す場合、フェイルオーバをサポートする場合は、フェイルオーバが発生して正常に終了するまで現行コマンドの実行を続行し、アプリケーションも続行します。フェイルオーバをサポートしない場合、アプリケーションは現行コマンドについてのエラーを受け取ります。

Page 238: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Deactivate

228 PowerBuilder

• イベントがそのほかの値を返す場合、現行コマンドの実行がただちに停止し、トランザクション オブジェクトのプロパティSQLCode に -1、SQLDBCode に戻り値、SQLErrText に dbmessage文字列の値をそれぞれ設定し、フェイルオーバは発生しません。イベントの終了後、現行トランザクションで Disconnect のみを呼び出すことができます。

DBNotification イベント スクリプト内では、トランザクション オブジェクトの現行接続が保護され、その接続を使用するデータベース操作は許可されません。すべてのデータベース コマンドが失敗として返ります。ただし、アプリケーションは、別のトランザクション オブジェクトを使用してデータベースにアクセスできます。

SvrFailover データベース パラメータに Yes を設定すると、notification引数に DBFailover! が設定された DBNotification イベントが呼び出されます。このイベントは、フェイルオーバの最初と最後など、フェイルオーバ中に何度でも起動することができます。フェイルオーバの発生時に通知を受けるために、Oracle RAC データベースに接続したり、HANotification データベース パラメータを設定したりする必要はありません。

Deactivate機能 ウィンドウがアクティブでなくなるときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ウィンドウが閉じられると、Deactivate イベントが発生します。

関連項目 ActivateShow

イベント ID オブジェクト

pbm_deactivate ウィンドウ

Page 239: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 229

DeleteAllItems機能 リストビューの項目がすべて削除されるときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、DeleteAllItems イベントで、リストビュー コントロールにデフォルト項目を追加し、項目がすべてなくならないようにしています。

This.AddItem("Default item", 1)

関連項目 DeleteItemInsertItem

DeleteItemDeleteItem イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リストビュー コントロールに対して

機能 項目が削除されるときに発生します。

イベント ID

イベント ID オブジェクト

pbm_lvndeleteallitems リストビュー

オブジェクト 構文

リストビュー コントロール 構文 1

ツリービュー コントロール 構文 2

イベント ID オブジェクト

pbm_lvndeleteitem リストビュー

Page 240: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DeleteItem

230 PowerBuilder

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 DeleteItem イベントの次の例は、削除された項目の項目番号をメッセージに表示します。

MessageBox("メッセージ ", "項目 " + String(index) &+ "は削除されました。")

関連項目 DeleteAllItemsInsertItem

構文 2 ツリービュー コントロールに対して

機能 項目が削除されるときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、削除された項目の名前をメッセージ内に表示します。

TreeViewItem ll_tvi

This.GetItem(handle, ll_tvi)MessageBox("メッセージ ", String(ll_tvi.Label) &

+ "は削除されました。")

引数 説明

index Integer 型。値によって渡されます(削除されたリストビュー項目のインデックス)。

イベント ID オブジェクト

pbm_tvndeleteitem ツリービュー

引数 説明

handle Long 型。値によって渡されます(削除されたツリービュー項目のハンドル)。

Page 241: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 231

Destructor機能 ユーザ オブジェクトやコントロールが破棄されるとき、ウィンドウの

Close イベントの直後に発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ウィンドウが閉じられると、各コントロールの Destructor イベントでコントロールが破棄され、メモリから除去されます。破棄されたコントロールは、ほかのスクリプトで参照できなくなります。参照しようとすると実行時エラーが発生します。

関連項目 ConstructorClose

DisconnectMobiLink機能 MobiLink 同期サーバが統合データベース サーバとの接続を切断した

ときに発生します。

イベント ID

引数 なし

戻り値 なし

解説 このイベントを使用して、リモート データベースが MobiLink 同期サーバとの接続を切断した直後にカスタム アクションを追加します。

アプリケーションが MobiLink 同期サーバとの接続を形成または再形成するときに、MobiLink 同期サーバが、その同期中にデータベースサーバとの接続を一時的に 1 つ割り当てます。

イベント ID オブジェクト

pbm_destructor すべてのオブジェクト

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

Page 242: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DisplayMessage

232 PowerBuilder

次の同期オブジェクトのイベントは、記述順に、同期サーバで発生するイベントに対応します。同期オブジェクト イベントは、BeginSync、ConnectMobiLink、BeginUpload、EndUpload、BeginDownload、DisconnectMobiLink、EndSync です。

関連項目 ConnectMobiLinkEndDownloadEndSyncEndUpload

DisplayMessage機能 MobiLink 同期からの情報メッセージが表示されるときに発生します。

イベント ID

引数

戻り値 なし

解説 同期サーバからさまざまな種類のメッセージが送信されたときに、次のイベントが起動されます。そのイベントは、DisplayMessage、ErrorMessage、FileMessage、WarningMessage です。

関連項目 ErrorMessageFileMessageWarningMessage

DoubleClickedDoubleClicked イベントは、オブジェクトによって引数の内容が異なります。

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

infomsg 読み取り専用文字列。同期サーバから返された情報メッセージのテキストを含みます。

Page 243: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 233

データウィンドウ コントロールの DoubleClicked イベントについては、『データウィンドウ リファレンス』マニュアルまたはオンライン ヘルプを参照してください。

構文 1 リストボックス、ピクチャ リストボックス、リストビュー、タブ コントロールに対して

機能 ユーザがコントロールをダブルクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 リストビュー コントロールには、DoubleClicked イベントのかわりにItemActivate イベントを使用できます(OneClickActivate プロパティをfalse に設定)。

リストボックスとピクチャ リストボックスでは、項目をダブルクリックすると、SelectionChanged イベントも起動されます。

例 次の例は、DoubleClicked イベントを使用して、ダブルクリックされたリストビュー項目が編集できるようにします。

オブジェクト 構文

リストボックス、ピクチャ リストボックス、リストビュー、タブ コントロール

構文 1

ツリービュー コントロール 構文 2

ウィンドウ 構文 3

ほかのコントロール 構文 4

イベント ID オブジェクト

pbm_lbndblclk リストボックス、ピクチャ リストボックス

pbm_lvndoubleclicked リストビュー

pbm_tcndoubleclicked タブ

引数 説明

index Integer 型。値によって渡されます。ユーザがダブルクリックしたリストビュー項目のインデックス(タブ コントロールの場合は、タブ ページのインデックス)。

Page 244: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DoubleClicked

234 PowerBuilder

This.EditLabels = TRUE

関連項目 ClickedColumnClickItemActivateItemChangedItemChangingRightClickedRightDoubleClickedSelectionChangedSelectionChanging

構文 2 ツリービュー コントロールに対して

機能 ユーザがコントロールをダブルクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、ツリービュー項目をダブルクリックすると編集が開始できるようにします。

TreeViewItem ltvi_currentltvi_current = tv_1.FindItem(CurrentTreeItem!, 0)This.EditLabel(ltvi_current)

関連項目 ClickedRightClickedRightDoubleClickedSelectionChangedSelectionChanging

イベント ID オブジェクト

pbm_tvndoubleclicked ツリービュー

引数 説明

handle Long 型。値によって渡されます(ユーザがダブルクリックしたツリービュー項目のハンドル)。

Page 245: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 235

構文 3 ウィンドウに対して

機能 ユーザがウィンドウ上の未使用領域(表示可能で使用可能なコントロールの配置されていないエリア)をダブルクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 引数 xpos と ypos は、関数 PointerX と PointerY をウィンドウに対して呼び出したときに返す値と同一の値を提供します。

関連項目 ClickedMouseDownMouseMoveMouseUpRButtonDown

イベント ID オブジェクト

pbm_lbuttondblclk ウィンドウ

引数 説明

flags UnsignedLong 型。値によって渡されます(押下されたマウス ボタンと修飾キーの値の合計)。

値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 -〔Shift〕

• 8 -〔Ctrl〕

• 16 - 中マウス ボタン

Clicked イベントで左マウス ボタンが押されない場合、flags の値に 1 は加算されません。

flags の詳細については、288 ページの「MouseMove」イベントの構文 2 を参照してください。

xpos Integer 型。値によって渡されます(ウィンドウの左辺からポインタまでの距離で、ピクセル単位の値)。

ypos Integer 型。値によって渡されます(ウィンドウの上辺からポインタまでの距離で、ピクセル単位の値)。

Page 246: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DragDrop

236 PowerBuilder

構文 4 ほかのコントロールに対して

機能 ユーザがコントロールをダブルクリックするときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ドロップダウン リストボックスに対する DoubleClicked イベントは、[リストを表示]プロパティがオンになっているときのみアクティブになります。

関連項目 ClickedRButtonDown

DragDropDragDrop イベントは、オブジェクトによって引数の内容が異なります。

データウィンドウ コントロールの DragDrop イベントについては、『データウィンドウ リファレンス』マニュアルまたはオンライン ヘルプを参照してください。

イベント ID オブジェクト

pbm_bndoubleclicked グラフ、OLE、ピクチャ、ピクチャ ハイパーリンク、スタティック テキスト、スタティック ハイパーリンク

pbm_cbndblclk ドロップダウン リストボックス、ドロップダウン ピクチャ リストボックス

pbm_lbuttondblclk 日付ピッカー、月表示カレンダ

pbm_prndoubleclicked 水平プログレスバー、垂直プログレスバー

pbm_rendoubleclicked リッチテキスト エディット

オブジェクト 構文

リストボックス、ピクチャ リストボックス、リストビュー、タブ コントロール

構文 1

ツリービュー コントロール 構文 2

ウィンドウやほかのコントロール 構文 3

Page 247: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 237

構文 1 リストボックス、ピクチャ リストボックス、リストビュー、タブ コントロールに対して

機能 ユーザがオブジェクトをコントロールの上にドラッグして、その上でマウス ボタンを放すときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ドラッグ関連のイベントにおいて、DraggedObject 関数を呼び出す必要がなくなりました。ドラッグされているオブジェクトを参照するには、引数 source を使用してください。

例 リストビュー コントロールについては、BeginDrag イベントの例を参照してください。

次の例は、ドラッグされたリストビュー項目を挿入して整列します。

This.AddItem(ilvi_dragged_object)This.Arrange()

関連項目 BeginDragBeginRightDragDragEnterDragLeaveDragWithin

構文 2 ツリービュー コントロールに対して

機能 ユーザがオブジェクトをコントロールの上にドラッグして、その上でマウス ボタンを放すときに発生します。

イベント ID オブジェクト

pbm_lbndragdrop リストボックス、ピクチャ リストボックス

pbm_lvndragdrop リストビュー

pbm_tcndragdrop タブ

引数 説明

source DragObject 型。値によって渡されます(ドラッグされているコントロールへの参照)。

index Integer 型。値によって渡されます(ターゲットとなるリストビュー項目のインデックス)。

Page 248: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DragDrop

238 PowerBuilder

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ドラッグ関連のイベントにおいて、DraggedObject 関数を呼び出す必要がなくなりました。ドラッグされているオブジェクトを参照するには、引数 source を使用してください。

例 次の例は、ドラッグされたオブジェクトを、ドロップしたツリービュー項目に子として挿入します。

TreeViewItem ltv_1This.GetItem(handle, ltv_1)This.SetDropHighlight(handle)This.InsertItemFirst(handle, itvi_drag_object)This.ExpandItem(handle)This.SetRedraw(TRUE)

関連項目 DragEnterDragLeaveDragWithin

構文 3 ウィンドウとほかのコントロールに対して

機能 ユーザがオブジェクトをコントロールの上にドラッグして、その上でマウス ボタンを放すときに発生します。

イベント ID

イベント ID オブジェクト

pbm_tvndragdrop ツリービュー

引数 説明

source DragObject 型。値によって渡されます(ドラッグされているコントロールへの参照)。

handle Long 型。値によって渡されます(ターゲットとなるツリービュー項目へのハンドル)。

イベント ID オブジェクト

pbm_bndragdrop チェックボックス、コマンドボタン、グラフ、インクエディット、インクピクチャ、ピクチャ、ピクチャ ハイパーリンク、ピクチャボタン、ラジオボタン

Page 249: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 239

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 コントロールの DragAuto プロパティが true の場合、ユーザがマウス ボタンを押すとドラッグ操作が開始されます。

関数仕様の変更 ドラッグ関連のイベントにおいて、DraggedObject 関数を呼び出す必要がなくなりました。ドラッグされているオブジェクトを参照するには、引数 source を使用してください。

例 例 1 次の例は、DoubleClicked イベントのコードによって、データウィンドウ dw_orddetail のドラッグ操作を開始します。

IF dw_orddetail.GetRow() > 0 THENdw_orddetail.Drag(Begin!)This.DragIcon = "dragitem.ico"

END IF

次に、ごみ箱のピクチャ コントロールの DragDrop イベントの次のコードによって、ユーザがデータウィンドウ コントロールでクリックしてドラッグしたデータ行を削除します。

long ll_currowdwitemstatus ldwis_delrow

pbm_cbndragdrop ドロップダウン リストボックス、ドロップダウンピクチャ リストボックス

pbm_dragdrop 日付ピッカー、月表示カレンダ

pbm_endragdrop シングルライン エディット、エディットマスク、マルチライン エディット、スタティック テキスト、スタティック ハイパーリンク

pbm_omndragdrop OLE

pbm_prndragdrop 水平プログレスバー、垂直プログレスバー

pbm_rendragdrop リッチテキスト エディット

pbm_sbndragdrop 水平スクロールバー、水平トラックバー、垂直スクロールバー、垂直トラックバー

pbm_uondragdrop ユーザ オブジェクト

pbm_dragdrop ウィンドウ

イベント ID オブジェクト

引数 説明

source DragObject 型。値によって渡されます(ドラッグされているコントロールへの参照)。

Page 250: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DragDrop

240 PowerBuilder

ll_currow = dw_orddetail.GetRow( )

// 後で使用するために、データ行のステータス フラグを保持します。ldwis_delrow = dw_orddetail.GetItemStatus &

(ll_currow, 0, Primary!)

// dw_orddetail から現行のデータ行を削除します。dw_orddetail.DeleteRow(0)

例 2 ごみ箱のピクチャ コントロールの DragDrop イベントの次のコードは、ドラッグしているオブジェクトがデータウィンドウ コントロールかどうかを調べます。その場合、ユーザにそのデータウィンドウの現行のデータ行を削除するかどうか問い合わせます。

DataWindow ldw_SourceLong ll_RowToDeleteInteger li_Choice

IF source.TypeOf() = DataWindow! THEN

ldw_Source = sourcell_RowToDelete = ldw_Source.GetRow()

IF ll_RowToDelete > 0 THENli_Choice = MessageBox("削除 ", &"この行を削除しますか ?", Question!, YesNo!, 2)IF li_Choice = 1 THENldw_Source.DeleteRow(ll_RowToDelete)END IF

ELSEBeep(1)

END IF

ELSEBeep(1)

END IF

関連項目 DragEnterDragLeaveDragWithin

Page 251: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 241

DragEnter機能 ユーザがドラッグしているオブジェクトがコントロール内に入るとき

に発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ドラッグ関連のイベントにおいて、DraggedObject 関数を呼び出す必要がなくなりました。ドラッグされているオブジェクトを参照するには、引数 source を使用してください。

イベント ID オブジェクト

pbm_bndragenter チェックボックス、コマンドボタン、グラフ、インクエディット、インクピクチャ、ピクチャ、ピクチャハイパーリンク、ピクチャボタン、ラジオボタン

pbm_cbndragenter ドロップダウン リストボックス、ドロップダウン ピクチャ リストボックス

pbm_dragenter 日付ピッカー、月表示カレンダ

pbm_dwndragenter データウィンドウ

pbm_endragenter シングルライン エディット、エディットマスク、マルチライン エディット、スタティック テキスト、スタティック ハイパーリンク

pbm_lbndragenter リストボックス、ピクチャ リストボックス

pbm_lvndragenter リストビュー

pbm_omndragenter OLE

pbm_prndragenter 水平プログレスバー、垂直プログレスバー

pbm_rendragenter リッチテキスト エディット

pbm_sbndragenter 水平スクロールバー、水平トラックバー、垂直スクロールバー、垂直トラックバー

pbm_tcndragenter タブ

pbm_tvndragenter ツリービュー

pbm_uondragenter ユーザ オブジェクト

pbm_dragenter ウィンドウ

引数 説明

source DragObject 型。値によって渡されます(ドラッグされているコントロールへの参照)。

Page 252: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DragLeave

242 PowerBuilder

例 次の例は、ピクチャ コントロールの DragDrop イベントのスクリプトです。ドラッグされているオブジェクトがピクチャ コントロールの場合に、ドロップ側のピクチャ コントロールに枠線を表示します。

IF source.TypeOf() = Picture! THENThis.Border = TRUE

END IF

関連項目 DragDropDragLeaveDragWithin

DragLeave機能 ユーザがドラッグしているオブジェクトがコントロールを離れるとき

に発生します。

イベント ID

イベント ID オブジェクト

pbm_bndragleave チェックボックス、コマンドボタン、グラフ、インクエディット、インクピクチャ、ピクチャ、ピクチャハイパーリンク、ピクチャボタン、ラジオボタン

pbm_cbndragleave ドロップダウン リストボックス、ドロップダウン ピクチャ リストボックス

pbm_dragleave 日付ピッカー、月表示カレンダ

pbm_dwndragleave データウィンドウ

pbm_endragleave シングルライン エディット、エディットマスク、マルチライン エディット、スタティック テキスト、スタティック ハイパーリンク

pbm_lbndragleave リストボックス、ピクチャ リストボックス

pbm_lvndragleave リストビュー

pbm_omndragleave OLE

pbm_prndragleave 水平プログレスバー、垂直プログレスバー

pbm_rendragleave リッチテキスト エディット

pbm_sbndragleave 水平スクロールバー、水平トラックバー、垂直スクロールバー、垂直トラックバー

pbm_tcndragleave タブ

pbm_tvndragleave ツリービュー

pbm_uondragleave ユーザ オブジェクト

pbm_dragleave ウィンドウ

Page 253: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 243

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ドラッグ関連のイベントにおいて、DraggedObject 関数を呼び出す必要がなくなりました。ドラッグされているオブジェクトを参照するには、引数 source を使用してください。

例 次の例は、ドラッグされているコントロールの名前をチェックし、それが cb_1 の場合はドラッグ操作を中止します。

IF ClassName(source) = "cb_1" THENcb_1.Drag(Cancel!)

END If

次の例は、ピクチャ コントロールの DragDrop イベントのスクリプトです。ドラッグされているオブジェクトがピクチャ コントロールの場合に、ドロップ側のピクチャ コントロールの境界の外側に出たら、その枠線を非表示にします。

IF source.TypeOf() = Picture! THENThis.Border = TRUE

END IF

関連項目 DragDropDragEnterDragWithin

DragWithinDragWithin イベントは、オブジェクトによって引数の内容が異なります。

引数 説明

source DragObject 型。値によって渡されます(ドラッグされているコントロールへの参照)。

オブジェクト 構文

リストボックス、ピクチャ リストボックス、リストビュー、タブ コントロール

構文 1

ツリービュー コントロール 構文 2

ウィンドウやほかのコントロール 構文 3

Page 254: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DragWithin

244 PowerBuilder

データウィンドウ コントロールの DragWithin イベントについては、『データウィンドウ リファレンス』マニュアルまたはオンライン ヘルプを参照してください。

構文 1 リストボックス、ピクチャ リストボックス、リストビュー、タブ コントロールに対して

機能 ユーザがコントロール内でオブジェクトをドラッグしているときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ドラッグ関連のイベントにおいて、DraggedObject 関数を呼び出す必要がなくなりました。ドラッグされているオブジェクトを参照するには、引数 source を使用してください。

例 次の例は、ドラッグされているオブジェクトがリストビューの境界内に入ると、リストビューの背景色を変更します。

This.BackColor = RGB(128, 0, 128)

関連項目 DragDropDragEnterDragLeave

イベント ID オブジェクト

pbm_lbndragwithin リストボックス、ピクチャ リストボックス

pbm_lvndragwithin リストビュー

pbm_tcndragwithin タブ

引数 説明

source DragObject 型。値によって渡されます(ドラッグされているコントロールへの参照)。

index Integer 型。値によって渡されます(ポインタが位置している、リストビュー コントロールのリストビュー項目への参照)。

Page 255: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 245

構文 2 ツリービュー コントロールに対して

機能 ユーザがコントロール内でオブジェクトをドラッグしているときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ドラッグ関連のイベントにおいて、DraggedObject 関数を呼び出す必要がなくなりました。ドラッグされているオブジェクトを参照するには、引数 source を使用してください。

例 次の例は、ドラッグされているオブジェクトがツリービューの境界内に入ると、ツリービューの背景色を変更します。

This.BackColor = RGB(128, 0, 128)

関連項目 DragDropDragEnterDragLeave

構文 3 ウィンドウとほかのコントロールに対して

機能 ユーザがコントロール内でオブジェクトをドラッグしているときに発生します。

イベント ID

イベント ID オブジェクト

pbm_tvndragwithin ツリービュー

引数 説明

source DragObject 型。値によって渡されます(ドラッグされているコントロールへの参照)。

handle Long 型(ポインタが位置している、ツリービュー コントロールのツリービュー項目への参照)。

イベント ID オブジェクト

pbm_bndragwithin チェックボックス、コマンドボタン、グラフ、インクエディット、インクピクチャ、ピクチャ、ピクチャ ハイパーリンク、ピクチャボタン、ラジオボタン

Page 256: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

DropDown

246 PowerBuilder

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ドラッグ関連のイベントにおいて、DraggedObject 関数を呼び出す必要がなくなりました。ドラッグされているオブジェクトを参照するには、引数 source を使用してください。

関連項目 DragDropDragEnterDragLeave

DropDown機能 ユーザがドロップダウン カレンダを表示する直前に、日付ピッカー コ

ントロール内のドロップダウン矢印をクリックしたときに発生します。

pbm_cbndragwithin ドロップダウン リストボックス、ドロップダウンピクチャ リストボックス

pbm_dragwithin 日付ピッカー、月表示カレンダ

pbm_endragwithin シングルライン エディット、エディットマスク、マルチライン エディット、スタティック テキスト、スタティック ハイパーリンク

pbm_omndragwithin OLE

pbm_prndragwithin 水平プログレスバー、垂直プログレスバー

pbm_rendragwithin リッチテキスト エディット

pbm_sbndragwithin 水平スクロールバー、水平トラックバー、垂直スクロールバー、垂直トラックバー

pbm_uondragwithin ユーザ オブジェクト

pbm_dragwithin ウィンドウ

イベント ID オブジェクト

引数 説明

source DragObject 型。値によって渡されます(ドラッグされているコントロールへの参照)。

Page 257: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 247

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

EndDownload機能 ダウンロード プロシージャの最後に発生します。

イベント ID

引数

戻り値 なし

解説 このイベントを使用して、同期のダウンロードの最終段階にカスタムアクションを追加します。

BeginDownload イベントは、ダウンロード トランザクションの開始を示します。すべてのリモート テーブルについて削除が適切に行われ、ダウンロード カーソル内のすべてのリモート テーブルについて行が適切に追加されます。EndDownload の後に、ダウンロードの変更がコミットされます。

関連項目 BeginDownloadConnectMobiLinkEndSyncEndUpload

イベント ID オブジェクト

pbm_dtpdropdown 日付ピッカー

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

upsertrows Long 型。挿入および更新された行を識別します。

deleterows Long 型。削除された行を識別します。

Page 258: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

EndLabelEdit

248 PowerBuilder

EndLabelEditEndLabelEdit イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リストビュー コントロールに対して

機能 ユーザが項目ラベルの編集を終えるときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 新しいテキストを項目ラベルにします。1 新しいテキストを項目ラベルにしません。

解説 ユーザがテキストを編集した後で〔Enter〕か〔Tab〕を押すと、このイベントが起動されます。

例 次の例は、古いラベルと新しいラベルをシングルライン エディット上に表示します。

ListViewItem lvisle_info.text = "編集終了 " &

+ String(lvi.label) &+". Item changed to "+ String(newlabel)

関連項目 BeginLabelEdit

オブジェクト 構文

リストビュー コントロール 構文 1

ツリービュー コントロール 構文 2

イベント ID オブジェクト

pbm_lvnendlabeledit リストビュー

引数 説明

index Integer 型。ラベルを編集しているリストビュー項目のインデックスです。

newlabel String 型。リストビュー項目の新しいラベルを表わす文字列です。

Page 259: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 249

構文 2 ツリービュー コントロールに対して

機能 ユーザが項目ラベルの編集を終えるときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 新しいテキストを項目ラベルにします。1 新しいテキストを項目ラベルにしません。

解説 ユーザがテキストを編集した後で〔Enter〕か〔Tab〕を押すと、このイベントが起動されます。

例 次の例は、古いラベルと新しいラベルをシングルライン エディット上に表示します。

TreeViewItem tvi

This.GetItem(handle, tvi)sle_info.Text = "編集終了 " &

+ String(tvi.Label) &+ ". Item changed to " &+ String(newtext)

関連項目 BeginLabelEdit

イベント ID オブジェクト

pbm_tvnendlabeledit ツリービュー

引数 説明

handle Integer 型。ラベルを編集しているツリービュー項目のインデックスです。

newtext String 型。ツリービュー項目の新しいラベルを表わす文字列です。

Page 260: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

EndLogScan

250 PowerBuilder

EndLogScan機能 アップロードのためのトランザクション ログのスキャンが完了した

後に発生します。

イベント ID

引数 なし

戻り値 なし

解説 このイベントを使用して、アップロードのためにトランザクション ログがスキャンされた直後にカスタム アクションを追加します。

同期開始前のアップロード ストリームの準備中に、BeginLogScan、ProgressInfo、および EndLogScan イベントが呼び出されます。

関連項目 BeginLogScanProgressIndex

EndSync機能 同期の最後に発生します。

イベント ID

引数

戻り値 なし

解説 このイベントを使用して、同期の完了時にカスタム アクションを追加します。

イベント ID オブジェクト

なし MLSync

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

rc Long データ型の値。同期エラーが発生したかどうかを示します。

restart Boolean 型。参照によって渡される値。true の場合、dbmlsync が同期を再開します。

Page 261: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 251

rc の値が 0 の場合、同期が成功したことを示します。rc の値が 0 以外の場合、エラーが発生しています。restart の値を true に変更すると、dbmlsync が同期を再開します。

関連項目 BeginSyncDisconnectMobiLinkEndDownloadEndUpload

EndUpload機能 アップロードを同期サーバに送信した後に発生します。

イベント ID

引数 なし

戻り値 なし

解説 このイベントを使用して、アップロード ストリームを dbmlsync からMobiLink 同期サーバに送信した直後にカスタム アクションを追加します。

BeginUpload イベントは、アップロード トランザクションの開始を示します。すべてのリモート テーブルについて、統合データベースへの挿入および更新が適切に行われ、行も適切に削除されます。EndUploadの後に、アップロードの変更がコミットされます。

関連項目 BeginUploadDisconnectMobiLinkEndDownloadEndSync

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

Page 262: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Error

252 PowerBuilder

Error機能 外部オブジェクトやデータウィンドウ オブジェクトでデータ式やプ

ロパティ式にエラーが見つかると発生します。また、EAServer に接続しているクライアントで通信エラーが起こっても発生します。

PowerBuilder におけるエラー処理機能の改善

Error イベントは下位互換性のために保持されています。Error イベントのスクリプトを記述したり action 引数を変更したりしない場合、このイベントの情報は、DWRuntimeError や OLERuntimeError などのRuntimeError オブジェクトに渡されます。これらのエラーは try-catchブロックで処理できます。

イベント ID

引数

イベント ID オブジェクト

なし 接続、データウィンドウ、データストア、JaguarORB、OLE、OLEObject、OLETxnObject

引数 説明

errornumber Unsigned integer 型。値によって渡されます(PowerBuilder のエラー番号)。

errortext String 型。読み取り専用です(PowerBuilder のエラーメッセージ)。

errorwindowmenu String 型。読み取り専用です(スクリプトでエラーが発生したオブジェクトの親に相当するウィンドウまたはメニューのオブジェクト名)。

errorobject String 型。読み取り専用です(スクリプトでエラーが発生したオブジェクトの名前)。

errorscript String 型。読み取り専用です(エラーが発生したスクリプトの全テキスト)。

errorline Unsigned integer 型。値によって渡されます(エラーが発生したスクリプトの行番号)。

Page 263: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 253

戻り値 なし(RETURN 文を使用しないでください)

解説 データウィンドウと OLE オブジェクトは動的に参照されます。これらのオブジェクトのデータやプロパティを参照するドット(.)表記を用いた式は、実行時の状況によっては有効かもしれませんが、無効な場合もあります。Error イベントでは、このような動的な状況に対応できるように、エラー復旧ロジックを記述することができます。

また、Error イベントで、分散アプリケーションのクライアント コンポーネントの通信エラーに対応することができます。カスタム接続オブジェクトの Error イベントにおいて、クライアントとサーバ間の通信中にエラーが発生したときに、どのようなアクションをとるか指示することができます。

action ExceptionAction 型。参照によって渡されます。

エラー発生後のアプリケーションのアクションを指定する値です。値は以下のとおりです。

• ExceptionFail! - このスクリプトが実装されてなかったものとして失敗させます。エラー状態が、アクティブなイベント ハンドラを起動します。ない場合は、SystemError イベントを起動します。

• ExceptionIgnore! - このエラーを無視して、何もエラーが起こらなかったものとして戻ります(エラーの原因となった状態が別のエラーを起こす可能性があるので、このオプションは注意して使用しなければなりません)。

• ExceptionRetry! - OLE サーバの準備ができてなかった場合、関数を再実行したり、式を再評価したりします。このオプションはデータウィンドウでは無効です。

• ExceptionSubstituteReturnValue! - OLE サーバやデータウィンドウで返される値のかわりに、引数returnvalue で指定された値を使用して、エラー状態を取り消します。

returnvalue Any 型。参照によって渡されます(データ型は、OLEサーバやデータウィンドウが返すはずだった値のデータ型になります)。

この値は、引数 action の値が ExceptionSubstituteReturnValue! のときに使用されます。

引数 説明

Page 264: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Error

254 PowerBuilder

エラーがアプリケーションにとって重大でない場合は、Error イベントでデフォルト値を代用する値を指定できます。Error イベントの引数は、デバッグに役立つ情報も提供します。たとえば、データウィンドウのデータ式のように実行時に評価される式は、コンパイラでチェックできませんが、Error イベント引数を使ってデバッグすることができます。

戻り値をいつ代用するか

ExceptionSubstituteReturnValue! アクションは、式の最後の部分でエラーが起こったときに、デフォルトの戻り値を別の値で代用できます。式の途中でエラーが起きたときは、ExceptionSubstituteReturnValue! を使用して戻り値を代用しないでください。代用された戻り値が、未解決のオブジェクト参照のデータ型と一致しないと、システム エラーが起こります。

ExceptionSubstituteReturnValue! アクションは、データ式のエラー処理に役立ちます。

データウィンドウの場合、データ式やプロパティ式を評価しているときにエラーが起こると、エラーは以下のように処理されます。

1 Error イベントが発生します。

2 Error イベントにスクリプトが記述されていなかったり、その action引数に ExceptionFail! が設定されていたりすると、DWRuntimeErrorまたはその RuntimeError 祖先のアクティブな例外ハンドラが起動します。

3 例外ハンドラがないか、既存の例外ハンドラがその例外を処理しない場合、SystemError イベントが発生します。

4 SystemError イベントにスクリプトが記述されていない場合は、アプリケーション エラーが発生して、アプリケーションは中断されます。

分散アプリケーションのクライアント コンポーネントでのエラーも、データウィンドウのエラーと同じ処理が行われます。

OLE コントロールでのエラー処理についての詳細は、ExternalExceptionイベントを参照してください。データウィンドウ オブジェクトのデータ式とプロパティ式についての詳細は、『データウィンドウ リファレンス』マニュアルまたはオンライン ヘルプを参照してください。

多層アプリケーションでの通信エラーの処理については、『アプリケーション テクニック』マニュアルの分散アプリケーションの説明を参照してください。

Page 265: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 255

例 次の例は、発生したエラーに関する情報を表示し、スクリプトの実行を継続します。

MessageBox("エラー番号 " + string(errornumber)&+ "が発生しました ", "Errortext:" + String(errortext))

action = ExceptionIgnore!

関連項目 『データウィンドウ リファレンス』マニュアルまたはオンライン ヘルプの DBErrorExternalExceptionSystemError

ErrorMessage機能 MobiLink 同期のエラーメッセージが表示されるときに発生します。

イベント ID

引数

戻り値 なし

解説 このイベントを使用して、dbmlsync によって記録されたエラー情報を受け取ります。

同期サーバによってさまざまな種類のメッセージが送信されたときに、次のイベントが起動されます。そのイベントは DisplayMessage、ErrorMessage、FileMessage、WarningMessage です。

関連項目 DisplayMessageFileMessageWarningMessage

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

errmsg 読み取り専用文字列。同期サーバから返されたエラー メッセージのテキストを含みます。

Page 266: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ExternalException

256 PowerBuilder

ExternalException機能 OLE オートメーションのコマンドが、OLE サーバ上で例外を引き起こ

したときに発生します。

PowerBuilder におけるエラー処理機能の改善

ExternalException イベントは下位互換性のために保持されています。このイベントのスクリプトを記述したり action 引数を変更したりしない場合、このイベントの情報は、OLERuntimeError などの RuntimeErrorオブジェクトに渡されます。これらのエラーは try-catch ブロックで処理できます。

イベント ID

引数

イベント ID オブジェクト

なし OLE、OLEObject、OLETxnObject

引数 説明

resultcode UnsignedLong 型。値によって渡されます(サーバで起こった例外を示す PowerBuilder の番号)。

exceptioncode UnsignedLong 型。値によって渡されます(サーバで起こった例外を示す番号です。この番号の意味については、サーバのドキュメントを参照してください)。

source String 型。値によって渡されます(サーバによって提供されるサーバ名)。

description String 型。値によって渡されます(サーバによって提供される例外の説明)。

helpfile String 型。値によって渡されます(サーバによって提供される例外に関する情報を提供するヘルプ ファイルの名前)。

helpcontext UnsignedLong 型。値によって渡されます(サーバによって提供される例外に関する情報を提供する helpfile のヘルプトピックのコンテキスト ID)。

Page 267: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 257

戻り値 なし(RETURN 文を使用しないでください)

解説 OLE オブジェクトは動的に参照されます。これらのオブジェクトのデータやプロパティを参照する式は、実行時の状況によっては有効かもしれませんが、状況によっては無効かもしれません。式がサーバ上で例外を起こしたときは、ExternalException イベントが起動されます。ExternalException イベントを使って、OLE サーバ上で起こったエラーに関する情報を取得できます。

サーバが何を例外として考慮するかは、サーバによって定義されます。データ型の不一致のように、エラーによっては、Error イベントを起動しますが、例外は起こしません。場合によっては、例外は起こすもののエラーとは言えないものもあります。サーバのマニュアルを参照して例外の原因を判別してください。

OLE サーバへの呼び出しによって例外が起こると、以下のように例外が処理されます。

1 ExternalException イベントが発生します。

2 ExternalException イベントにスクリプトが記述されていなかったり、その action 引数に ExceptionFail! が設定されていたりすると、Error イベントが発生します。

action ExceptionAction 型。参照によって渡されます。

エラー発生後のアプリケーションのアクションを指定する値です。値は以下のとおりです。

• ExceptionFail! - このスクリプトが実装されてなかったものとして失敗させます。エラー状態が SystemError イベントを起動します。

• ExceptionIgnore! - このエラーを無視して、何もエラーが起こらなかったものとして戻ります(エラーの原因となった状態が別のエラーを起こす可能性があるので、このオプションは注意して使用しなければなりません)。

• ExceptionRetry! - OLE サーバの準備ができてなかった場合、関数を再実行したり、式を再評価したりします。

• ExceptionSubstituteReturnValue! - OLE サーバやデータウィンドウで返される値のかわりに、引数 returnvalue で指定された値を使用して、エラー状態を取り消します。

returnvalue Any 型。参照によって渡されます。

データ型は、OLE サーバやデータウィンドウが返すはずだった値のデータ型になります。この値は、引数 action の値が ExceptionSubstituteReturnValue! のときに使用されます。

引数 説明

Page 268: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ExternalException

258 PowerBuilder

3 Error イベントにスクリプトが記述されていなかったり、その action引数に ExceptionFail! が設定されていたりすると、OLERuntimeErrorまたはその RuntimeError 祖先のアクティブな例外ハンドラが起動します。

4 例外ハンドラがないか、既存の例外ハンドラがその例外を処理しない場合、SystemError イベントが発生します。

5 SystemError イベントにスクリプトが記述されていない場合は、アプリケーション エラーが発生して、アプリケーションは中断されます。

例 ウィンドウにインスタンス変数が 2 つあるものとします。1 つは例外アクションの指定に、もう 1 つは Any 型で、代用する値の格納に用います。OLE プロパティにアクセスする前に、スクリプトによってインスタンス変数に適切な値を設定します。

ie_action = ExceptionSubstituteReturnValue!ia_substitute = 0li_currentsetting = ole_1.Object.Value

コマンドが失敗すると、ExternalException イベントのスクリプトが、OLE サーバの指定するヘルプ トピックを表示します(指定されている場合)。また、戻り値に別の値を代用して返し、制御を呼び出し元のスクリプトに戻します。代用値の li_currentsetting への代入は、これらのデータ型に互換性があることから、適切に行われます。

string ls_context

// WinHelp とコンテキスト ID のコマンド ラインを作ります。ls_context = "-n " + String(helpcontext)If Len(HelpFile) > 0 THEN

Run("winhelp.exe " + ls_context + " " + helpfile)END IF

action = ie_action returnvalue = ia_substitute

このイベント スクリプトは OLE コントロールのあらゆるオートメーションに対して使用されるので、各オートメーション コマンドの実行前にインスタンス変数に適切な値を設定する必要があります。

関連項目 Error

Page 269: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 259

FileExists機能 リッチテキスト エディット コントロールの内容をファイルに保存し

ようとしたときに、そのファイルがすでに存在するときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。1 ファイルの保存をキャンセルします。

解説 SaveDocument 関数 SaveDocument_func が FileExists イベントを起動することがあります。

例 次の FileExists イベント スクリプトは、ユーザが保存処理を行っている(開かれたファイルを自動的に上書きしている)のか、または、[名前を付けて保存]メニュー項目を使用してファイル名を変更して保存するのかを調べるため、フラグを確認します。[名前を付けて保存]メニュー項目で保存する場合は、ユーザにファイルの上書きを確認します。

integer li_answer

// ユーザが同じファイルに保存するよう指定した場合は、// 上書きに対するプロンプトを表示しません。IF ib_saveas = FALSE THEN RETURN 0

li_answer = MessageBox("ファイルが存在します ", &filename + "がすでに存在します。上書きしますか ?", &

Exclamation!, YesNo!)MessageBox("ファイル名の引数 ", filename)

// ゼロ以外の値を返すと保存処理を中止します。IF li_answer = 2 THEN RETURN 1

イベント ID オブジェクト

pbm_renfileexists リッチテキスト エディット

引数 説明

filename ファイル名を指定します。

Page 270: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

FileMessage

260 PowerBuilder

FileMessage機能 MobiLink 同期の詳細な情報メッセージが表示されるときに発生しま

す。

イベント ID

引数

戻り値 なし

解説 このイベントを使用して、dbmlsync によって記録された情報を受け取ります。

同期サーバによってさまざまな種類のメッセージが送信されたときに、次のイベントが起動されます。そのイベントは DisplayMessage、ErrorMessage、FileMessage、WarningMessage です。

関連項目 DisplayMessageErrorMessageWarningMessage

Gesture機能 コントロールが認識するアプリケーションのジェスチャが完了したと

きに発生します。 ジェスチャとは、単一のストローク、または、動作を明示するものとしてアプリケーションが認識する一連のストロークのことです。このイベントは、タブレット PC でのみ有効です。

イベント ID

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

filemsg 読み取り専用文字列。同期サーバから返されたメッセージのテキストを含みます。

イベント ID オブジェクト

pbm_inkegesture インクエディット

pbm_inkpgesture インクピクチャ

Page 271: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 261

引数

戻り値 Boolean 型。ジェスチャを受け取る場合は false を、無視する場合は trueを返します。

解説 Gesture イベントは、タブレット PC 上でのみ発生します。タブレットPC 上で、インクエディット(InkEdit)コントロールは、エディット コントロールの中で頻繁に使用されるキーストロークを表現する以下のジェスチャを認識します。ジェスチャを確実に認識させるために、ユーザはコントロールからスタイラスを外すことなく直線や鋭い直角を描く必要があります。ほかのコンピュータ上のインクエディット コントロールは、マルチラインエディット コントロールのように動作し、マウスから入力されるインクは受け付けることができません。

タブレット PC 上で、インクピクチャ コントロールは、以下のジェスチャをマウス クリックと同等に認識します。

引数 説明

gest Integer 型。認識されるジェスチャを識別する。以下の解説のテーブルにある引数の欄を参照してください。

ジェスチャ ジェスチャ名 引数値 キーストローク

Left 0 〔Backspace〕

Right 1 〔Space〕

UpRightLong 2 〔Tab〕

DownLeftLong 3 〔Enter〕

UpRight 4 〔Tab〕

DownLeft 5 〔Enter〕

ジェスチャ名 引数値 マウス動作

Tap 1 左マウスボタン クリック

Double Tap 2 左マウスボタン ダブルクリック

Page 272: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Gesture

262 PowerBuilder

タブレット PC 上のインクピクチャ コントロールで、スタイラスをタップしたりマウスをクリックしたりすると Gesture イベントが発生します。ほかのコンピュータ上では、マウス クリックは Stroke イベントを発生します。ダブルタップを認識させるためには、CollectionModeプロパティに GestureOnly! を設定する必要があります。CollectionModeに InkAndGesture! を設定すると、単一ストロークのジェスチャだけが認識されます。ジェスチャが認識されない場合は、引数の値は 0 です。

例 インクエディット コントロールの Gesture イベント内に記述する以下のコードは、認識されたジェスチャをユーザに確認しています。

CHOOSE CASE gestCASE 0

MessageBox("ジェスチャを認識しました ", &"スペースを入力しました ")

CASE 1MessageBox("ジェスチャを認識しました ", &

"バックスペースを入力しました ")

CASE 2,4MessageBox("ジェスチャを認識しました ", &

"タブを入力しました ")CASE 3,5

MessageBox("ジェスチャを認識しました ", &"リターンを入力しました ")

END CHOOSE

return false

関連項目 RecognitionResultStroke

Page 273: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 263

GetFocus機能 コントロールがフォーカスを受ける直前に(コントロールが選択され

てアクティブになる前に)発生します。

すべてのコントロール

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 例 1 次の例は、シングルライン エディット コントロールの GetFocusイベントのスクリプトです。ユーザが〔Tab〕でシングルライン エディットに移動すると、コントロールのテキストが選択されます。

This.SelectText(1, Len(This.Text))

イベント ID オブジェクト

pbm_bnsetfocus チェックボックス、コマンドボタン、グラフ、OLE、ピクチャ、ピクチャ ハイパーリンク、ピクチャボタン、ラジオボタン

pbm_cbnsetfocus ドロップダウン リストボックス、ドロップダウン ピクチャ リストボックス

pbm_dwnsetfocus データウィンドウ

pbm_ensetfocus シングルライン エディット、エディットマスク、マルチライン エディット、スタティック テキスト、スタティック ハイパーリンク

pbm_lbnsetfocus リストボックス、ピクチャ リストボックス

pbm_lvnsetfocus リストビュー

pbm_rensetfocus リッチテキスト エディット

pbm_sbnsetfocus 水平スクロールバー、水平トラックバー、垂直スクロールバー、垂直トラックバー

pbm_setfocus 水平プログレスバー、垂直プログレスバー、日付ピッカー、月表示カレンダ、インクエディット、インクピクチャ

pbm_tcnsetfocus タブ

pbm_tvnsetfocus ツリービュー

Page 274: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Help

264 PowerBuilder

例 2 例 1 で、ユーザが〔Tab〕ではなく、クリックによってシングルライン エディットに移動した場合、コントロールはフォーカスを得ますが、テキストは選択(ハイライト表示)されません。テキストを選択するユーザ イベントを定義して、GetFocus イベントにそのユーザ イベントをポストすると、ユーザが 〔Tab〕で移動してもクリックしても、ともにハイライト表示されるようになります。この場合、次のコードを GetFocus イベントに記述します。

This.EVENT POST ue_select( )

また、次のコードを ue_select ユーザ イベントに記述しておきます。

This.SelectText(1, Len(This.Text))

関連項目 ClickedLoseFocus

Help機能 ユーザが、タイトル バーから疑問符ボタンを任意のメニュー項目やコ

ントロールまでドラッグしてクリックしたとき、または任意のコントロールをクリック(フォーカスを移動)してから〔F1〕を押したときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 疑問符ボタンは、レスポンス ウィンドウのタイトル バーにのみ表示されます。このイベントを有効にするためには、ContextHelp プロパティを true に設定する必要があります。

イベント ID オブジェクト

pbm_help ウィンドウ、メニュー、DragObject

引数 説明

xpos Integer 型。値によって渡されます(画面の左辺からヘルプメッセージまでの距離で、PowerBuilder 単位系の値)。

ypos Integer 型。値によって渡されます(画面の上辺からヘルプメッセージまでの距離で、PowerBuilder 単位系の値)。

Page 275: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 265

個々のメニュー項目とコントロールに対してヘルプ メッセージを記述できます。PowerBuilder によって、関連付けられた Windows のメッセージが、該当するメニュー項目またはコントロールに割り当てられます。

例 次の例は、ユーザが疑問符ボタンをトラックバー コントロールの上にドラッグしてクリックしたときに、メッセージ ボックスを開きます。

MessageBox("状況依存ヘルプ メッセージ ", "トラックバー スライダを移動して " & + "~r~nデータウィンドウの大きさを変更します。")

関連項目 ShowHelp

Hide機能 ウィンドウが非表示状態になる直前に発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Hide イベントは、MDI フレーム上のシートを閉じるときに発生します。メイン ウィンドウ、レスポンス ウィンドウ、ポップアップ ウィンドウを閉じるときには発生しません。

関連項目 CloseShow

イベント ID オブジェクト

pbm_hidewindow ウィンドウ

Page 276: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

HotLinkAlarm

266 PowerBuilder

HotLinkAlarm機能 ダイナミック データ エクスチェンジ(DDE)サーバ アプリケーショ

ンが新規に(あるいは更新された)データを送り、DDE クライアントアプリケーションがその送られたデータを受け取った後に発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 StartHotLink 関数 StartHotLink_func で DDE サーバ アプリケーションとのホット リンクを確立した後で、サーバ上のアクションによってHotLinkAlarm イベントが起動されます。

例 次の HotLinkAlarm イベント スクリプトは、DDE サーバ アプリケーションと新しいデータに関する情報を取得します。

string ls_data, ls_appl, ls_topic, ls_itemGetDataDDEOrigin(ls_appl, ls_topic, ls_item)GetDataDDE(ls_data)

Idle機能 アプリケーション オブジェクトのスクリプト内で Idle 関数 Idle_func

が呼び出され、マウスまたはキーボードの活動がないまま指定した秒数が経過したときに発生します。

イベント ID

引数 なし

戻り値 なし(RETURN 文を使用しないでください)

イベント ID オブジェクト

pbm_ddedata ウィンドウ

イベント ID オブジェクト

なし アプリケーション

Page 277: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 267

例 次のステートメントは、ユーザが 300 秒間何のアクティビティも行わないと、Idle イベントを起動します。

Idle(300)

Idle イベントでは、たとえば、次のステートメントによってアプリケーションを終了します。

HALT CLOSE

InputFieldSelected機能 リッチテキスト エディット コントロールにおいて、ユーザが入力

フィールドをダブルクリックして、フィールドのデータを編集できるようにするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次のスクリプトは、リッチテキスト エディット コントロールのInputFieldSelected イベントに対するものです。ユーザが編集しようとしている入力フィールドのデータを取得します。

string ls_fieldvaluels_fieldvalue = This.InputFieldGetData(fieldname)

関連項目 PictureSelected

イベント ID オブジェクト

pbm_reninputfieldselected リッチテキスト エディット

引数 説明

fieldname String 型。値によって渡されます(選択された入力フィールドの名前)。

Page 278: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

InsertItem

268 PowerBuilder

InsertItem機能 リストビューに項目を挿入するときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、挿入された項目のラベルとインデックスを表示します。

ListViewItem lviThis.GetItem(index, lvi)sle_info.Text = "Inserted "+ String(lvi.Label) &

+ " into position " &+ String(index)

関連項目 DeleteItem

ItemActivate機能 リストビュー項目(ListViewItem)がクリックまたはダブルクリックさ

れたときに発生します。実際の起動のしくみは、OneClickActivate プロパティと TwoClickActivate プロパティの設定に依存します。

イベント ID

引数

イベント ID オブジェクト

pbm_lvninsertitem リストビュー

引数 説明

index Integer 型。リストビューに挿入しようとするリストビュー項目のインデックス

イベント ID オブジェクト

pbm_lvnitemactivate リストビュー

引数 説明

Index Integer 型。リストビューに挿入しようとするリストビュー項目のインデックス

Page 279: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 269

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 新しく作成するアプリケーションでは、Clicked または DoubleClickedイベントのかわりに、この ItemActivate イベントを使用してください。

イベントを起動するユーザのアクションは、リストビュー コントロールの次のプロパティの設定によって決まります。

例 次のコードは、リストビュー項目の英文ラベルを大文字に変更します。リストビューのプロパティの設定によって、ユーザがクリックまたはダブルクリックした項目の 2 番目のカラムに対して変更が行われます。

listviewitem llvi_current

This.GetItem(index, 2, llvi_current)llvi_current.Label = Upper(llvi_current.Label)This.SetItem(index, 2, llvi_current)RETURN 0

関連項目 ItemChangedItemChanging

OneClickActivate TwoClickActivate 起動のしくみ

True True シングル クリック

True False シングル クリック

False True 選択された項目に対するシングル クリックまたは選択されていない項目に対するダブルクリック

False False ダブルクリック

Page 280: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ItemChanged

270 PowerBuilder

ItemChanged機能 リストビュー項目(ListViewItem)が変更されるときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、項目にフォーカスが移動した理由によってイベントが発生したかどうかをチェックします。

ListViewItem l_lvi

lv_list.GetItem(index, l_lvi)IF focuschange and hasfocus THEN

sle1.Text = String(lvi.label) +" has focus."END IF

関連項目 『データウィンドウ リファレンス』マニュアルまたはオンライン ヘルプの ItemChangedItemChanging

イベント ID オブジェクト

pbm_lvnitemchanged リストビュー

引数 説明

index 変更しているリストビュー項目のインデックスです。

focuschanged Boolean 型(リストビュー項目のフォーカスが変更されたかどうかを示します)。

hasfocus Boolean 型(リストビュー項目にフォーカスがあったかどうかを示します)。

selectionchange Boolean 型(リストビュー項目の選択状態に変更があったかどうかを示します)。

selected Boolean 型(リストビュー項目が選択されているかどうかを示します)。

otherchange Boolean 型(リストビュー項目のフォーカスや選択状態以外に変更があったかどうかを示します)。

Page 281: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 271

ItemChanging機能 リストビューが変更される直前に発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 ItemChanged

ItemCollapsed機能 ツリービュー項目のツリー表示を閉じたときに発生します。

イベント ID

引数

イベント ID オブジェクト

pbm_lvnitemchanging リストビュー

引数 説明

index 変更している項目のインデックス

focuschange Boolean 型(リストビュー項目のフォーカスが変更されたかどうかを示します)。

hasfocus Boolean 型(リストビュー項目にフォーカスがあったかどうかを示します)。

selectionchange Boolean 型(リストビュー項目の選択状態に変更があったかどうかを示します)。

selected Boolean 型(リストビュー項目が選択されているかどうかを示します)。

otherchange Boolean 型(リストビュー項目のフォーカスや選択状態以外に変更があったかどうかを示します)。

イベント ID オブジェクト

pbm_tvnitemcollapsed ツリービュー

引数 説明

handle Long 型。参照によって渡されます(ツリー表示を閉じたツリービュー項目のハンドル)。

Page 282: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ItemCollapsing

272 PowerBuilder

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、ツリー表示が閉じられた項目のピクチャを変更します。

TreeViewItem l_tviinteger li_level

This.GetItem(handle, l_tvi)

CHOOSE CASE l_tvi.LevelCASE 1

l_tvi.PictureIndex = 1l_tvi.SelectedPictureIndex = 1

CASE 2l_tvi.PictureIndex = 2l_tvi.SelectedPictureIndex = 2

CASE 3l_tvi.PictureIndex = 3l_tvi.SelectedPictureIndex = 3

CASE 4l_tvi.PictureIndex = 4l_tvi.SelectedPictureIndex = 4

END CHOOSEThis.SetItem(handle, l_tvi)

関連項目 ItemCollapsing

ItemCollapsing機能 ツリービュー項目のツリー表示を閉じているときに発生します。

イベント ID

引数

イベント ID オブジェクト

pbm_tvnitemcollapsing ツリービュー

引数 説明

handle Long 型。参照によって渡されます(ツリー表示を閉じるツリービュー項目のハンドル)。

Page 283: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 273

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ItemCollapsing イベントは ItemCollapsed イベントの前に発生します。

例 次の例は、ツリー表示が閉じられようとしている項目のピクチャを変更します。

TreeViewItem l_tviinteger li_level

This.GetItem(handle, l_vti)

CHOOSE CASE l_tvi.levelCASE 1

l_tvi.PictureIndex = 1l_tvi.SelectedPictureIndex = 1

CASE 2l_tvi.PictureIndex = 2l_tvi.SelectedPictureIndex = 2

CASE 3l_tvi.PictureIndex = 3l_tvi.SelectedPictureIndex = 3

CASE 4l_tvi.PictureIndex = 4l_tvi.SelectedPictureIndex = 4

END CHOOSE

This.SetItem(handle, l_tvi)

関連項目 ItemCollapsed

Page 284: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ItemExpanded

274 PowerBuilder

ItemExpanded機能 ツリービュー項目のツリー表示が展開されたときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ItemExpanded イベントは ItemExpanding イベントの後に発生します。

例 次の例は、ツリー表示が展開された項目のピクチャを変更します。

TreeViewItem l_tviinteger li_level

This.GetItem(handle, l_tvi)

CHOOSE CASE l_tvi.LevelCASE 1

l_tvi.PictureIndex = 5l_tvi.SelectedPictureIndex = 1

CASE 2l_tvi.PictureIndex = 5l_tvi.SelectedPictureIndex = 2

CASE 3l_tvi.PictureIndex = 5l_tvi.SelectedPictureIndex = 3

CASE 4l_tvi.PictureIndex = 4l_tvi.SelectedPictureIndex = 5

END CHOOSEThis.SetItem(handle, l_tvi)

関連項目 ItemExpanding

イベント ID オブジェクト

pbm_tvnitemexpanded ツリービュー

引数 説明

handle Long 型。参照によって渡されます(展開されたツリービュー項目のハンドル)。

Page 285: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 275

ItemExpanding機能 ツリービュー項目のツリー表示が展開されているときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。1 ツリービューを展開しません。

解説 ItemExpanding イベントは ItemExpanded イベントの前に発生します。

例 次の例は、ツリー表示が展開されようとしている項目のピクチャを変更します。

TreeViewItem l_tviinteger li_level

This.GetItem(handle, l_tvi)

CHOOSE CASE l_tvi.LevelCASE 1

l_tvi.PictureIndex = 5l_tvi.SelectedPictureIndex = 1

CASE 2l_tvi.PictureIndex = 5l_tvi.SelectedPictureIndex = 2

CASE 3l_tvi.PictureIndex = 5l_tvi.SelectedPictureIndex = 3

CASE 4l_tvi.PictureIndex = 4l_tvi.SelectedPictureIndex = 5

END CHOOSE

This.SetItem(handle, l_tvi)

関連項目 ItemExpanded

イベント ID オブジェクト

pbm_tvnitemexpanding ツリービュー

引数 説明

handle Long 型。参照によって渡されます(展開されるツリービュー項目のハンドル)。

Page 286: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ItemPopulate

276 PowerBuilder

ItemPopulate機能 ツリービュー項目のツリー表示が最初に展開される際、表示内容を生

成しているときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、表示内容を生成しているツリービュー項目の名前をシングルライン エディットに表示します。

TreeViewItem tvi

This.GetItem(handle, tvi)sle_get.Text = "Populating TreeView item " &

+ String(tvi.Label) + " with children"

関連項目 ItemExpanding

Key機能 ユーザがキーを押すとき、発生します。

イベント ID

イベント ID オブジェクト

pbm_tvnitempopulate ツリービュー

引数 説明

handle Long 型。参照によって渡されます(表示内容を生成しているツリービュー項目のハンドル)。

イベント ID オブジェクト

pbm_lvnkeydown リストビュー

pbm_renkey リッチテキスト エディット

pbm_tcnkeydown タブ

pbm_tvnkeydown ツリービュー

pbm_keydown ウィンドウ

Page 287: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 277

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。1 キーを処理しません(リッチテキスト エディット コントロールだけに適用されます)。

解説 PowerBuilder コントロールによってはキーストロークを取得するものがあります。この場合、ウィンドウは Key イベントを受け取れません。この種のコントロールには、リストビュー、ツリービュー、タブ、リッチテキスト エディット コントロール、データウィンドウ コントロールのエディット コントロールがあります。これらのコントロールにフォーカスがあるときは、コントロールのイベントにスクリプトを記述して、キーストロークの内容に対応することができます。キーストロークに対して、あらかじめ定義されたイベントがない場合は、pbmコードと対応付けたユーザ イベントを定義することができます。

リッチテキスト エディット コントロールの場合、キーを押すことによって文書に書式を設定できます。たとえば、〔Ctrl〕+〔B〕は選択箇所のフォントを太字にします。戻り値に 1 を指定すると、キーに関連付けられた書式設定が行われません。

ユーザが修飾キーを押し、そのキーを押したままほかのキーを押すと、Key イベントが 2 度発生します。1 度目は修飾キーが押されたときで、2 度目は別のキーが押されたときです。ユーザが 2 度目のキーを押す前に修飾キーを放すか放さないかで、2 度目のイベント発生時のkeyflags の値が異なります。

ユーザがキーを放すときは、Key イベントは発生しません。このため、ユーザが修飾キーを放しても、別のキーが押されるまで修飾キーの状況はわかりません。

例 次の例は、ユーザが〔Shift〕か〔Ctrl〕を押さないで〔F1〕や〔F2〕を押すと、ビープ音を鳴らします。

引数 説明

key KeyCode 型。値によって渡されます。KeyCode カタログ データ型の値は、KeyA! や KeyF1! のように、どのキーが押されたかを示します。

keyflags UnsignedLong 型。値によって渡されます(キーとともに押された修飾キー)。

値は以下のとおりです。

1 -〔Shift〕2 -〔Ctrl〕3 -〔Shift〕と〔Ctrl〕

Page 288: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

LineDown

278 PowerBuilder

IF keyflags = 0 THENIF key = KeyF1! THEN

Beep(1)ELSEIF key = KeyF2! THEN

Beep(20)END IF

END IF

次の行は、キーが押されたときの keyflags の値を表示します。

st_1.Text = String(keyflags)

関連項目 SystemKey

LineDown機能 ユーザが垂直スクロールバーの下向き矢印をクリックするとき、

フォーカスがトラックバーにある場合にキーボードの下向き矢印を押すときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが垂直スクロールバーをクリックしても、垂直トラックバーでフォーカスを置いて下向きの矢印キーを押しても、バーの Position プロパティを変更するスクリプトを記述しなければ、何も起こりません。スクロールバーの矢印とトラックバーの矢印キーの場合は、LineUp イベントと LineDown イベントを使用します。スクロールバーまたはトラックバーの背景でつまみの上下をクリックする場合は、PageUp イベントと PageDown イベントを使用します。スクロールボックス自身をドラッグする場合は Moved イベントを使用します。

例 次の例は LineDown イベントのスクリプトです。ユーザが垂直スクロールバーの下矢印をクリックすると、スクロールボックスを下に移動します。また、スタティック テキスト コントロール st_1 に結果の位置を表示します。

イベント ID オブジェクト

pbm_sbnlinedown 垂直スクロールバー、垂直トラックバー

Page 289: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 279

IF This.Position > This.MaxPosition - 1 THENThis.Position = MaxPosition

ELSEThis.Position = This.Position + 1

END IF

st_1.Text = "LineDown " + String(This.Position)

関連項目 LineLeftLineRightLineUpPageDown

LineLeft機能 ユーザが水平スクロールバーの左向き矢印をクリックするとき、ある

いはフォーカスが水平トラックバーにある場合にキーボードの左向き矢印を押すときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが水平スクロールバーをクリックしても、水平トラックバーでキーボードの左向きの矢印キーを押しても、バーの Position プロパティを変更するスクリプトを記述しなければ、何も起こりません。スクロールバーの矢印とトラックバーの左向きの矢印キーの場合は、LineLeftイベントと LineRight イベントを使用します。背景でつまみの上下をクリックする場合は、PageLeft イベントと PageRight イベントを使用します。スクロールボックス自身をドラッグする場合は Moved イベントを使用します。

例 次の例は LineLeft イベントのスクリプトです。ユーザが水平スクロールバーの左矢印をクリックすると、スクロールボックスを左に移動します。また、スタティック テキスト コントロール st_1 に結果の位置を表示します。

イベント ID オブジェクト

pbm_sbnlineup 水平スクロールバー、水平トラックバー

Page 290: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

LineRight

280 PowerBuilder

IF This.Position < This.MinPosition + 1 THENThis.Position = MinPosition

ELSEThis.Position = This.Position - 1

END IF

st_1.Text = "LineLeft " + String(This.Position)

関連項目 LineDownLineRightLineUpPageLeft

LineRight機能 ユーザが水平スクロールバーの右向き矢印をクリックするとき、ある

いはフォーカスが水平トラックバーにある場合にキーボードで右向きの矢印を押すときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが水平スクロールバーをクリックしても、水平トラックバーでキーボードの右向きの矢印キーを押しても、バーの Position プロパティを変更するスクリプトを記述しなければ、何も起こりません。スクロールバーの矢印とトラックバーの右向きの矢印キーの場合は、LineLeftイベントと LineRight イベントを使用します。背景でつまみの上下をクリックする場合は、PageLeft イベントと Right イベントを使用します。スクロールボックス自身をドラッグする場合は Moved イベントを使用します。

例 次の例は LineRight イベントのスクリプトです。ユーザが水平スクロールバーの右矢印をクリックすると、スクロールボックスを右に移動します。また、スタティック テキスト コントロール st_1 に結果の位置を表示します。

イベント ID オブジェクト

pbm_sbnlinedown 水平スクロールバー、水平トラックバー

Page 291: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 281

IF This.Position > This.MaxPosition - 1 THENThis.Position = MaxPosition

ELSEThis.Position = This.Position + 1

END IF

st_1.Text = "LineRight " + String(This.Position)

関連項目 LineDownLineLeftLineUpPageRight

LineUp機能 ユーザが垂直スクロールバーの上向き矢印をクリックするとき、ある

いはフォーカスがトラックバーにある場合にキーボードの上矢印を押すときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが垂直スクロールバーをクリックしても、垂直トラックバーにフォーカスを置いて上向きの矢印キーを押しても、バーの Position プロパティを変更するスクリプトを記述しなければ、何も起こりません。スクロールバーの矢印とトラックバーの矢印キーの場合は、LineUp イベントと LineDown イベントを使用します。スクロールバーやトラックバーの背景でつまみの上下をクリックする場合は、PageUp イベントとPageDown イベントを使用します。スクロールボックス自身をドラッグする場合は Moved イベントを使用します。

例 次の例は LineUp イベントのスクリプトです。ユーザが垂直スクロールバーの上矢印をクリックすると、スクロールボックスを上に移動します。また、スタティック テキスト コントロール st_1 に結果の位置を表示します。

イベント ID オブジェクト

pbm_sbnlineup 垂直スクロールバー、垂直トラックバー

Page 292: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

LoseFocus

282 PowerBuilder

IF This.Position < This.MinPosition + 1 THENThis.Position = MinPosition

ELSEThis.Position = This.Position - 1

END IF

st_1.Text = "LineUp " + String(This.Position)

関連項目 LineDownLineLeftLineRightPageUp

LoseFocus機能 コントロールがフォーカスを失う直前(アクティブでなくなる前)に

発生します。

イベント ID

イベント ID 説明

pbm_controltypekillfocus UserObject(標準ビジュアル ユーザ オブジェクトのみ)

pbm_bnkillfocus チェックボックス、コマンドボタン、グラフ、OLE、ピクチャ、ピクチャ ハイパーリンク、ピクチャボタン、ラジオボタン、スタティック テキスト、スタティック ハイパーリンク

pbm_cbnkillfocus ドロップダウン リストボックス、ドロップダウンピクチャ リストボックス

pbm_dwnkillfocus データウィンドウ

pbm_enkillfocus シングルライン エディット、エディットマスク、マルチライン エディット

pbm_killfocus 水平プログレスバー、垂直プログレスバー、日付ピッカー、月表示カレンダ、インクエディット、インクピクチャ

pbm_lbnkillfocus リストボックス、ピクチャ リストボックス

pbm_lvnkillfocus リストビュー

pbm_renkillfocus リッチテキスト エディット

pbm_sbnkillfocus 水平スクロールバー、水平トラックバー、垂直スクロールバー、垂直トラックバー

pbm_tcnkillfocus タブ

Page 293: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 283

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが別のコントロールにフォーカスを移動するときに何か処理を行いたい場合に、コントロールの LoseFocus イベントにスクリプトを記述します。

コントロール内に編集可能なテキストがあれば、フォーカスが失われることによって Modified イベントが発生します。

リッチテキスト エディット コントロールでは、ユーザがリッチテキストエディット コントロールのツールバーをクリックすると、LoseFocus イベントが発生します。しかし、コントロールは実際にはフォーカスを失いません。

MessageBox 関数はフォーカスを取得してしまうので、LoseFocus イベントのようにフォーカスが変更されるときに、MessageBox 関数を使用すべきではありません。そのかわりに、ウィンドウのタイトルまたはマルチライン エディット コントロールにメッセージを表示することができます。

例 例 1 次のスクリプトは、シングルライン エディット sle_town のLoseFocus イベントのものです。テキストボックスを空のままにしておくと、ユーザに情報を入力するように通知します。

IF sle_town.Text = "" THENst_status.Text = "町の名前が指定されていません。"

END IF

例 2 次のスクリプトは、データウィンドウ コントロール dw_emp のLoseFocus イベントのものです。スクリプトを記述したユーザ イベントを起動することにより、ユーザが入力した最後の項目が入力条件則に則っているかどうか調べます。

次のステートメントによってユーザ イベント ue_accept が起動されます。

dw_emp.EVENT ue_accept( )

ユーザ イベント ue_accept の次のステートメントは、AcceptText 関数を呼び出します。

dw_emp.AcceptText( )

pbm_tvnkillfocus ツリービュー

イベント ID 説明

Page 294: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Modified

284 PowerBuilder

次のスクリプトは、リッチテキスト エディット コントロールのLoseFocus イベントのものです。コントロールがフォーカスを(ツールバー上でなく)本当に失ったときに、処理を実行します。

GraphicObject l_control

// リッチテキスト エディットにまだフォーカスがあるか ?l_control = GetFocus()IF TypeOf(l_control) = RichTextEdit! THEN RETURN 0

// リッチテキスト エディットが本当にフォーカスを失ったら処理を実行します。...

次のスクリプトは、フォーカスを得たコントロールの名前を取得します。

GraphicObject l_controlstring ls_namel_control = GetFocus()ls_name = l_control.Classname( )

関連項目 GetFocus

Modified機能 コントロールのテキストが変更されたときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

イベント ID オブジェクト

pbm_cbnmodified ドロップダウン リストボックス、ドロップダウン ピクチャ リストボックス

pbm_enmodified シングルライン エディット、エディットマスク、マルチライン エディット

pbm_inkemodified インクエディット

pbm_renmodified リッチテキスト エディット

Page 295: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 285

解説 単純なテキスト コントロールの場合、ユーザが〔Enter〕を押したり、〔Tab〕を押して別のコントロールへ移動したりして、編集を終えたことを示したときに、Modified イベントが発生します。

インクエディット コントロールとリッチテキスト エディット コントロールの場合、Modified プロパティの値によって Modified イベントが発生する状況が変わります。プロパティが false の場合、リッチテキスト エディット コントロール上の文書が最初に変更されるときに、Modified イベントが発生します。この変更によってプロパティの値はtrue に設定され、文書を変更しても Modified イベントが起こらなくなります。プロパティを false に戻すと、最初の状態と同じになり、次の変更に対しては Modified イベントが発生します。

コントロールにテキストや文書を挿入したときに Modified プロパティを false に再設定すると、挿入したその文書に変更が加えられるとModified イベントを起動することができます。ユーザが文書を変更したかどうか判別するためには、文書を開くスクリプトで Modified プロパティを false に設定します。ユーザが編集を開始すると、プロパティは true に再設定され、Modified イベントが発生します。

Modified イベントは、LoseFocus イベントの前に発生します。

例 次の例は、Modified イベント スクリプトのものです。ユーザがシングルライン エディット コントロール sle_color に入力したテキストが入力条件を満たしているかテストします。ユーザが赤、青、白のどれかを入力しなかった場合、メッセージボックスで不適切な入力だったことをユーザに伝えます。有効な値の場合は、テキストの色を変更します。

string ls_color

This.BackColor = RGB(150,150,150)

ls_color = Upper(This.Text)CHOOSE CASE ls_color

CASE "RED"This.TextColor = RGB(255,0,0)

CASE "BLUE"This.TextColor = RGB(0,0,255)

CASE "WHITE"This.TextColor = RGB(255,255,255)

CASE ELSEThis.Text = ""MessageBox("無効な入力 ", &"RED(赤)、WHITE(白)、または BLUE(青)を入力してください。")

END CHOOSE

Page 296: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

MouseDown

286 PowerBuilder

これは現実的な例ではありません。選択肢が 3 つの場合はリストボックスやラジオボタンの方が適しています。

関連項目 LoseFocus

MouseDownMouseDown イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リッチテキスト エディット コントロールに対して

機能 ユーザがリッチテキスト エディット コントロール上で左マウス ボタンを押すときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 左マウス ボタンを押すと、リッチテキスト エディット コントロールの MouseDown イベントは、テキストをシングルライン エディットsle_1 に割り当てます。

sle_1.text = "Mouse Down"

関連項目 ClickedMouseMoveMouseUp

オブジェクト 構文

リッチテキスト エディット コントロール 構文 1

ウィンドウ 構文 2

イベント ID オブジェクト

pbm_renlbuttondown リッチテキスト エディット

Page 297: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 287

構文 2 ウィンドウに対して

機能 ウィンドウ上の未使用領域(表示可能で使用可能なオブジェクトが存在していない領域)でユーザが左マウス ボタンを押すときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 例 1 MouseDown イベントの次のコードは、ポインタのウィンドウ座標を引数 xpos と ypos から取得して表示します。

sle_2.Text = "Position of Pointer is: " + &String(xpos) + "," + String(ypos)

例 2 MouseDown イベントの次のコードは、flags 引数の値を調べ、どの修飾キーが押されたかをシングルライン エディット sle_modkey に表示します。

CHOOSE CASE flagsCASE 1

イベント ID オブジェクト

pbm_lbuttondown ウィンドウ

引数 説明

flags UnsignedLong 型。値によって渡されます(押下されたマウス ボタンと修飾キーの値の合計)。

値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 -〔Shift〕

• 8 -〔Ctrl〕

• 16 - 中マウス ボタン

MouseDown イベントでは、左マウス ボタンが常に押されています。つまり flags の値には、常に 1 が加算されています。flags の詳細については、288 ページの「MouseMove」イベントの構文 2 を参照してください。

xpos Integer 型。値によって渡されます(ウィンドウの左辺からポインタまでの距離で、ピクセル単位の値)。

ypos Integer 型。値によって渡されます(ウィンドウの上辺からポインタまでの距離で、ピクセル単位の値)。

Page 298: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

MouseMove

288 PowerBuilder

sle_mkey.Text = "No modifier keys pressed"CASE 5

sle_mkey.Text = "SHIFT key pressed"CASE 9

sle_mkey.Text = "CONTROL key pressed"CASE 13

sle_mkey.Text = "SHIFT and CONTROL keys pressed"END CHOOSE

関連項目 ClickedMouseMoveMouseUp

MouseMoveMouseMove イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リッチテキスト エディット コントロールに対して

機能 リッチテキスト エディット コントロール上でマウス ポインタが動かされるときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 ClickedMouseDownMouseUp

オブジェクト 構文

リッチテキスト エディット コントロール

構文 1

ウィンドウ 構文 2

イベント ID オブジェクト

pbm_renmousemove リッチテキスト エディット

Page 299: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 289

構文 2 ウィンドウに対して

機能 ウィンドウ上でマウス ポインタが動かされるときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 引数 flags はマウス ボタンと修飾キーの値の合計なので、最大値をひとつずつ減算していって、残りの値を調べていけば、どのキーが押されたかを特定できます。次に例を示します。

• flags の値が 5 の場合、〔Shift〕(4)とマウスの左ボタン(1)が押されています。

• flags の値が 14 の場合、〔Ctrl〕(8)と〔Shift〕(4)、およびマウスの右ボタン(2)が押されています。

次のコードは、押されたマウス ボタンと修飾キーを flags の値から判別します。Boolean 型のローカル変数は、デフォルトで false に初期化されます。

boolean lb_left_button, lb_right_buttonboolean lb_middle_button, lb_Shift_key, lb_control_key

イベント ID オブジェクト

pbm_mousemove ウィンドウ

引数 説明

flags UnsignedLong 型。値によって渡されます(押下されたマウス ボタンと修飾キーの値の合計)。

値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 -〔Shift〕

• 8 -〔Ctrl〕

• 16 - 中マウス ボタン

Flags は、押下されたすべてのマウス ボタンとキーの合計値となります。

xpos Integer 型。値によって渡されます(ウィンドウの左辺からポインタまでの距離で、ピクセル単位の値)。

ypos Integer 型。値によって渡されます(ウィンドウの上辺からポインタまでの距離で、ピクセル単位の値)。

Page 300: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

MouseMove

290 PowerBuilder

integer li_flags

li_flags = flags IF li_flags > 15 THEN

// マウスの中ボタンが押されましたlb_middle_button = TRUEli_flags = li_flags - 16

END IF

IF li_flags > 7 THEN// 〔Ctrl〕が押されましたlb_control_key = TRUEli_flags = li_flags - 8

END IF

IF li_flags > 3 THEN// 〔Shift〕が押されましたlb_Shift_key = TRUEli_flags = li_flags - 4

END IF

IF li_flags > 1 THEN// マウスの右ボタンが押されましたlb_lb_right_button = TRUEli_flags = li_flags - 2

END IF

IF li_flags = 1 THEN lb_left_button = TRUE

ウィンドウ上のほとんどのコントロールは、MouseMove イベントを補捉しません。MouseMove イベントはデフォルトではマップされていません。マウスをコントロールの上に移動したときにウィンドウのMouseMove イベントを呼び出すには、コントロールの pbm_mousemoveイベントにユーザ定義のイベントをマップする必要があります。次のコードでは、コントロールのユーザ定義の MouseMove イベントから、ウィンドウの MouseMove イベントを呼び出しています。

Parent.EVENT MouseMove(0, Parent.PointerX(),Parent.PointerY())

例 MouseMove イベントの次のコードは、ウィンドウのワークスペース上のマウス ポインタの上下移動に対応して、ゲージを表示する OLE カスタム コントロールのメータ表示を上下に連続的に移動します。

This.uf_setmonitor(ypos, ole_verticalmeter, &This.WorkspaceHeight() )

Page 301: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 291

uf_setmonitor はウィンドウ関数で、ゲージのサイズをピクセルに調整します。引数は 3 つあり、マウス ポインタの垂直位置、OLECustomControlへの参照、メータの表示に対応するマウス ポインタの値の領域です。

double ld_gaugemax, ld_gaugemindouble ld_gaugerange, ld_value

// モニタ型のコントロールの表示範囲ld_gaugemax = ocxitem.Object.MaxValueld_gaugemin = ocxitem.Object.MinValueld_gaugerange = ld_gaugemax - ld_gaugemin

// ウィンドウ上のマウスの水平位置ld_value = data * ld_gaugerange / range + ld_gaugemin

// ゲージの設定ocxitem.Object.Value = Round(ld_value, 0)

RETURN 1

MouseMove イベントは、OLE カスタム コントロールにもあります。この MouseMove イベントの次のコードによって、マウス ポインタがゲージ上にあるとき、ゲージがポインタの位置に反応するように指定されています。この際、システムが必要とする引数の値を渡さなければなりません。なお、ポインタの値は親ウィンドウとの相対位置で表されます。

Parent.EVENT MouseMove(0, Parent.PointerX(), &Parent.PointerY())

関連項目 ClickedMouseDownMouseUp

MouseUpMouseUp イベントの引数はオブジェクトによって異なります。

オブジェクト 構文

リッチテキスト エディット コントロール 構文 1

ウィンドウ 構文 2

Page 302: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

MouseUp

292 PowerBuilder

構文 1 リッチテキスト エディット コントロールに対して

機能 ユーザがリッチテキスト エディット コントロール上で左マウス ボタンを放すときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 マウス ボタンを放すときに Clicked イベントも発生します。

例 次のコードはリッチテキスト エディット コントロールの MouseUp イベントに対するものです。ユーザがマウスの左ボタンを放したときに、シングルライン エディット sle_1 にテキストを表示します。

sle_1.Text = "Mouse Up"

関連項目 ClickedMouseDownMouseMove

構文 2 ウィンドウに対して

機能 ウィンドウ上の未使用領域(表示可能で使用可能なオブジェクトが存在していない領域)でユーザが左マウス ボタンを放すときに発生します。

イベント ID

イベント ID オブジェクト

pbm_renlbuttonup リッチテキスト エディット

イベント ID オブジェクト

pbm_lbuttonup ウィンドウ

Page 303: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 293

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 マウス ボタンを放すときに Clicked イベントも発生します。

例 例 1 MouseUp イベントの次のコードは、ポインタのウィンドウ座標を引数 xpos と ypos から取得してシングルライン エディット sle_2 に表示します。

sle_2.Text = "Position of Pointer is: " + &String(xpos) + "," + String(ypos)

例 2 MouseUp イベントの次のコードは、flags 引数の値を調べ、どの修飾キーが押されたかをシングルライン エディット sle_modkey に表示します。

CHOOSE CASE flagsCASE 0

sle_mkey.Text = "No modifier keys pressed"

CASE 4sle_mkey.Text = "SHIFT key pressed"

CASE 8sle_mkey.Text = "CONTROL key pressed"

引数 説明

flags UnsignedLong 型。値によって渡されます(押下されたマウス ボタンと修飾キーの値の合計)。

値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 -〔Shift〕

• 8 -〔Ctrl〕

• 16 - 中マウス ボタン

MouseUp イベントでは、左マウス ボタンが放されています。つまり、flags の値には 1 が加算されていません。flagsの詳細については、288 ページの「MouseMove」イベントの構文 2 を参照してください。

xpos Integer 型。値によって渡されます(ウィンドウの左辺からポインタまでの距離で、ピクセル単位の値)。

ypos Integer 型。値によって渡されます(ウィンドウの上辺からポインタまでの距離で、ピクセル単位の値)。

Page 304: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Moved

294 PowerBuilder

CASE 12sle_mkey.Text = "SHIFT and CONTROL keys pressed"

END CHOOSE

関連項目 ClickedMouseDownMouseMove

Moved機能 ユーザが矢印をクリックしたりスクロールボックス(つまみ)をドラッ

グしたりして、スクロールボックスを移動するときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Moved イベントによって、スクロールバーの Position プロパティが引数 scrollpos の値で更新されます。

例 Moved イベントの次のステートメントは、スタティック テキスト コントロールにスクロール ボックスの新しい位置を表示します。

st_1.Text = "Moved " + String(scrollpos)

関連項目 LineDownLineLeftLineRightLineUpPageDown

イベント ID オブジェクト

pbm_sbnthumbtrack 水平スクロールバー、水平トラックバー、垂直スクロールバー、垂直トラックバー

引数 説明

scrollpos Integer 型。値によって渡されます(スクロール ボックスの位置を示す値 MinPosition プロパティと MaxPosition プロパティで指定した領域内の値です)。

Page 305: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 295

PageLeftPageRightPageUp

Notify機能 ツリービュー コントロールが親に WM_NOTIFY メッセージを送信す

るときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 lparam 引数は、NMHDR 構造体へのポインタ、または最初のメンバーが NMHDR 構造体である大きい構造体へのポインタです。wparam の値は一意であるとは限らないので、NMHDR 構造体の中の識別子を使用する必要があります。

このイベントを使用してカスタム描画メッセージを処理できます。

イベント ID オブジェクト

pbm_notify ツリービュー コントロール

引数 説明

wparam UnsignedLong 型。値によって渡されます。この値には、メッセージを送信するコントロールの ID が含まれます。この値は一意であるとは限りません。

lparam Long 型。値によって渡されます。この値には、メッセージや通知コードを送信するコントロールのウィンドウ ハンドルと識別子が格納された構造体へのポインタが含まれます。

Page 306: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Open

296 PowerBuilder

OpenOpen イベントは、オブジェクトによって引数の内容が異なります。

構文 1 アプリケーション オブジェクトに対して

機能 ユーザがアプリケーションを起動するときに発生します。

イベント ID

引数

戻り値 なし(RETURN 文を使用しないでください)

解説 アプリケーションの Open イベントは、データベース接続パラメータを設定し、アプリケーションのメイン ウィンドウを開くのに使用します。

Windows の場合

[スタート]メニューの[ファイル名を指定して実行]メニューを使用するときに、コマンド ラインに引数を指定することができます。また、アプリケーションのショートカットを定義するときにリンク先の実行ファイルとともに引数も指定することができます。

開発環境でアプリケーションをテスト実行するときに、コマンド ラインに引数を指定することはできません。

ほかのイベントや関数では、CommandParm 関数を呼び出して、コマンド ラインの引数を取得することができます。

引数 commandline で取得されるコマンド ラインの引数文字列の例については、417 ページの「CommandParm」を参照してください。

オブジェクト 構文

アプリケーション 構文 1

ウィンドウ 構文 2

イベント ID オブジェクト

なし アプリケーション

引数 説明

commandline String 型。値によって渡されます。コマンド ラインで、実行プログラムの名前の後に付加された引数が入っています。

Page 307: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 297

例 次の例では、アプリケーションの初期設定ファイルの設定に基づきSQLCA グローバル変数を設定し、データベースと接続し、メイン ウィンドウを開きます。

/* 現行の myapp.ini の設定に基づいて SQLCA に値を設定します。 */SQLCA.DBMS = ProfileString("myapp.ini", "database", &

"dbms", "")SQLCA.Database = ProfileString("myapp.ini", &

"database", "database", "")SQLCA.Userid = ProfileString("myapp.ini", "database", &

"userid", "")SQLCA.DBPass = ProfileString("myapp.ini", "database", &

"dbpass", "")SQLCA.Logid = ProfileString("myapp.ini", "database", &

"logid", "")SQLCA.Logpass = ProfileString("myapp.ini", &

"database", "LogPassWord", "")SQLCA.Servername = ProfileString("myapp.ini", &

"database", "servername", "")SQLCA.DBParm = ProfileString("myapp.ini", "database", &

"dbparm", "")

CONNECT;

IF SQLCA.Sqlcode <> 0 THENMessageBox("データベースに接続できません ", &

SQLCA.SQLErrText)RETURN

END IF

/* MDI フレーム ウィンドウを開きます。 */Open(w_genapp_frame)

関連項目 Close

構文 2 ウィンドウに対して

機能 ウィンドウを開く関数によってウィンドウが開かれるときに発生します。Open イベントはウィンドウが開かれてから表示されるまでに発生します。

イベント ID

イベント ID オブジェクト

pbm_open ウィンドウ

Page 308: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Open

298 PowerBuilder

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Open イベントを起動する関数は次のとおりです。

OpenOpenWithParmOpenSheetOpenSheetWithParm

Open イベントが発生する段階で、ウィンドウ上のコントロールはすでに存在しています(コントロールの Constructor イベントの方が先に発生します)。Open イベントのスクリプトで、ウィンドウ上のオブジェクトを参照し、それらのオブジェクトの表示や動作形態を設定できます。たとえば、ボタンを使用不可にしたり、データウィンドウのデータを検索したりすることができます。

すべてのコントロールが存在していたとしても、アクションによっては Open イベントで使用すべきでないものがあります。たとえば、ウィンドウ自体はまだ表示されていないので、コントロールに対してSetRedraw 関数を呼び出すと、失敗します。

ウィンドウのイベントあるいはウィンドウ コントロールのイベントで Close 関数を呼び出してウィンドウを閉じる場合に、Close 関数がイベント スクリプトの最後のステートメントにないと、PowerBuilder はクラッシュします。イベント スクリプトの最後のステートメントあるいはイベント スクリプトからポストされるユーザ定義イベントでClose 関数を呼び出すことでこの問題を避けることができます。たとえば、w_1 という名前のウィンドウの Open イベント スクリプトの以下のコードはクラッシュを引き起こします。

// w_1 Open イベント スクリプト close(this)open(w_2) // クラッシュを引き起こす

次のコードはクラッシュを引き起こしません。

// w_1 ue_postopen イベント スクリプト close(this)

// w_1 Open イベント スクリプトopen(w_2)this.Post Event ue_postopen()

Page 309: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 299

WindowState プロパティの変更

シートとして開くウィンドウの Open イベントの WindowState プロパティは変更しないでください。タイトル バーのコントロールが重複してしまいます。ウィンドウが開いたら、別のスクリプトのプロパティを変更できます。

ウィンドウが開かれるときは、ウィンドウ上の各コントロールのConstructor イベント、ウィンドウの Activate イベントと Show イベント、ウィンドウのタブ順序の最初のコントロールの GetFocus イベントなど、ほかのイベントも発生します。

MDI フレーム上でシートが開かれるときは、シートの Show イベントと Activate イベント、フレームの Activate イベントなど、ほかのイベントも発生します。

例 ウィンドウにデータウィンドウ コントロールがある場合、Open イベントでそのデータウィンドウ コントロールにデータを検索させ表示することができます。次の例では、トランザクション オブジェクトSQLCA の値がすでに設定されています。

dw_1.SetTransObject(SQLCA)dw_1.Retrieve( )

関連項目 ActivateConstructorShow

Other機能 PowerBuilder のイベントではない Windows メッセージが発生するとき

に発生します。

イベント ID

引数

イベント ID オブジェクト

pbm_other ウィンドウやウィンドウ上に配置されるコントロール

引数 説明

wparam UnsignedLong 型。値によって渡されます。

lparam Long 型。値によって渡されます。

Page 310: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PageDown

300 PowerBuilder

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 開発者は自分自身のユーザ イベントを自由に定義できるので、Other イベントは有効な手段とは言えません。Other イベントはすべてのWindows メッセージを調べるので、パフォーマンスが劣下します。使用は避けるようにようにしてください。

PageDown機能 スクロールボックスの下側のシャフト部分がクリックされるときに発

生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが垂直スクロールバーをクリックしても、スクロールバーのPosition プロパティを変更するスクリプトを記述しなければ、何も起こりません。スクロールバーの矢印の場合は、LineUp イベントと LineDownイベントを使用します。スクロールバーの背景でスクロールボックス(つまみ)の上下をクリックする場合は、PageUp イベントと PageDownイベントを使用します。スクロールボックス自身をドラッグする場合は Moved イベントを使用します。

例 例 1 以下の例は、垂直スクロールバーの PageDown イベントのスクリプトです。インスタンス変数 ii_pagesize に保持されたページ サイズの値を使用して、スクロール ボックスの位置を変更します。スクロールバーの位置に基づいて、関連付けられたコントロールの表示を変更するには、コードを追加しなければなりません。

IF This.Position > &This.MaxPosition - ii_pagesize THENThis.Position = MaxPosition

ELSEThis.Position = This.Position + ii_pagesize

イベント ID オブジェクト

pbm_sbnpagedown 垂直スクロールバー、垂直トラックバー

Page 311: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 301

END IFRETURN 0

例 2 以下の例は、インスタンス変数 ii_pagesize に保持されたページサイズの値を使用してスクロール ボックスの位置を変更します。また、ページごとにデータウィンドウ コントロールを 10 行ずつ下にスクロールします。

long ll_currow, ll_nextrow

This.Position = This.Position + ii_pagesizell_currow = dw_1.GetRow()ll_nextrow = ll_currow + 10dw_1.ScrollToRow(ll_nextrow)dw_1.SetRow(ll_nextrow)

関連項目 LineDownPageLeftPageRightPageUp

PageLeft機能 スクロール ボックス(つまみ)の左側のシャフト部分がクリックされ

るときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが水平スクロールバーをクリックしても、スクロールバーのPosition プロパティを変更するスクリプトを記述しなければ、何も起こりません。スクロールバーの矢印の場合は、LineLeft イベントとLineRight イベントを使用します。スクロールバーの背景でスクロールボックス(つまみ)の上下をクリックする場合は、PageLeft イベントと PageRight イベントを使用します。スクロールボックス自身をドラッグする場合は Moved イベントを使用します。

イベント ID オブジェクト

pbm_sbnpageup 水平スクロールバー、水平トラックバー

Page 312: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PageRight

302 PowerBuilder

例 以下の例は、水平スクロールバーの PageLeft イベントのスクリプトです。ユーザが水平スクロールバーの左矢印をクリックすると、インスタンス変数 ii_pagesize に保持されたページ サイズの値を使用して、スクロール ボックスの位置を変更します。

IF This.Position < &This.MinPosition + ii_pagesize THEN

This.Position = MinPositionELSE

This.Position = This.Position - ii_pagesizeEND IF

関連項目 LineLeftPageDownPageRightPageUp

PageRight機能 スクロール ボックス(つまみ)の右側のシャフト部分がクリックされ

るときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが水平スクロールバーをクリックしても、スクロールバーのPosition プロパティを変更するスクリプトを記述しなければ、何も起こりません。

• スクロールバーの矢印の場合は、LineLeft イベントと LineRight イベントを使用します。

• スクロールバーの背景でスクロールボックス(つまみ)の上下をクリックする場合は、PageLeft イベントと PageRight イベントを使用します。

イベント ID オブジェクト

pbm_sbnpagedown 水平スクロールバー、水平トラックバー

Page 313: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 303

• スクロールボックス自身をドラッグする場合は、Moved イベントを使用します。

例 以下の例は、水平スクロールバーの PageRight イベントのスクリプトです。ユーザが水平スクロールバーの右矢印をクリックすると、インスタンス変数 ii_pagesize に保持されたページ サイズの値を使用して、スクロール ボックスの位置を変更します。

IF This.Position > &This.MaxPosition - ii_pagesize THEN

This.Position = MaxPositionELSE

This.Position = This.Position + ii_pagesizeEND IF

関連項目 LineRightPageDownPageLeftPageUp

PageUp機能 スクロール ボックス(つまみ)の上側のシャフト部分がクリックされ

るときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが垂直スクロールバーをクリックしても、スクロールバーのPosition プロパティを変更するスクリプトを記述しなければ、何も起こりません。

• スクロールバーの矢印の場合は、LineUp イベントと LineDown イベントを使用します。

イベント ID オブジェクト

pbm_sbnpageup 垂直スクロールバー、垂直トラックバー

Page 314: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PictureSelected

304 PowerBuilder

• スクロールバーの背景でスクロールボックス(つまみ)の上下をクリックする場合は、PageUp イベントと PageDown イベントを使用します。

• スクロールボックス自身をドラッグする場合は、Moved イベントを使用します。

例 例 1 以下の例は、垂直スクロールバーの PageUp イベントのスクリプトです。ユーザが垂直スクロールバーの上矢印をクリックすると、インスタンス変数 ii_pagesize に保持されたページ サイズの値を使用して、スクロール ボックスの位置を変更します。

IF This.Position < &This.MinPosition + ii_pagesize THEN

This.Position = MinPositionELSE

This.Position = This.Position - ii_pagesizeEND IF

例 2 以下の例は、インスタンス変数 ii_pagesize に保持されたページサイズの値を使用してスクロール ボックスの位置を変更します。また、ページごとにデータウィンドウ コントロールを 10 行ずつ上にスクロールします。

long ll_currow, ll_prevrowThis.Position = This.Position - ii_pagesizell_currow = dw_1.GetRow()ll_prevrow = ll_currow - 10dw_1.ScrollToRow(ll_prevrow)dw_1.SetRow(ll_prevrow)

関連項目 LineUpPageDownPageLeftPageRight

PictureSelected機能 ユーザがリッチテキスト エディット コントロール上のピクチャをク

リックすることによって選択するときに発生します。

イベント ID

イベント ID オブジェクト

pbm_renpictureselected リッチテキスト エディット

Page 315: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 305

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 ユーザがリッチテキスト エディット コントロール rte_1 上のピクチャをクリックすると、そのピクチャが選択されます。PictureSelected イベントの以下のコードは、文書の残りの部分を選択し、その内容を RTF書式のまま文字列へコピーし、別のリッチテキスト エディット rte_2 にその書式付きテキストを貼り付けます。

string ls_transfer_rtf

This.SelectTextAll()ls_transfer_rtf = This.CopyRTF()

rte_2.PasteRTF(ls_transfer_rtf)

関連項目 InputFieldSelected

PipeEnd機能 パイプライン処理が完了するときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 PipeEnd イベントはパイプライン処理のステータスを調べるのに有効です。

パイプライン処理は Start 関数や Repair 関数によって起動します。

パイプライン オブジェクトの使い方の詳細については、『アプリケーション テクニック』マニュアルを参照してください。

イベント ID オブジェクト

pbm_pipeend パイプライン

Page 316: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PipeMeter

306 PowerBuilder

例 以下のスクリプトはパイプライン ユーザ オブジェクトの PipeEnd イベントの例です。パイプライン処理のステータスをスタティック テキスト コントロールに表示します。

ist_status.Text = "パイプライン処理を終了しています ..."

関連項目 PipeMeterPipeStart

PipeMeter機能 パイプライン処理の際、行を読み込んだり書き込んだりした後で行ブ

ロックごとに発生します。ブロックのサイズは、データ パイプラインペインタでパイプラインの[コミット単位]ボックスで指定します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 パイプライン処理は Start 関数や Repair 関数によって起動します。

データ パイプライン ペインタの[コミット単位]ボックスを指定することによって、データベースにコミット処理をする前に何行転送するか指定することができます。PipeMeter イベントは[コミット単位]ボックスで指定した数の行ブロックごとに発生します。

パイプライン オブジェクトの使い方の詳細については、『アプリケーション テクニック』マニュアルを参照してください。

例 以下のコードは、パイプライン ユーザ オブジェクトの PipeMeter イベントに対するものです。転送先データベースに転送されたデータの行数を表示します。

ist_status.Text = String(This.RowsWritten) &+ " 行が転送先のデータベースに書き込まれました。"

関連項目 PipeEndPipeStart

イベント ID オブジェクト

pbm_pipemeter パイプライン

Page 317: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 307

PipeStart機能 パイプライン処理が開始されるときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 PipeStart イベントはパイプライン処理のステータスを調べるのに有効です。

パイプライン処理は Start 関数や Repair 関数によって起動します。

パイプライン オブジェクトの使い方の詳細については、『アプリケーション テクニック』マニュアルを参照してください。

例 以下のスクリプトはパイプライン ユーザ オブジェクトの PipeStart イベントの例です。パイプライン処理のステータスをスタティック テキスト コントロールに表示します。

ist_status.Text = "パイプライン処理の実行を開始しました ..."

関連項目 PipeEndPipeMeter

PrintFooter機能 リッチテキスト エディット コントロール上の文書のフッタが印刷さ

れようとしているときに発生します。

イベントの仕様の変更

PrintHeader イベントおよび PrintFooter イベントは、サポートされなくなりました。これらはどの環境下においても発生しません。実行時にリッチ テキスト コントロール内のページのヘッダおよびフッタを編集するには、ShowHeadFoot 関数を使用してください。

イベント ID オブジェクト

pbm_pipestart パイプライン

Page 318: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PrintHeader

308 PowerBuilder

イベント ID

PrintHeader機能 リッチテキスト エディット コントロール上の文書のヘッダが印刷さ

れようとし

ているときに発生します。

イベントの仕様の変更

PrintHeader イベントおよび PrintFooter イベントは、サポートされなくなりました。これらはどの環境下においても発生しません。実行時にリッチ テキスト コントロール内のページのヘッダおよびフッタを編集するには、ShowHeadFoot 関数を使用してください。

イベント ID

ProgressIndex機能 同期中、同期のプログレス バーの更新後に定期的に発生します。

イベント ID

引数

戻り値 なし

イベント ID オブジェクト

pbm_renprintfooter リッチテキスト エディット

イベント ID オブジェクト

pbm_renprintheader リッチテキスト エディット

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

progress_idx Long 型。同期の進行状態を表します。

progress_max Long 型。同期の進行状態の最大値を表します。

Page 319: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 309

解説 このイベントを使用して、プログレス バーなどの進行状態インジケータを更新します。

progress_max の値が 0 の場合、最後にイベントが起動されてから最大値が変更されていないことを示します。

関連項目 BeginLogScanEndLogScan

ReceivingUploadAck機能 同期エラーの発生後、同期パラメータがアップロードの成功を示して

いる場合に発生します。

イベント ID

引数 なし

戻り値 なし

解説 同期エラー後にクライアントがアップロード確認を受け取る場合に、このイベントを使用してカスタム アクションを追加します。エラー発生前にデータのアップロードが成功したかどうかをこのイベントで確認できます。

関連項目 SendDownloadAckUploadAckWaitForUploadAck

SendDownloadAck機能 send_download_ack 同期パラメータに true が設定された場合に発生し

ます。

イベント ID

イベント ID オブジェクト

なし ULSync

イベント ID オブジェクト

なし ULSync

Page 320: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

PropertyChanged

310 PowerBuilder

引数 なし

戻り値 なし

解説 クライアントがダウンロード確認を送信する場合に、このイベントを使用してカスタム アクションを追加します。

クライアントがダウンロード確認を送信する場合、MobiLink 同期サーバのワーカ スレッドは、クライアントがダウンロードを実行するのを待機する必要があります。クライアントがダウンロード確認を送信しない場合、MobiLink 同期サーバはすぐに解放されて次の同期を実行できます。

関連項目 ReceivingUploadAckUploadAckWaitForUploadAck

PropertyChanged機能 OLE サーバが OLE オブジェクトのプロパティの値を変更した後で発

生します。

イベント ID

引数

戻り値 なし(RETURN 文を使用しないでください)

解説 プロパティの変更通知はすべての OLE サーバでサポートされているわけではありません。PropertyRequestEdit イベントと PropertyChangedイベントは、OLE サーバがプロパティの変更通知をサポートしているときにしか発生しません。

オブジェクトが作成されているときやロードされているときは、プロパティの変更通知は送信されません。変更通知は、バインド可能なプロパティが変更されたときに、送信されます。この場合、プロパティがどのように変更されたかは関係ありません。

イベント ID オブジェクト

なし OLE

引数 説明

propertyname 値が変更されたプロパティの名前。複数のプロパティが変更されるなど、数多くの変更が行われた場合、propertyname は空白文字列となります。

Page 321: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 311

PropertyChanged イベントは、プロパティの値が変更された後に発生します。この際、OLE オートメーション インタフェースを介して、プロパティの新しい値を取得することができます。PropertyChanged イベントでは、値の変更を取り消すことはできません。変更を取り消す処理は、PropertyRequestEdit イベントでスクリプトを記述します。

関連項目 DataChangePropertyRequestEditRenameViewChange

PropertyRequestEdit機能 OLE サーバが OLE コントロール上のオブジェクトのプロパティの値

を変更しようとするときに発生します。

イベント ID

引数

戻り値 なし(RETURN 文を使用しないでください)

解説 プロパティの変更通知はすべての OLE サーバでサポートされているわけではありません。PropertyRequestEdit イベントと PropertyChangedイベントは、OLE サーバがプロパティの変更通知をサポートしているときにしか発生しません。

イベント ID オブジェクト

なし OLE

引数 説明

propertyname String 型。値によって渡されます(値が変更されたプロパティの名前)。

複数のプロパティが変更されるなど、数多くの変更が行われた場合、propertyname は空白文字列となります。

cancelchange Boolean 型。参照によって渡されます。変更がキャンセルされるかどうかを示します。値は以下のとおりです。

• FALSE -(デフォルト)変更されます。

• TRUE - 変更はキャンセルされます。

Page 322: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

RButtonDown

312 PowerBuilder

オブジェクトが作成されているときやロードされているときは、プロパティの変更通知は送信されません。変更通知は、バインド可能なプロパティが変更されたときに、送信されます。この場合、プロパティがどのように変更されたかは関係ありません。

PropertyRequestEdit イベントでは、OLE オートメーション インタフェースを使用して、プロパティの前の値にアクセスし、それを保持できます。値の変更を取り消す場合は、引数 cancelchange に true を設定します。

関連項目 DataChangePropertyChangedRenameViewChange

RButtonDownRButtonDown イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リッチテキスト エディット コントロール以外のコントロールやウィンドウに対して

機能 ウィンドウに対しては、ウィンドウの未使用領域(表示可能で使用可能なオブジェクトが配置されない領域)で、右マウス ボタンが押されるときに発生します。ウィンドウの RButtonDown イベントは、カーソルが表示可能で使用可能なコントロール上にないときに発生します。

コントロールに対しては、コントロール上で右マウス ボタンが押されるときに発生します。

イベント ID

オブジェクト 構文

リッチテキスト エディット コントロール以外のコントロールやウィンドウ

構文 1

リッチテキスト エディット コントロール 構文 2

イベント ID オブジェクト

pbm_rbuttondown ウィンドウや、ウィンドウ上に配置できるリッチテキスト エディット以外のコントロール

Page 323: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 313

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 以下のスクリプトは、ウィンドウの RButtonDown イベントに対するものです。マウス ポインタの位置にポップアップ メニューを表示します。Menu4 はメニュー ペインタで作成され、m_language というメニュー項目を持っています。Menu4 はアクティブ ウィンドウのメニューではないので、スクリプトで作成する必要があります。NewMenu は Menu4のインスタンスです(Menu4 データ型)。

Menu4 NewMenuNewMenu = CREATE Menu4NewMenu.m_language.PopMenu(xpos, ypos)

MDI(Multiple Document Interface)アプリケーションの場合は、PopMenu関数の引数として、MDI フレームとの相対的な座標を指定する必要があります。

NewMenu.m_language.PopMenu( &w_frame.PointerX(), w_frame.PointerY())

関連項目 Clicked

引数 説明

flags UnsignedLong 型。値によって渡されます(押下されたマウス ボタンと修飾キーの値の合計)。

値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 -〔Shift〕

• 8 -〔Ctrl〕

• 16 - 中マウス ボタン

RButtonDown イベントでは常に右マウス ボタンが押下されるため、flags の値には必ず 2 が加算されます。

flags の詳細については、288 ページの「MouseMove」イベントの構文 2 を参照してください。

xpos Integer 型。値によって渡されます(ウィンドウの左辺からポインタまでの距離で、ピクセル単位の値)。

ypos Integer 型。値によって渡されます(ウィンドウの上辺からポインタまでの距離で、ピクセル単位の値)。

Page 324: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

RButtonUp

314 PowerBuilder

構文 2 リッチテキスト エディット コントロールに対して

機能 リッチテキスト エディット コントロールの PopMenu プロパティの値が false に設定されているときに、ユーザがリッチテキスト エディットコントロール上で右マウス ボタンを押すときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 リッチテキスト エディット コントロールの PopMenu プロパティがtrue のときは、リッチテキスト エディットの標準ポップアップ メニューが表示され、RButtonDown イベントは発生しません。

RButtonDown イベントを使用することによって、ポップアップ メニューをカスタマイズすることができます。

関連項目 ClickedRButtonDown

RButtonUp機能 右マウス ボタンが放されるときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。1 処理を行いません。

関連項目 RButtonDown

イベント ID オブジェクト

pbm_renrbuttondown リッチテキスト エディット

イベント ID オブジェクト

pbm_renrbuttonup リッチテキスト エディット

Page 325: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 315

RecognitionResult機能 インクエディット コントロールが RecognizeText 関数への呼び出しの

結果を取得するときに発生します。

イベント ID

引数 なし

戻り値 なし

例 RecognitionResult イベントの次のコードは、アプリケーションが ie_idインクエディット コントロールの Text プロパティが更新されている間数秒間待ち、それから文字列変数 ls_inktext に認識されたテキストを書き出せるようにします。

Sleep(3)ls_inktext = ie_id.Text

関連項目 GetFocusStroke

RemoteExec機能 DDE クライアント アプリケーションがコマンドを送ったときに発生

します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 RemoteRequestRemoteSend

イベント ID オブジェクト

pbm_inkerecognition インクエディット

イベント ID オブジェクト

pbm_ddeexecute ウィンドウ

Page 326: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

RemoteHotLinkStart

316 PowerBuilder

RemoteHotLinkStart機能 DDE クライアント アプリケーションがホット リンクを開始しようと

するときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 DDE クライアントと DDE サーバが両方とも PowerBuilder アプリケーションの場合、クライアント アプリケーションのスクリプトにある以下のコードによって、サーバ アプリケーション ウィンドウの RemoteHotLinkStart イベントを起動します。

StartHotLink("mysle","pb_dde_server","mytest")

また、サーバ アプリケーションの RemoteHotLinkStart イベントで、ホット リンクが開始されたことを示す Boolean 型のインスタンス変数を設定します。

ib_hotlink = TRUE

関連項目 HotLinkAlarmRemoteHotLinkStopSetDataDDEStartServerDDEStopServerDDE

RemoteHotLinkStop機能 DDE クライアント アプリケーションがホット リンクを終了しようと

するときに発生します。

イベント ID

引数 なし

イベント ID オブジェクト

pbm_ddeadvise ウィンドウ

イベント ID オブジェクト

pbm_ddeunadvise ウィンドウ

Page 327: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 317

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 DDE クライアントと DDE サーバが両方とも PowerBuilder アプリケーションの場合、クライアント アプリケーションのスクリプトにある以下のコードによって、サーバ アプリケーション ウィンドウの RemoteHotLinkStop イベントを起動します。

StopHotLink("mysle","pb_dde_server","mytest")

また、サーバ アプリケーションの RemoteHotLinkStop イベントで、ホット リンクが終了されたことを示す Boolean 型のインスタンス変数を設定します。

ib_hotlink = FALSE

関連項目 HotLinkAlarmRemoteHotLinkStartSetDataDDEStartServerDDEStopServerDDE

RemoteRequest機能 DDE クライアント アプリケーションがデータを要求するときに発生

します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 RemoteExecRemoteSend

イベント ID オブジェクト

pbm_dderequest ウィンドウ

Page 328: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

RemoteSend

318 PowerBuilder

RemoteSend機能 DDE クライアント アプリケーションがデータを送ったときに発生し

ます。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 RemoteExecRemoteRequest

Rename機能 サーバ アプリケーションが、コントロールにオブジェクトの名前が変

更されたことを通知するときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

解説 このイベントの処理中に、OLE コントロールの ObjectData Blob 値を取得したい場合は、このコントロールに対してユーザ イベントをポストしないと、実行時エラーが発生します。

関連項目 DataChangePropertyRequestEditPropertyChangedViewChange

イベント ID オブジェクト

pbm_ddepoke ウィンドウ

イベント ID オブジェクト

pbm_omnrename OLE

Page 329: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 319

Resize機能 ユーザの操作やスクリプトによって、ウィンドウやデータウィンドウ

コントロールのクライアント領域が開かれたり、サイズが変更されたりしたときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

イベント ID オブジェクト

pbm_dwnresize データウィンドウ

pbm_size ウィンドウ

引数 説明

sizetype UnsignedLong 型。値によって渡されます。値は以下のとおりです。

• 0 -(SIZE_RESTORED)ウィンドウやデータウィンドウ コントロールのサイズが変更されました。最小化や最大化が行われたのではなく、ユーザが枠をドラッグしたか、スクリプトで Resize 関数が呼び出されました。

• 1 -(SIZE_MINIMIZED)ウィンドウやデータウィンドウ コントロールが最小化されました。

• 2 -(SIZE_MAXIMIZED)ウィンドウやデータウィンドウ コントロールが最大化されました。

• 3 -(SIZE_MAXSHOW)ウィンドウはポップアップ ウィンドウか何かで、アプリケーションで本来のサイズに戻されました(データウィンドウ コントロールには適用されません)。

• 4 -(SIZE_MAXHIDE)ウィンドウはポップアップ ウィンドウか何かで、アプリケーションで最大化されました(データウィンドウ コントロールには適用されません)。

newwidth Integer 型。値によって渡されます。ウィンドウやデータウィンドウ コントロールの幅(PowerBuilder 単位系)。

newheight Integer 型。値によって渡されます。ウィンドウやデータウィンドウ コントロールの長さ(PowerBuilder 単位系)。

Page 330: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

RightClicked

320 PowerBuilder

RightClickedRightClicked イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リストビュー コントロールとタブ コントロールに対して

機能 ユーザがリストビュー コントロール上や、タブ コントロールのタブ部分で右マウス ボタンをクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 タブ コントロールでは、ユーザがコントロールの表示エリアをクリックすると RightClicked イベントではなく RButtonDown イベントが発生します。

例 以下の例は、リストビュー コントロールの RightClicked イベントに対するものです。ユーザが右マウス ボタンをクリックするとポップアップ メニューを表示します。

// m_main 型のメニュー変数を宣言しますm_main m_lv_popmenu// メニュー変数のインスタンスを作成しますm_lv_popmenu = CREATE m_main// ポインタの位置にメニューを表示しますm_lv_popmenu.m_entry.PopMenu(Parent.PointerX(), &

Parent.PointerY())

オブジェクト 構文

リストビュー コントロール、タブ コントロール

構文 1

ツリービュー コントロール 構文 2

イベント ID オブジェクト

pbm_lvnrclicked リストビュー

pbm_tcnrclicked タブ

引数 説明

index Integer 型。値によって渡されます(ユーザがクリックしたリストビュー項目やタブ ページのインデックス)。

Page 331: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 321

関連項目 ClickedRightDoubleClicked

構文 2 ツリービュー コントロールに対して

機能 ユーザがツリービュー コントロール上で右マウス ボタンをクリックすると発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 以下の例は、ツリービュー コントロールの RightClicked イベントに対するものです。ユーザが右マウス ボタンをクリックするとポップアップ メニューを表示します。

// m_main 型のメニュー変数を宣言しますm_main m_tv_popmenu

// メニュー変数のインスタンスを作成しますm_tv_popmenu = CREATE m_main

// ポインタの位置にメニューを表示しますm_tv_popmenu.m_entry.PopMenu(Parent.PointerX(), &

Parent.PointerY())

関連項目 ClickedRightDoubleClicked

イベント ID オブジェクト

pbm_tvnrclicked ツリービュー

引数 説明

handle Long 型。値によって渡されます(ユーザがクリックしたツリービュー項目のハンドル)。

Page 332: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

RightDoubleClicked

322 PowerBuilder

RightDoubleClickedRightDoubleClicked イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リストビュー コントロールとタブ コントロールに対して

機能 ユーザがリストビュー コントロール上や、タブ コントロールのタブ部分で右マウス ボタンをダブルクリックするときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 以下の例は、ユーザがリストビュー項目を右マウス ボタンでダブルクリックすると、その項目をリストビューから削除します。また、残ったリストビュー項目を整列します。

integer li_rtn

// 項目を削除します。li_rtn = This.DeleteItem(index)

IF li_rtn = 1 THENThis.Arrange()

ELSEMessageBox("エラー ", "削除に失敗しました。")

END IF

オブジェクト 構文

リストビュー コントロール、タブ コントロール

構文 1

ツリービュー コントロール 構文 2

イベント ID オブジェクト

pbm_lvnrdoubleclicked リストビュー

pbm_tcnrdoubleclicked タブ

引数 説明

index Integer 型。値によって渡されます(ユーザがダブルクリックしたリストビュー項目やタブ ページのインデックス)。

Page 333: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 323

関連項目 DoubleClickedRightClicked

構文 2 ツリービュー コントロールに対して

機能 ユーザがツリービュー コントロール上で右マウス ボタンをダブルクリックすると発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 以下の例は、ユーザがコントロールを右マウス ボタンでダブルクリックすると、ツリービューのツリー表示を展開したり、閉じたりします。

IF This.HasLines = FALSE THENThis.HasLines = TRUEThis.LinesAtRoot = TRUE

ELSEThis.HasLines = FALSEThis.LinesAtRoot = FALSE

END IF

関連項目 DoubleClickedRightClicked

イベント ID オブジェクト

pbm_tvnrdoubleclicked ツリービュー

引数 説明

handle Long 型。値によって渡されます(ユーザがダブルクリックしたツリービュー項目のハンドル)。

Page 334: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Save

324 PowerBuilder

Save機能 サーバ アプリケーションが、データが保存されたことをコントロール

に通知するときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

解説 このイベントの処理中に、OLE コントロールの ObjectData Blob 値を取得したい場合は、このコントロールに対してユーザ イベントをポストしないと、実行時エラーが発生します。

例 以下の例では、データベースのテーブルに OLE オブジェクトの変更履歴を残します。ユーザが OLE コントロールに Excel のスプレッドシートを保存するときに、データウィンドウに現行の日付を設定し、データベース テーブルに保存します。

long ll_row// Excel ファイルの情報を持つデータ行を検索します。ll_row = dw_1.Find("file_name = 'expenses.xls'", &

1, 999)

IF ll_row > 0 THEN// 見つかったデータ行を現行の行にします。dw_1.SetRow(ll_row)

// last_updated カラムに今日の日付を設定します。dw_1.Object.last_updated[ll_row] = Today( )

// データウィンドウを更新した後、最新の情報を取得します。dw_1.Update( )dw_1.Retrieve( )

ELSEMessageBox("検索 ", "データ行が見つかりません。")

END IF

関連項目 CloseSaveObject

イベント ID オブジェクト

pbm_omnsave OLE

Page 335: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 325

SaveObject機能 サーバ アプリケーションがコントロール内のオブジェクトを保存す

るときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

解説 サーバが、埋め込みオブジェクトのデータを保存するのに OLE コントロールの ObjectData blob 値を取得したい場合に、SaveObject イベントを使用すると効果的です。Save イベントや Close イベントとは違って、SaveObject イベントは、実行時エラーを回避するためにこのコントロールにユーザ イベントをポストする必要がありません。

個々のサーバの振る舞いに違いがあることから、このイベントはすべてのサーバ アプリケーション間で一貫して発生するわけではありません。Microsoft Word や Microsoft Excel を使用している場合、SaveObject イベントは、コントロールの DisplayType プロパティがDisplayAsActiveXDocument! または DisplayAsIcon! に設定されているときに発生します。DisplayAsContent! では発生しません。Paint Shop Proなどのそのほかのアプリケーションの場合は、DisplayType プロパティが DisplayAsContent! のときに発生します。DisplayAsActiveXDocument!のときには発生しません。

サーバによっては PowerBuilder Save イベントも発生するものがあり、2 つのイベントの相対的なタイミングは保証されていないので、プログラムでは SaveObject イベントだけを処理する必要があります。

例 この例では、ユーザまたはサーバ アプリケーションが OLE コントロール内の Word 文書を保存すると、データがファイルに Blob として保存されます。このファイルは Word 文書として開くことができます。

blob l_myobjectdatal_myobjectdata = this.objectdatainteger l_file

l_file = FileOpen("c:\myfile.doc", StreamMode!, Write!)FileWrite( l_file, l_myobjectdata )FileClose( l_file )

関連項目 CloseSave

イベント ID オブジェクト

pbm_omnsaveobject OLE

Page 336: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Selected

326 PowerBuilder

Selected機能 ユーザが矢印キーやマウスを使い、メニュー項目を実行せずに、ハイ

ライト表示(選択)するときに発生します。

イベント ID

引数 なし

戻り値 なし(RETURN 文を使用しないでください)

解説 Selected イベントを使用すれば、メニュー項目に対するマイクロヘルプを表示できます。マイクロヘルプのテキストは、通常、メニュー項目の Tag プロパティに格納しておきます。

例 以下の例は、現行メニュー項目の Tag 値を使用してヘルプ テキストを表示します。wf_SetMenuHelp ウィンドウ関数が、渡されたテキスト(Tag値)を取り、マルチライン エディット コントロール上に表示します。Timer 関数と Timer イベントがヘルプ テキストの消去に使用されています。

Selected イベントの以下のコードで、テキストを設定するウィンドウ関数を呼び出します。

w_test.wf_SetMenuHelp(This.Tag)

wf_SetMenuHelp 関数には以下のコードが記述されていて、マルチライン エディット mle_menuhelp にテキストを設定します。menuhelpstringは、関数の引数名です。

mle_menuhelp.Text = menuhelpstringTimer(4)

Timer イベントには以下のコードが記述されています。これは、ヘルプテキストを消去し、タイマーをオフにします。

w_test.wf_SetMenuHelp("")Timer(0)

関連項目 Clicked

イベント ID オブジェクト

なし メニュー

Page 337: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 327

SelectionChangedSelectionChanged イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リストボックスを表示するコントロールに対して

機能 コントロール内のある項目が選択されるときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ダウンによって表示されるリストボックスでは、SelectionChanged イベントはドロップダウン部分の項目選択に適用されます。エディット部分には適用されません。

SelectionChanged イベントは、ユーザがリスト上の項目をクリックするときに発生します。現行の選択項目に対するクリックも同様です。項目がマウスによって選択される場合は、Clicked イベントないしDoubleClicked イベントが SelectionChanged イベントの後に発生します。

オブジェクト 構文

リストボックスを表示するコントロール(ドロップダウン リストボックス、ドロップダウン ピクチャ リストボックス、リストボックス、ピクチャ リストボックス)

構文 1

タブ コントロール 構文 2

ツリービュー コントロール 構文 3

イベント ID オブジェクト

pbm_cbnselchange ドロップダウン リストボックス、ドロップダウン ピクチャ リストボックス

pbm_lbnselchange リストボックス、ピクチャ リストボックス

引数 説明

index Integer 型。値によって渡されます(新たに選択された項目のインデックス)。

Page 338: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

SelectionChanged

328 PowerBuilder

例 以下の例は、PowerBuilder の Code Examples アプリケーションのウィンドウ w_graph_sheet_with_list にある lb_value リストボックスのためのものです。ユーザがリストから値を選択すると、選択された値を系列としてグラフ gr_1 が表示されます。リストボックスの MultiSelect プロパティは true に設定されているため、index は無効です。スクリプトは項目をすべてチェックして、どの項目が選択されているか調べます。

integer itemcount,i,rstring ls_colname

gr_1.SetRedraw(FALSE)

// グラフから項目、系列、データをすべて消去します。gr_1.Reset(All!)

// 選択された値をすべてループして、ユーザが指定した// 系列だけを作成します。FOR i = 1 to lb_value.TotalItems()

IF lb_value.State(i) = 1 THENls_colname = lb_value.Text(i)

// ウィンドウ関数を呼び出してグラフを設定します。wf_set_a_series(ls_colname, ls_colname, &lb_category.text(1))

END IFNEXTgr_1.SetRedraw(TRUE)

関連項目 Clicked

構文 2 タブ コントロールに対して

機能 タブ ページが選択されるときに発生します。

イベント ID

引数

イベント ID オブジェクト

pbm_tcnselchanged タブ

引数 説明

oldindex Integer 型。値によって渡されます(今まで選択されていたタブ ページのインデックス)。

newindex Integer 型。値によって渡されます(新たに選択されたタブ ページのインデックス)。

Page 339: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 329

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 タブ コントロールが作成され、最初に選択されるタブ ページが設定されるときにも SelectionChanged イベントが発生します。

関連項目 ClickedSelectionChanging

構文 3 ツリービュー コントロールに対して

機能 ツリービュー コントロールの項目が選択されるときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 SelectionChanged イベントは SelectionChanging イベントの後に発生します。

例 以下のコードは SelectionChanged イベント スクリプトの例です。

TreeViewIteml_tvinew, l_tviold

//ツリービュー項目の前の選択を取得します。This.GetItem(oldhandle, l_tviold)

//ツリービュー項目の現行の選択を取得します。This.GetItem(newhandle, l_tvinew)

//sle_get に 2 つの項目のラベルを表示します。sle_get.Text = "Selection changed from " &

+ String(l_tviold.Label) + " to " &

イベント ID オブジェクト

pbm_tvnselchanged ツリービュー

引数 説明

oldhandle Long 型。値によって渡されます(今まで選択されていたツリービュー項目のハンドル)。

newhandle Long 型。値によって渡されます(新たに選択されたツリービュー項目のハンドル)。

Page 340: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

SelectionChanging

330 PowerBuilder

+ String(l_tvinew.Label)

関連項目 ClickedSelectionChanging

SelectionChangingSelectionChanging イベントは、オブジェクトによって引数の内容が異なります。

構文 1 タブ コントロールに対して

機能 別のタブ ページが選択されようとしているときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 項目の選択が行われます。1 項目の選択が行われません。

解説 SelectionChanging イベントは、選択項目の変更を無効にしたり、新たに選択されたタブ ページが表示される前にそのタブ ページに対する特別な処理を行ったりするために使用します。CreateOnDemand プロパティが true で、そのタブ ページが選択されたのが初めてだった場合、タブ ページ上のコントロールはまだ存在しておらず SelectionChangingイベントで参照することはできません。

オブジェクト 構文

タブ コントロール 構文 1

ツリービュー コントロール 構文 2

イベント ID オブジェクト

pbm_tcnselchanging タブ

引数 説明

oldindex Integer 型。値によって渡されます。今まで選択されていたタブ ページのインデックス。

newindex Integer 型。値によって渡されます。新たに選択されたタブ ページのインデックス。

Page 341: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 331

例 以下のコードは、ユーザがタブを選択すると、そのタブ ページ上のデータウィンドウ コントロールのサイズを、別のデータウィンドウ コントロールのサイズに合わせます。このサイズの変更は、タブ ページが表示される前に行われます。この例は、PowerBuilder Code Examplesの w_phone_dir ウィンドウにある tab_uo タブのものです。

u_tab_dirluo_Tabluo_Tab = This.Control[newindex]luo_Tab.dw_dir.Height = dw_list.Heightluo_Tab.dw_dir.Width = dw_list.Width

関連項目 ClickedSelectionChanged

構文 2 ツリービュー コントロールに対して

機能 ツリービュー コントロールの項目選択が変わろうとしているときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 項目の選択が行われます。1 項目の選択が行われません。

解説 SelectionChanging イベントは SelectionChanged イベントの前に発生します。

例 以下のスクリプトは、ツリービュー項目の選択状況をシングルラインエディットに表示します。

TreeViewItem l_tvinew, l_tviold

// ツリービュー項目の前の選択を取得します。This.GetItem(oldhandle, l_tviold)

イベント ID オブジェクト

pbm_tvnselchanging ツリービュー

引数 説明

oldhandle Long 型。値によって渡されます(今まで選択されていたツリービュー項目のハンドル)。

newhandle Long 型。値によって渡されます(新たに選択されたツリービュー項目のハンドル)。

Page 342: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Show

332 PowerBuilder

// ツリービュー項目の現行の選択を取得します。This.GetItem(newhandle, l_tvinew)

//2 つの項目のラベルを表示します。sle_status.Text = "Selection changed from " &

+ String(l_tviold.Label) + " to " &+ String(l_tvinew.Label)

関連項目 ClickedSelectionChanged

Show機能 ウィンドウが表示される直前に発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Show イベントはウィンドウが開かれるときに発生します。

イベント ID オブジェクト

pbm_showwindow ウィンドウ

引数 説明

show Boolean 型。値によって渡されます(ウィンドウが表示されようとしているかどうかを示し、値は常に true となります)。

status Long 型。値によって渡されます(ウィンドウのステータス)。

値は以下のとおりです。

• 0 - 現行ウィンドウだけに影響があります。

• 1 - 親ウィンドウも最小化されようとしています。またはポップアップ ウィンドウが非表示になろうとしています。

• 3 - 親ウィンドウも表示されようとしているか、最大化されようとしています。またはポップアップ ウィンドウが表示されようとしています。

Page 343: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 333

関連項目 ActivateHideOpen

SortSort イベントは、オブジェクトによって引数の内容が異なります。

構文 1 リストビュー コントロールに対して

機能 リストビューがソートされているときに、リストビュー項目どうしを比較するたびに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

-1 index1 は index2 より小さい。0 index1 と index2 は等しい。1 index1 は index2 より大きい。

オブジェクト 構文

リストビュー コントロール 構文 1

ツリービュー コントロール 構文 2

イベント ID オブジェクト

pbm_lvnsort リストビュー

引数 説明

index1 Integer 型。値によって渡されます(ソート処理の際に比較されようとしている 1 番目のリストビュー項目のインデックス)。

index2 Integer 型。値によって渡されます(比較されようとしている 2 番目のリストビュー項目のインデックス)。

column Integer 型。値によって渡されます(ソートの対象となっているカラムの番号)。

Page 344: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Sort

334 PowerBuilder

解説 Sort イベントによってソートされている項目の順序を細かく制御できます。各項目のプロパティを調べ適切なリターン コードを返すことによって、項目間のソート順序を指示します。

Sort イベントは、リストビュー項目を複数の条件(PictureIndex や Labelなど)でソートしたいときなどに有効です。

Sort イベントは、Sort イベントを呼び出して発生させるか、Sort 関数でUserDefinedSort! 引数を用いて発生させることができます。

例 以下のスクリプトは、リストビュー項目を PictureIndex プロパティとLabel プロパティによってソートするものです。最初に PictureIndex でソートし、次に Label でソートします。

ListViewItem lvi, lvi2

This.GetItem(index1, lvi)This.GetItem(index2, lvi2)

IF lvi.PictureIndex > lvi2.PictureIndex THENRETURN 1

ELSEIF lvi.PictureIndex < lvi2.PictureIndex THENRETURN -1

ELSEIF lvi.label > lvi2.label THENRETURN 1

ELSEIF lvi.label < lvi2.label THENRETURN -1

ELSERETURN 0

END IF

構文 2 ツリービュー コントロールに対して

機能 ツリービューがソートされているときに、ツリービュー項目どうしを比較するたびに発生します。

イベント ID

イベント ID オブジェクト

pbm_tvnsort ツリービュー

Page 345: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 335

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

-1 handle1 は handle2 より小さい。0 handle1 と handle2 は等しい。1 handle1 は handle2 より大きい。

解説 Sort イベントによってソートされている項目の順序を細かく制御できます。各項目のプロパティを調べ適切なリターン コードを返すことによって、項目間のソート順序を指示します。

Sort イベントは、ツリービュー項目を複数の条件(PictureIndex や Labelなど)でソートしたいときなどに有効です。

Sort イベントは、Sort イベントを呼び出して発生させるか、Sort 関数でUserDefinedSort! 引数を用いて発生させることができます。

例 以下のスクリプトは、ツリービュー項目を PictureIndex プロパティとLabel プロパティによってソートするものです。最初に PictureIndex でソートし、次に Label でソートします。

TreeViewItem tvi, tvi2

This.GetItem(handle1, tvi)This.GetItem(handle2, tvi2)

IF tvi.PictureIndex > tvi2.PictureIndex THENRETURN 1

ELSEIF tvi.PictureIndex < tvi2.PictureIndex THENRETURN -1

ELSEIF tvi.Label > tvi2.Label THENRETURN 1

ELSEIF tvi.Label < tvi2.Label THENRETURN -1

ELSERETURN 0

END IF

引数 説明

handle1 Long 型。値によって渡されます(ソート処理の際に比較されようとしている 1 番目のツリービュー項目のハンドル)。

handle2 Long 型。値によって渡されます(比較されようとしている2 番目のツリービュー項目のハンドル)。

Page 346: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

SQLPreview

336 PowerBuilder

SQLPreview機能 SQL 文が DBMS へ送信される直前に発生します。

イベント ID

引数

戻り値 Long 型。リターン コードを設定しイベントの結果に影響を与えます。

0 処理を続行する1 処理を停止する

解説 埋め込み SQL での使用 このイベントは、SQL 文が DBMS に渡される前に起動します。

データウィンドウ / データストアでの使用 Transaction オブジェクトのこのイベントを、SQLPreview イベントも定義しているデータウィンドウで使用する場合、データウィンドウのイベントが先に起動されます。データウィンドウの SQLPreview イベントの戻り値が 0 (処理を続行する)の場合、Transaction オブジェクトの SQLPreview イベントが次に起動されます。

例 以下の埋め込み SQL カーソルの例では、SQLPreview イベントは OPENEmp_curs; 文が実行される直前に起動されます。

DECLARE Emp_cur CURSOR FOR SELECT employee.emp_number,employee.emp_name FROM employee

WHERE employee.emp_salary > :Sal_var ;OPEN Emp_curs ;

以下のダイナミック SQL の例では、SQLPreview イベントは EXECUTEDYNAMIC my_proc DESCRIPTOR SQLDA 文が実行される直前に起動されます。

PREPARE SQLSA FROM "execute @rc = myproc @parm1=?,@parm2=? OUTPUT ";

DESCRIBE SQLSA INTO SQLDA ;

イベント ID オブジェクト

なし Transaction オブジェクト

引数 説明

sqlfunc SQLFunction のシステム列挙型で、値によって渡されます。この列挙型は、データベース アクティビティを開始した関数 を 示 し ま す。こ の 列 挙 型 の 値 は、SQLDBInsert!、S Q L D B U p d a t e !、S Q L D B D e l e t e !、S Q L D B S e l e c t !、SQLDBProcedure!、SQLDBRPC!、SQLDBOthers! です。

sqlsyntax String 型。値で渡されます。この SQL 文のフル テキストです。

Page 347: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 337

DECLARE my_proc DYNAMIC PROCEDURE FOR SQLSA ;SetDynamicParm(SQLDA, 1, var1)SetDynamicParm(SQLDA, 2, var2)EXECUTE DYNAMIC my_proc DESCRIPTOR SQLDA ;

関連項目 DBError『データウィンドウ リファレンス』の SQLPreview

Start機能 アニメーションの再生が開始されるときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 Stop

Stop機能 アニメーションの再生が停止されるときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 Timer

イベント ID オブジェクト

pbm_animatestart アニメーション

イベント ID オブジェクト

pbm_animatestop アニメーション

Page 348: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Stroke

338 PowerBuilder

Stroke機能 ユーザが新しいストロークを描画するときに発生します。

イベント ID

引数 なし

戻り値 Boolean 型。ストロークを消去する場合は true を返し、さもなければfalse を返します。

解説 インクエディット コントロールの InkMode プロパティが InkDisabled!に設定されるか、インクピクチャ コントロールの InkCollectionMode プロパティが GestureOnly! に設定されると、Stroke イベントは発生しません。

関連項目 GestureRecognitionResult

SyncPreview機能 同期プロセスの開始直前に生成された dbmlsync コマンドの引数を返し

ます。

イベント ID

引数

戻り値 なし

解説 このイベントを使用して、dbmlsync コマンド ラインの引数を受け取って表示します。

イベント ID オブジェクト

pbm_inkestroke、pbm_inkpstroke

インクエディット、インクピクチャ

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

command_args String 型。参照によって渡されます。同期プロセスを開始するための dbmlsync コマンドの引数を示します。

Page 349: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 339

このイベントは、Synchronize 関数が dbmlsync を起動する直前に呼び出します。生成された dbmlsync コマンドの引数は、command_args 文字列として参照によって渡されます。command_args の文字列は、PowerScriptコードまたはデバッガを使用して変更できます。command_args を変更すると、Synchronize 関数が新しい文字列を使用します。

関連項目 BeginDownloadBeginSync

SystemError機能 try-catch ブロックで処理されていない重大なランタイム エラー(存在

しないウィンドウを開こうとしたなど)が起こるときに発生します。

イベント ID

引数 なし

戻り値 なし(RETURN 文を使用しないでください)

解説 SystemError イベントに対するスクリプトが記述されていない場合、メッセージ ボックスに PowerBuilder のエラー番号とエラー メッセージが表示されます。エラー メッセージの詳細については、PowerBuilderの『ユーザーズ ガイド』マニュアルを参照してください。

SystemError イベントでスクリプト全体をコメント アウトする場合、Windows フォーム アプリケーションはイベントのスクリプトがないかのように動作し、メッセージボックスが表示されますが、標準のPowerBuilder アプリケーションでは、まだイベントが起動されて、メッセージ ボックスは表示されません。

外部定義オブジェクトやデータウィンドウに関するエラーが起こった場合、ExternalException イベントや Error イベントでエラーを処理することによって、SystemError イベントの発生を回避することができます。ExternalException イベントと Error イベントは、旧バージョンとの互換性用に使用可能になっています。

イベント ID オブジェクト

なし アプリケーション

Page 350: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

SystemKey

340 PowerBuilder

SystemError イベントは、エラーを try-catch ブロック内で処理することにより発生を回避できます。精密な例外処理コードを使用すれば、エラー状態から回復して、ユーザはそのままアプリケーションを実行し続けることができます。例外処理についての詳細は、『アプリケーション テクニック』マニュアルを参照してください。

SystemError イベントが発生すると、現行のスクリプトは終了し、システムは不安定な状態になります。SystemError イベントが発生したときは、アプリケーションを実行し続けないようにしてください。イベント スクリプトを使ってクリーンアップし、DBMS から切断後、アプリケーションを終了させてください。

例 以下のコードは SystemError イベント スクリプトの例です。アプリケーションをただちに中断します。

HALT CLOSE

関連項目 ErrorExternalExceptionTRY...CATCH...FINALLY...END TRY

SystemKey機能 挿入ポイントがライン エディットにない状況で、ユーザが〔Alt〕また

は〔Alt〕とともに別のキーを押すときに発生します。

イベント ID

引数

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

イベント ID オブジェクト

pbm_syskeydown ウィンドウ

引数 説明

key KeyCode 型。値によって渡されます。KeyCode カタログデータ型の値は、KeyA! や KeyF1! のように、どのキーが押されたかを示します。

keyflags UnsignedLong 型。値によって渡されます(キーとともに押された修飾キー)。〔Shift〕キー以外の修飾キーが渡されることはありません。

Page 351: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 341

解説 〔Ctrl〕を〔Alt〕とともに押すと、SystemKey イベントは発生しません。

例 以下の例は、〔Alt〕とともに押されたキーを表示するものです。

string ls_key

CHOOSE CASE key

CASE KeyF1!ls_key = "F1"

CASE KeyA!ls_key = "A"

CASE KeyF2!ls_key = "F2"

END CHOOSE

次の例では、ユーザが〔Alt〕+〔Shift〕+〔F1〕を押すとビープ音を発します。

IF keyflags = 1 THENIF key = KeyF1 THEN

Beep(1)END IF

END IF

関連項目 Key

Timer機能 Start 関数または Timer 関数が呼び出された後、指定した秒数が経過す

るときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 以下の例は、タイミング オブジェクトの Timer イベントとウィンドウの Timer イベントの使い方を示します。

イベント ID オブジェクト

pbm_timer タイミングまたはウィンドウ

Page 352: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

Timer

342 PowerBuilder

タイミング オブジェクトの使い方 以下のスクリプトは、タイミング オブジェクトを使って、指定した間隔でデータベースから取り出されたカスタマ リストを更新します。アプリケーションのメイン ウィンドウw_main 内のデータウィンドウ コントロールには、カスタマのリストと、Start Timer と Retrieve の 2 つのボタンが表示されます。また、ウィンドウの Open イベントはデータベースに接続します。

CONNECT using SQLCA;

IF sqlca.sqlcode <> 0 THENMessageBox("データベースに接続 ", &

sqlca.sqlerrtext)END IF

Start Timer ボタンの Clicked イベントに以下のコードを記述すると、タイミング オブジェクトのインスタンス nvo_timer を作成し、タイミングの間隔を指定するレスポンス ウィンドウを開きます。そして、指定した間隔で Timer イベントが開始します。

MyTimer = CREATE nvo_timeropen(w_interval)MyTimer.Start(d_interval)

MessageBox("タイマー ", "タイマー開始間隔は " & + string(MyTimer.interval) + " 秒です。")

以下のコードを、タイミング オブジェクトの Constructor イベントに記述すると、datastore のインスタンスを作成します。

ds_datastore = CREATE datastore

タイミング オブジェクトの Timer イベントは、datastore を更新するrefresh_custlist オブジェクト関数を呼び出します。次に、refresh_custlistのコードを示します。

long ll_rowcount

ds_datastore.dataobject = "d_customers"ds_datastore.SetTransObject (SQLCA)ll_rowcount = ds_datastore.Retrieve()

RETURN ll_rowcount

w_main の Retrieve ボタンで、データストア オブジェクトのデータをデータウィンドウ コントロールと簡単に共有できます。

ds_datastore.ShareData(dw_1)

Page 353: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 343

ウィンドウ オブジェクトの使い方 次の例は、現在の時刻をウィンドウのスタティック テキスト コントロールに表示させます。ウィンドウのOpen イベントに対するスクリプトで Timer 関数を呼び出すとタイマーが開始します。Timer イベントに対するスクリプトは、表示される時刻をリフレッシュします。

ウィンドウの Open イベントのスクリプトに、以下のコードが記述されています。このコードは、初期状態の時間を表示しタイマーを開始します。

st_time.Text = String(Now(), "hh:mm")Timer(60)

次のステートメントは、1 分ごとに起動するウィンドウ Timer イベントに対するスクリプトの中に記述されています。現在の時刻をスタティック テキスト コントロール st_time に表示します。

st_time.Text = String(Now(), "hh:mm")

関連項目 StartTimer

ToolbarMoved機能 MDI フレーム ウィンドウにおいて、ユーザがフレームバーまたはシー

トバーを移動するときに発生します。

イベント ID

引数 なし

戻り値 Long 型。リターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ToolbarMoved イベントは MDI シート ウィンドウに対しては起動できません。

ツールバーの位置に関する情報を取得するには、GetToolbar 関数やGetToolbarPos 関数を呼び出してください。

SetToolbarPos 関数によってツールバーの位置が変更されると、このイベントが発生します。

イベント ID オブジェクト

pbm_tbnmoved ウィンドウ

Page 354: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

UploadAck

344 PowerBuilder

UploadAck機能 アップロード処理の完了時に発生します。

イベント ID

引数

戻り値 なし

解説 このイベントを使用して、dbmlsync が MobiLink 同期サーバからアップロード ストリームの確認を受け取った後にカスタム アクションを追加します。

uploadack_status 引数の値は以下のとおりです。

• StatCommitted アップロード ストリームが MobiLink 同期サーバによって受信され、コミットされたことを示します。

• StatRetry MobiLink 同期サーバとリモート データベースに、アップロード ストリームを開始するログ オフセットの異なる値が存在することを示します。MobiLink 同期サーバによりアップロードストリームがコミットされませんでした。コンポーネントは、MobiLink 同期サーバのログ オフセットから開始する別のアップロード ストリームの送信を試みます。

• StatFailed MobiLink 同期サーバがアップロード ストリームをコミットしなかったことを示します。

関連項目 BeginUploadConnectMobiLinkEndUploadWaitForUploadAck

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

uploadack_status Long 型。アップロード ストリームの処理後にMobiLink からリモートに返されるステータスを示します。以下に値を示します。

• 0 (StatCommitted)

• 1 (StatFailed)

• 248 (StatRetry)

これらの値の意味については、以下の解説を参照してください。

Page 355: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 345

UserString機能 ユーザがコントロールの内容を編集し、コントロールがフォーカスを

失ったときに発生します。AllowEdit プロパティに true を設定しておく必要があります。

イベント ID

引数

戻り値 Long 型。リターン コードは無視されます。

解説 ユーザが日付ピッカー コントロールにタブ移動すると、通常の編集モードになり、日付の一部分(年、月、または日)を編集することができます。AllowEdit プロパティに true を設定すると、ユーザは〔F2〕を押すか、コントロール内をクリックして、コントロール内のすべてのテキストを編集するために選択できます。コントロールがフォーカスを失うと、コントロールは通常の編集モードに戻り、コントロール内のテキストが有効な日付であるかをテストできるように、UserStringイベントが発生します。テキストが修正されていてもされていなくても UserString イベントは発生します。

コントロールに入力されるテキストは、有効な DateTime 変数に変換できる形式である必要があります。ユーザが入力した文字列を有効なDateTime 値に変換できる場合は、解析された DateTime 値を dtm 引数に割り当てて、コントロールの Value プロパティを変更できます。

ValueChanged イベントは、値が変更された場合でも UserString イベントの後に発生します。

例 UserString イベント スクリプトの次のコードは、ユーザが入力した文字列が有効な日付であるかどうかをテストします。有効な場合は、コードは日付を DateTime に変換するので、日付ピッカーの Value プロパティに割り当てることができます。有効でない場合は、ユーザにエラーメッセージを表示します。

イベント ID オブジェクト

pbm_dtpuserstring 日付ピッカー

引数 説明

flag Unsigned long 型。参照によって渡されます。flag のデフォルト値は 0 で、この値は変更すべきではありません。

userstr String 型。ユーザによってコントロールに入力されます。

dtm DateTime 型。有効な日付が割り当てられる参照によって渡される値です。

Page 356: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

ValueChanged

346 PowerBuilder

IF IsDate(userstr) THENdtm = DateTime(Date(userstr))

ELSEMessageBox("無効な日付です ", userstr)

END IF

ValueChanged機能 日付ピッカー コントロールの Value プロパティが変更されるときに発

生します。

イベント ID

引数

戻り値 Long 型。リターン コードは無視されます。

解説 ユーザがドロップダウン カレンダから日付を選択するとき、あるいはアップダウン コントロールを使用して日付を変更するとき、選択された DateTime 値は ValueChanged イベントに渡されます。

例 ValueChanged イベント スクリプトの次のコードは、確認メッセージをユーザに表示します。

MessageBox("開始日 ", "選択した日付は " + &String(dtm, "mmm dd, yyyy") + "です。~r~n" + &"間違っている場合は、再度選択してください。")

ViewChange機能 OLE サーバ アプリケーションが、ユーザに対する表示が変更されたこ

とを、コントロールに通知するときに発生します。

イベント ID オブジェクト

pbm_dtpvaluechanged 日付ピッカー

引数 説明

flag Unsigned long 型。デフォルトは 0 で、無視することができます。

dtm 新しい DateTime 型の値

Page 357: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

第 9 章 PowerScript のイベント

PowerScript リファレンス 347

イベント ID

引数 なし

戻り値 Long 型。リターン コードは無視されます。

解説 このイベントの処理中に、OLE コントロールの ObjectData Blob 値を取得したい場合は、このコントロールに対してユーザ イベントをポストしないと、実行時エラーが発生します。

関連項目 DataChangePropertyRequestEditPropertyChangedRename

WaitForUploadAck機能 同期プロセスがアップロード確認の待機を新たに開始したときに発生

します。

イベント ID

引数 なし

戻り値 なし

解説 このイベントを使用して、コンポーネントが MobiLink 同期サーバからのアップロード確認を待機しているときに、カスタム アクションを追加します。

関連項目 BeginUploadEndUpload

WarningMessage機能 警告メッセージが表示されるときに発生します。

イベント ID オブジェクト

pbm_omnviewchange OLE

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

Page 358: PowerScript ボリューム 1 - powerbuilder.jp · 目 次 PowerScript リファレンス ボリューム 1 iii 本書について..... ix

WarningMessage

348 PowerBuilder

イベント ID

引数

戻り値 なし

解説 このイベントを使用して、dbmlsync が記録した警告情報を受け取ります。

同期サーバによってさまざまな種類のメッセージが送信されたときに、次のイベントが起動されます。そのイベントは DisplayMessage、ErrorMessage、FileMessage、WarningMessage です。

関連項目 DisplayMessageErrorMessageFileMessage

イベント ID オブジェクト

なし MLSynchronization、MLSync、ULSync

引数 説明

warnmsg 読み取り専用文字列。同期サーバから返された警告メッセージのテキストを含みます。