powerscript® リファレンス ボリューム 1 · powersoft portfolio ... replication server,...

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

Upload: ngokhanh

Post on 30-Aug-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

PowerBuilder®

9

Page 2: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DOCUMENT ID: 37781-01-0900-01

LAST REVISED: March 2003

Copyright © 1989-2004 by Sybase, Inc. All rights reserved.

本書に記載されているソフ ト ウェアは、Sybase ラ イセンス契約に基づいて Sybase, Inc. が提供し、かかる契約の条項に従う場合にのみ使用が許諾されます。

本書に記載されている内容は、 Sybase, Inc. およびその関連会社の書面による許可なく、 いかなる形態、 または手段、 電子的、 機械的、 手作業、 光学的およびその他にかかわらず、 複製、 転載および翻訳を禁じます。

Sybase, Sybase (ロ ゴ) , AccelaTrade, ADA Workbench, Adaptable Windowing Environment, Adaptive Component Architecture,Adaptive Server, Adaptive Server Anywhere, Adaptive Server Enterprise, Adaptive Server Enterprise Monitor, Adaptive ServerEnterprise Replication, Adaptive Server Everywhere, Adaptive Server IQ, Adaptive Warehouse, Anywhere Studio, ApplicationManager, AppModeler, APT Workbench, APT-Build, APT-Edit, APT-Execute, APT-FORMS, APT-Translator, APT-Library, BackupServer, BizTracker, ClearConnect, Client-Library, Client Services, Convoy/DM, Copernicus, Data Pipeline, Data Workbench,DataArchitect, Database Analyzer, DataExpress, DataServer, DataWindow, DB-Library, dbQueue, Developers Workbench, DirectConnect Anywhere, Distribution Director, e-ADK, E-Anywhere, e-Biz Integrator, E-Whatever, EC Gateway, ECMAP, ECRTP,eFulfillment Accelerator, Embedded SQL, EMS, Enterprise Application Studio, Enterprise Client/Server, Enterprise Connect, EnterpriseData Studio, Enterprise Manager, Enterprise SQL Server Manager, Enterprise Work Architecture, Enterprise Work Designer, EnterpriseWork Modeler, eProcurement Accelerator, EWA, Financial Fusion, Financial Fusion Server, Gateway Manager, GlobalFIX,ImpactNow, Industry Warehouse Studio, InfoMaker, Information Anywhere, Information Everywhere, InformationConnect,InternetBuilder, iScript, Jaguar CTS, jConnect for JDBC, MainframeConnect, Maintenance Express, MDI Access Server, MDIDatabase Gateway, media.splash, MetaWorks, MySupport, Net-Gateway, Net-Library, New Era of Networks, ObjectConnect,ObjectCycle, OmniConnect, OmniSQL Access Module, OmniSQL Toolkit, Open Biz, Open Client, Open ClientConnect, Open Client/Server, Open Client/Server Interfaces, Open Gateway, Open Server, Open ServerConnect, Open Solutions, Optima++, PB-Gen, PC APTExecute, PC Net Library, Power++, power.stop, PowerAMC, PowerBuilder, PowerBuilder Foundation Class Library, PowerDesigner,PowerDimensions, PowerDynamo, PowerJ, PowerScript, PowerSite, PowerSocket, Powersoft, PowerStage, PowerStudio, PowerTips,Powersoft Portfolio, Powersoft Professional, PowerWare Desktop, PowerWare Enterprise, ProcessAnalyst, Rapport, Report Workbench,Report-Execute, Replication Agent, Replication Driver, Replication Server, Replication Server Manager, Replication Toolkit, ResourceManager, RW-DisplayLib, S-Designor, SDF, Secure SQL Server, Secure SQL Toolset, Security Guardian, SKILS, smart.partners,smart.parts, smart.script, SQL Advantage, SQL Anywhere, SQL Anywhere Studio, SQL Code Checker, SQL Debug, SQL Edit, SQLEdit/TPU, SQL Everywhere, SQL Modeler, SQL Remote, SQL Server, SQL Server Manager, SQL SMART, SQL Toolset, SQL Server/CFT, SQL Server/DBM, SQL Server SNMP SubAgent, SQL Station, SQLJ, STEP, SupportNow, S.W.I.F.T. Message Format Libraries,Sybase Central, Sybase Client/Server Interfaces, Sybase Financial Server, Sybase Gateways, Sybase MPP, Sybase SQL Desktop, SybaseSQL Lifecycle, Sybase SQL Workgroup, Sybase User Workbench, SybaseWare, Syber Financial, SyberAssist, SyBooks, System 10,System 11, System XI ( ロゴ ), SystemTools, Tabular Data Stream, TradeForce, Transact-SQL, UltraLite.NET, UNIBOM, Unilib,Uninull, Unisep, Unistring, URK Runtime Kit for UniCode, Viewer, Visual Components, VisualSpeller, VisualWriter, VQL,WarehouseArchitect, Warehouse Control Center, Warehouse Studio, Warehouse WORKS, Watcom, Watcom SQL, Watcom SQLServer, Web Deployment Kit, Web.PB, Web.SQL, WebSights, WebViewer, WorkGroup SQL Server, XA-Library, XA-Server およびXP Server は Sybase, Inc. の登録商標です。

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

本書で使用される会社名および製品名はそれぞれの会社の商標および登録商標です。

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

Page 3: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

目次

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

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

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

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

継続行文字 ..................................................................................... 16ステート メン トの区切り子 ............................................................ 17空白文字 ......................................................................................... 18

第 2 章 データ型 ........................................................................................................................... 19標準データ型.................................................................................. 19Any データ型.................................................................................. 24システム オブジェク ト データ型 ................................................... 27カタログ データ型 ......................................................................... 29EAServer での PowerBuilder データ型 .......................................... 29

第 3 章 宣言 ..................................................................................................................................... 31変数の宣言 ..................................................................................... 31

変数の宣言場所 ....................................................................... 31変数の使い方 ........................................................................... 33変数宣言のための構文 ............................................................ 36

定数の宣言 ..................................................................................... 47

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

Page 4: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

目次

配列の宣言 ..................................................................................... 48配列要素の値 ........................................................................... 52可変長配列のサイズ ................................................................ 53配列についての詳細 ................................................................ 54

外部関数の宣言 .............................................................................. 58外部関数の引数のデータ型 ..................................................... 63外部関数の呼び出し ................................................................ 65外部変数の定義 ....................................................................... 65

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

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

算術演算子 .............................................................................. 69関係演算子 .............................................................................. 72連結演算子 .............................................................................. 73

演算子の優先順位 .......................................................................... 74PowerBuilder 式のデータ型 ........................................................... 75

数値データ型 ........................................................................... 75String 型と Char 型の間の変換 ............................................... 77

第 5 章 構造体とオブジェ ク ト .............................................................................................. 79構造体について .............................................................................. 79オブジェ ク トについて ................................................................... 80

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

オブジェ ク ト と構造体の代入 ........................................................ 87構造体の代入 ........................................................................... 87オブジェ ク トの代入 ................................................................ 88自動生成するユーザ オブジェク トの代入............................... 89

第 6 章 関数とイベン トの呼び出し .................................................................................... 91関数とイベン トについて ................................................................ 91関数とイベン トの検索と実行方法 ................................................. 94

関数の検索 .............................................................................. 94イベン トの検索 ....................................................................... 95

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

静的呼び出し ........................................................................... 98

iv PowerBuilder

Page 5: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

目次

動的呼び出し ........................................................................... 99関数とイベン トの多重定義、 上書き、 拡張 ................................. 105

関数の多重定義と上書き ....................................................... 105イベン トの拡張と上書き ....................................................... 107

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

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

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

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

第 7 章 PowerScript のステート メン ト ...................................................................... 123値の代入文 ................................................................................... 124CALL ............................................................................................ 127CHOOSE CASE........................................................................... 129CONTINUE .................................................................................. 131CREATE....................................................................................... 132DESTROY.................................................................................... 136DO...LOOP................................................................................... 137EXIT ............................................................................................. 139FOR...NEXT ................................................................................. 140GOTO........................................................................................... 142HALT ............................................................................................ 143IF...THEN ..................................................................................... 144RETURN ...................................................................................... 146THROW........................................................................................ 147THROWS ..................................................................................... 148TRY...CATCH...FINALLY...END TRY .......................................... 149

第 8 章 SQL 文........................................................................................................................... 151スクリプ トにおける SQL 文の使い方.......................................... 152

CLOSE Cursor ..................................................................... 155CLOSE Procedure................................................................ 156COMMIT............................................................................... 157CONNECT............................................................................ 158DECLARE Cursor................................................................. 159

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

Page 6: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

目次

DECLARE Procedure........................................................... 160DELETE ............................................................................... 162DELETE Where Current of Cursor ....................................... 163DISCONNECT...................................................................... 164EXECUTE ............................................................................ 165FETCH ................................................................................. 166INSERT ................................................................................ 167OPEN Cursor ....................................................................... 168ROLLBACK .......................................................................... 169SELECT ............................................................................... 170SELECTBLOB...................................................................... 172UPDATE............................................................................... 174UPDATEBLOB ..................................................................... 175UPDATE Where Current of Cursor ...................................... 177

動的 SQL の使い方 ...................................................................... 177動的 SQL 書式 1................................................................... 182動的 SQL 書式 2................................................................... 183動的 SQL 書式 3................................................................... 184動的 SQL 書式 4................................................................... 187

第 9 章 PowerScript のイベン ト ...................................................................................... 193イベン トについて ........................................................................ 193Activate ........................................................................................ 197BeginDrag .................................................................................... 198BeginLabelEdit ............................................................................. 202BeginRightDrag............................................................................ 204Clicked ......................................................................................... 207Close ............................................................................................ 213CloseQuery .................................................................................. 215ColumnClick ................................................................................. 217Constructor................................................................................... 219DataChange ................................................................................. 221Deactivate .................................................................................... 222DeleteAllItems .............................................................................. 223DeleteItem.................................................................................... 224Destructor..................................................................................... 226DoubleClicked .............................................................................. 227DragDrop...................................................................................... 232DragEnter..................................................................................... 237DragLeave.................................................................................... 239DragWithin ................................................................................... 241EndLabelEdit................................................................................ 244Error ............................................................................................. 246ExternalException ........................................................................ 250

vi PowerBuilder

Page 7: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

目次

FileExists ...................................................................................... 253GetFocus...................................................................................... 254Help.............................................................................................. 256Hide.............................................................................................. 257HotLinkAlarm................................................................................ 258Idle ............................................................................................... 259InputFieldSelected ....................................................................... 260InsertItem ..................................................................................... 261ItemActivate ................................................................................. 262ItemChanged................................................................................ 264ItemChanging............................................................................... 265ItemCollapsed .............................................................................. 266ItemCollapsing ............................................................................. 267ItemExpanded .............................................................................. 268ItemExpanding ............................................................................. 269ItemPopulate ................................................................................ 270Key ............................................................................................... 271LineDown ..................................................................................... 273LineLeft ........................................................................................ 274LineRight ...................................................................................... 275LineUp.......................................................................................... 276LoseFocus.................................................................................... 277Modified........................................................................................ 279MouseDown ................................................................................. 281MouseMove.................................................................................. 284MouseUp...................................................................................... 288Moved .......................................................................................... 291Open ............................................................................................ 292Other ............................................................................................ 296PageDown.................................................................................... 297PageLeft ....................................................................................... 299PageRight .................................................................................... 300PageUp ........................................................................................ 301PictureSelected ............................................................................ 303PipeEnd........................................................................................ 304PipeMeter..................................................................................... 305PipeStart ...................................................................................... 306PrintFooter ................................................................................... 307PrintHeader .................................................................................. 309PropertyChanged ......................................................................... 311PropertyRequestEdit .................................................................... 312RButtonDown ............................................................................... 313RButtonUp.................................................................................... 316RemoteExec................................................................................. 317

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

Page 8: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

目次

RemoteHotLinkStart..................................................................... 318RemoteHotLinkStop ..................................................................... 319RemoteRequest ........................................................................... 320RemoteSend ................................................................................ 321Rename........................................................................................ 322Resize .......................................................................................... 323RightClicked ................................................................................. 324RightDoubleClicked...................................................................... 327Save ............................................................................................. 329SaveObject................................................................................... 330Selected ....................................................................................... 331SelectionChanged........................................................................ 332SelectionChanging ....................................................................... 336Show ............................................................................................ 339Sort............................................................................................... 340SystemError ................................................................................. 343SystemKey ................................................................................... 344Timer ............................................................................................ 345ToolbarMoved .............................................................................. 347ViewChange................................................................................. 348

viii PowerBuilder

Page 9: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

本書について

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

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

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

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

そのほかの参照情報 製品に関するそのほかの詳細情報については、 Sybase のテクニカル ラ イブラ リ CD やテクニカル ラ イブラ リ製品マニュアル Webサイ ト (英語) を参照して ください。

• ソフ ト ウェア付属のテクニカル ラ イブラ リ CD には、 製品マニュアルが収められています。 製品マニュアルは、 PDF 形式にて提供しています。

テクニカル ラ イブラ リ CD の使い方については、 テクニカルライブラ リ CD 内の Readme.txt ファ イルを参照して ください。

• テクニカル ラ イブラ リ製品マニュアルの Web サイ ト (英語)には、 Product Manuals http://www.sybase.com/support/manuals/ からアクセスできます。

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

ボリューム 内容

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

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

Page 10: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

表記例 意味

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

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

• TRUE、 FALSE、 NULL などのキーワード

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

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

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

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

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

• myCounter などの変数名

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

• ファ イルとパス名

[フ ァ イル|上書き保存]

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

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

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

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

• サンプル出力の一部

x PowerBuilder

Page 11: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

Page 12: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス
Page 13: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 1 章 PowerScript の基礎

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

内容

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

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

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

Code // Comment

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

/* Comment */

解説 次の表に、 各メ ソ ッ ドの使い方を示します。

項目 ページ

コ メ ント 3

識別子の命名 5

ラ ベル 7

特殊な ASCII 文字 7

NULL 値 9

予約語 10

代名詞 11

継続行文字 16

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

空白文字 18

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

Page 14: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

コ メン ト

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

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

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

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

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

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

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

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

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

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

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

方法 記号 用途 注意

2 つのスラッシュ

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

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

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

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

入れ子状のコ メン ト

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

• 入れ子状にできる

4 PowerBuilder

Page 15: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 1 章 PowerScript の基礎

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

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

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

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

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

• 最大で 40 バイ ト まで、 スペースは使用できません。

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

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

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

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

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

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

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

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

• オブジェ ク ト関数名

• 関数の引数名

• 変数名

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

Page 16: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

識別子の命名

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

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

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

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

例 有効な識別子

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

無効な識別子

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

6 PowerBuilder

Page 17: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 1 章 PowerScript の基礎

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

ます。

構文 identifier

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

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

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

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

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

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

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

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

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

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

Page 18: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

特殊な ASCII 文字

表 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 桁の 10 進数

文字列 説明

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

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

値 説明

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

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

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

8 PowerBuilder

Page 19: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 1 章 PowerScript の基礎

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 の確認には等号 (=) は使用できません。

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

IF IsNull(a) THEN ...

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

IF a = NULL THEN ...

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

Page 20: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

予約語

例 例 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

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

10 PowerBuilder

Page 21: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 1 章 PowerScript の基礎

表 1-3: PowerScript の予約語

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

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

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

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

aliasand*autoinstantiatecallcasecatchchooseclose*commitconnectconstantcontinuecreate*cursordeclaredeletedescribe*descriptordestroydisconnectdodynamicelseelseifendenumerated

eventexecuteexitexternalfalsefetchfinallyfirstforforwardfromfunctionglobalgotohaltifimmediateindirectinsertintointrinsicislastlibraryloopnext

notofonopen*orparentpost*preparepriorprivateprivatereadprivatewriteprocedureprotectedprotectedreadprotectedwriteprototypespublicreadonlyrefreturnrollbackrpcfuncselectselectblobshared

staticstepsubroutinesupersystemsystemreadsystemwritethenthisthrowthrowstotriggertruetrytypeuntilupdate*updateblobusingvariableswhilewithwithin_debug

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

Page 22: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

代名詞

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

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

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

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

表 1-4: PowerScript の代名詞

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Parent

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

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

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

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

12 PowerBuilder

Page 23: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 1 章 PowerScript の基礎

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

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

• メニュー項目

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

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

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

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

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

Close(Parent)

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

Parent.HScrollBar = TRUE

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

Parent.Hide( )

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

Parent.Enabled = FALSE

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

Parent.Disable( )

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

Page 24: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

代名詞

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

Parent.Checked = TRUE

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

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

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

This.X = This.X + 50

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

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

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

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

This.Check( )

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

ReCalc(This)

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

x = x + 50

14 PowerBuilder

Page 25: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 1 章 PowerScript の基礎

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

This.x = This.x + 50

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

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

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

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

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

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

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

Super::wf_myfunc(myarg1, myarg2)

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

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

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

Page 26: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

継続行文字

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

Super::EVENT Clicked()

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

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

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

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

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

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

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

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

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

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

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

16 PowerBuilder

Page 27: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 1 章 PowerScript の基礎

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

問題点 次の ス テー ト メ ン ト では、 継続行文字だけ を使用 し て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)

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

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

構文 Statement1; statement2

例 次の行は、 3 つの短いステート メン トから構成されています。 A = B + C; D = E + F; Count = Count + 1

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

Page 28: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

空白文字

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

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

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

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

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

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

A + B /*Adjustment factor */+C

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

"The value of A + B is:"

18 PowerBuilder

Page 29: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 2 章 データ型

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

内容

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

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

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

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

項目 ページ

標準データ型 19

Any データ型 24

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

カタログ データ型 29

EAServer での PowerBuilder データ型 29

Blob LongLongBoolean Long

Char または character Real Date String 型DateTime Time

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

Double UnsignedLong または ULongInteger または Int

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

Page 30: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

標準データ型

Boolean TRUE または FALSE です。

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

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

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

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

char cc = 'T'c = "T"

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

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

1992-12-25 // 1992 年 12 月 25 日 1995-02-06 // 1995 年 2 月 6 日

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

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

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

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

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

20 PowerBuilder

Page 31: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 2 章 データ型

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

リテラルの使い方 リ テラル値を代入するには、 小数点を持ち指数部を持たない任意の 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 の符号付き浮動小数点数です。

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 桁の精度で 1.175495E-38 ~ 3.402822E+38 の符号付き浮動小数点数です。

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

2E4 2.5E78 +6.02E3 -4.1E-2-7.45E16 7.7E+8 3.2E-45

String 型 可変長 (0 ~ 2147483647) の ASCII 文字です。

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

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

Page 32: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

標準データ型

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

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

Hi

22 PowerBuilder

Page 33: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 2 章 データ型

例 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 時間形式の時刻です。

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

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

Page 34: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Any データ型

リテラルの使い方 時 (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 データ型の配列は、配列の各要素に対して異なるデータ型の値を代入できます。

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

24 PowerBuilder

Page 35: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 2 章 データ型

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_3la_3 = ia_1 - ia_2

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

Page 36: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Any データ型

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]

26 PowerBuilder

Page 37: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 2 章 データ型

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

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

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

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

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

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

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

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

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

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

Page 38: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

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

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

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

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

window mywinmenu mymenu

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

// ウィン ドウのインスタンス変数と して定義します。commandbutton LastClicked

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

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

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

28 PowerBuilder

Page 39: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 2 章 データ型

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

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

• 関数の引数と して

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

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

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

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

mle_edit.Alignment=Right!

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

カタログ データ型の利点

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

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

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

Page 40: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

EAServer での PowerBuilder データ型

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

Jaguar Manager CORBA IDL PowerBuilderInteger (16 ビッ ト ) Short Integer

Integer (32 ビッ ト ) Long Long

Integer (64 ビッ ト ) Long long LongLongBoolean Boolean BooleanFloat Float RealDouble Double DoubleString String StringBinary BCD::Binary BlobDecimal BCD::Decimal DecimalMoney BCD::Money DecimalDate MJD::Date DateTime MJD::Time TimeTimestamp MJD::Timestamp DateTimeResultSet TabularResults::ResultSet ResultSetResultSets TabularResults::ResultSets ResultSetsVoid Void なし

30 PowerBuilder

Page 41: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

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

内容

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

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

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

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

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

項目 ページ

変数の宣言 31

定数の宣言 47

配列の宣言 48

外部関数の宣言 58

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

66

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

Page 42: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

変数の宣言

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

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

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

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

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

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

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

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

スコープ 説明

グ ローバル

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

イ ン ス タンス

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

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

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

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

32 PowerBuilder

Page 43: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

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

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

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

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

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

1 ローカル変数

2 共有変数

3 グローバル変数

4 インスタンス変数

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

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

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

::globalname

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

IF total < ::total THEN ...

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

Page 44: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

変数の宣言

インスタンス変数の参照

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

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

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

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

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

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

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

sle_id.Text = EmpID

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

object.instancevariable

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

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

sle_ID.Text = w_emp.EmpID

34 PowerBuilder

Page 45: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

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

Parent.EmpID

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

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

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

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

index = 5This.index = 5

コン ト ロールのスクリプ トでのウィ ンドウ変数 ウ ィ ン ド ウ 上の コ ン トロールのスク リプ ト で、 ウ ィ ン ド ウ (コン ト ロールの親) のインスタンス変数を参照するには、代名詞 Parent を使います。 たとえば、「index」とい う名前のローカル変数やグローバル変数がない限り、 ウ ィ ン ド ウにあるコン ト ロールのスク リプ トでは、 以下の 2 つのステート メ ン トは同じです。

index = 5Parent.index = 5

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

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

Page 46: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

変数の宣言

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

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

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

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

36 PowerBuilder

Page 47: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

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

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

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

グローバル変数の宣言

string gs_name

共有変数の宣言

time st_process_startstring ss_process_name

パラ メータ 説明

access (オプシ ョ ン)

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

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

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

{ size } (オプシ ョ ン)

Blob 型の場合のみ。 変数のサイズをバイ ト数で指定して中カッ コで囲みます。 size を省略する と、Blob 型変数の初期サイズは 0 とな り、 PowerBuilder によって実行時に用途に応じたサイズに調整されます。 ス ク リ プ ト で宣言した Blob 型変数のサイズを超え るデータを代入する と、 超過分を切り捨てたデータが保持されます。

{ precision } (オプシ ョ ン)

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

variablename 変数の名前。 5 ページの「 識別子の命名」 で前述したとおり、名前は PowerScript で有効な識別子でなければなりません。 同じデータ型の複数の配列を一度に宣言するには、 配列名をカンマで区切り ます。 各配列には初期値を設定できます。

value (オプシ ョ ン)

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

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

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

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

Page 48: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

変数の宣言

ローカル変数の宣言

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_Resultdec{2} lc_Op1, lc_Op2lc_Result = lc_Op1 * lc_Op2

変数のデータ型

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

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

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

38 PowerBuilder

Page 49: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

• 開発者が定義したオブジェ ク トや構造体 (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 変数を宣言する場合、 その変数のデフォルトの初期値を使用した り、 宣言時に初期値を指定できます。

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

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

Page 50: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

変数の宣言

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

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

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

次の宣言では、 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 つの単語を設定します。

string ls_headers = "Name~tAddress~tCity"

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

integer li_a=1, li_b, li_c=100

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

date ld_StartDate = 1993-02-01

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

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

Char (または Character) ASCII コード値の 0Boolean FALSEDate 1900-01-01 (1900 年 1 月 1 日)

DateTime 1900-01-01 00:00:00

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

0

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

40 PowerBuilder

Page 51: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

初期値としての式の指定

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

integer i = 100integer j = i

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

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

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

date d_date = Today( )

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

date d_dated_date = Today( )

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

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

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

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

Page 52: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

変数の宣言

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

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

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

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

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

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

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

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

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

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

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

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

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

42 PowerBuilder

Page 53: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

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

パラ メータ 説明

access-right (オプシ ョ ン)

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

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

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

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

readaccess (オプシ ョ ン)

ス ク リ プ ト で変数の値の参照を制限するキーワード。 値は、 次のとおりです。

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

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

access-right が PUBLIC の場合、 どちらのキーワードでも指定できます。 access-right が PROTECTED の場合、PRIVATEWRITE だけが指定できます。 access-rightが PRIVATE の場合は、 ほかのスク リプ ト からのアクセスを完全に制限するので、readaccess は指定できません。 readaccess を省略する と、 すべてのス ク リ プ ト で変数を参照できます。

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

Page 54: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

変数の宣言

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

public protectedwrite integer ii_count

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

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

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

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

writeaccess (オプシ ョ ン)

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

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

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

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

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

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

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

パラ メータ 説明

44 PowerBuilder

Page 55: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

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_myemp

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

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

public privatewrite integer ii_int

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

w_emp w_myemp

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

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

Page 56: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

変数の宣言

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

説明 アクセス権キーワードをラベルと して指定するこ とによって、 アクセス権に応じて 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

46 PowerBuilder

Page 57: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

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

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

構文 CONSTANT { access } datatype constname = value

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

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

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

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

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

パラ メータ 説明

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

access (オプシ ョ ン)

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

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

することはできません。

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

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

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

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

Page 58: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

配列の宣言

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

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

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

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

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

48 PowerBuilder

Page 59: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

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

パラ メータ 説明

access (オプシ ョ ン)

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

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

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

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

variablename 変数の名前。 5 ページの「 識別子の命名」 で前述したとおり、 名前は、 PowerScript で有効な識別子でなければな り ません。 同じデータ型の複数の配列を一度に宣言するには、角カッコで囲まれた次元のサイズと一緒に、 配列名をカンマで区切り ます。

[ { d1, ..., dn } ] 固定長配列の各次元のサイズを指定する、 角カッ コで囲まれた次元数分の整数値 (各次元につき、 d1 から dn)。1 次元の可変長配列は、角カッコだけを指定します。 可変長配列のサイズの変更方法についての詳細は、53 ページの「 可変長配列のサイズ」 を参照して ください。

固定長配列は、 指定した整数値の数によって次元の数は決定され、 その配列が使用できる メモ リ サイズが確定されます。 固定長配列では、 TO 表記を使用して、次元サイズではな く各次元に対する要素の範囲を指定できます。TO 表記を指定すれば、 各次元の下限を変更でき ます。upperbound は lowbound よ り大き く なければなりません。

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

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

Page 60: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

配列の宣言

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

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 型の配列。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 型

{ valuelist } (オプシ ョ ン)

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

パラ メータ 説明

50 PowerBuilder

Page 61: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

の配列。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]

以下の宣言では、 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[ ]

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

Page 62: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

配列の宣言

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

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

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

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

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

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

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

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 になる

52 PowerBuilder

Page 63: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 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 です。

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}

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

Page 64: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

配列の宣言

以下のステー ト メ ン ト では、 可変長配列を宣言し、 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 が代入される

配列についての詳細

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

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

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

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

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

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

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

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

54 PowerBuilder

Page 65: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

固定長配列への代入 代入元の配列のサイズが代入先の配列のサイズより小さい場合は、 代入元の配列のすべての値が代入先の配列にコピーされます。代入先の配列で余っている要素には、 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 次元配列の代入規則に従って、 多次元配列を別の配列に代入します。

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

多次元配列から多次元配列への代入 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

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

Page 66: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

配列の宣言

例 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

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

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

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

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

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

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

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

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

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

1 for a[1,1] 3 for a[1,2]

2 for a[2,1] 4 for a[2,2]

56 PowerBuilder

Page 67: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

例 次の宣言では、 可変長配列に 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 が設定されます。

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 // 実行時エラーが発生します。

1 4

2 5

3 6

1 3 5 0

2 4 6 0

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

Page 68: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

外部関数の宣言

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

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 の拡張子が付きます。 外部関数は、 動的ラ イブラ リ をサポートする言語であれば、どのよ う な言語で記述されていても使用できます。

スク リプ ト で外部関数を使用するには、 まず、 その関数を次のいずれかの関数と して宣言しなければな り ません。

• グローバル外部関数 アプ リ ケーシ ョ ン内のどこからでも使用できます。

• ローカル外部関数 特定の種類のウ ィ ン ド ウ、 メニュー、 ユーザ オブジェ ク ト 、 またはユーザ定義関数に定義されます。 これらの関数はオブジェ ク ト定義の一部なので、 オブジェ ク ト自身のス ク リプ ト で常に使用できます。 また、 これらの関数をほかのス ク リプトで使用できるよ うにするこ と も可能です。

外部関数の宣言方法と呼び出し方法を理解するには、 外部関数ラ イブラ リの開発者から提供されるマニュアルを参照して ください。

構文 外部関数の構文 外部関数を宣言するには、 次の構文を使います。

{ access } FUNCTION returndatatype name ( { { REF } datatype1 arg1,..., { REF } datatypen argn } ) LIBRARY "libname"ALIAS FOR "extname"

58 PowerBuilder

Page 69: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

外部サブルーチンの構文 また、 次の構文を使って、 外部サブルーチンを宣言できます。 外部サブルーチンは、 外部関数と同じですが、 値を戻しません。

{ access } SUBROUTINE name ( { { REF } datatype1 arg1, ...,{ REF } datatypen argn } ) LIBRARY "libname"ALIAS FOR "extname"

次の表に、 外部関数とサブルーチンを宣言する と きに使用するパラメータを示します。

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

Page 70: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

外部関数の宣言

表 3-7: 外部関数またはサブルーチンを宣言するためのパラ メータ

解説 ローカル関数のアクセス レベルの指定 ローカル外部関数を宣言する とき、 アクセス レベルを指定します。 つま り、 その関数にアクセスできるスク リプ トの範囲を指定できます。

次の表に、 ローカル外部関数をアクセス レベル付きで宣言した場合に、そのローカル外部関数を使用できるスク リプ ト の範囲を示します。

パラ メータ 説明

access(オプシ ョ ン)

ローカル外部関数の場合のみ。 ローカル外部関数のアクセス レベルと して Public、 Protected、 または Private のいずれかを指定します。 デフォル トは Public です。 詳細については、 次の「 解説」 の 「ローカル関数のアクセス レベルの指定」 を参照して ください。

FUNCTION ま たは SUBROUTINE

呼び出しの種類を指定するキーワード。 このキーワードによって、 戻り値の取り扱い方法が決定されます。 戻り値がある場合は FUNCTION を指定し、戻り値がないまたは VOID を戻す場合は SUBROUTINE を指定します。

returndatatype 関数の戻り値のデータ型。

name DLL に保存されている関数またはサブルーチンの名前。 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 名と外部名を関連付けなければな り ません。

60 PowerBuilder

Page 71: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

表 3-8: ローカル外部関数のアクセス レベル

ローカル外部関数の 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 にローカル外部関数と して宣言されています。 ユーザ オブジェ ク ト関数で外部関数を呼び出しますが、ユーザ オブジェ ク ト関数は同じユーザ オブジェ クトの定義の一部なので、 関数を呼び出すと きに、 ユーザ オブジェ ク ト名を表記する必要はあ り ません。

アクセス レベル ローカル外部関数を使用できるスク リプ ト

Public アプリ ケーシ ョ ン内のすべてのスク リ プ ト

Private 関数が宣言されているオブジェ ク ト のイベン トのス ク リプ ト 。 そのオブジェ ク ト の子孫ス ク リ プ ト では使用できません。

Protected 関数が宣言されているオブジェ ク ト のスク リ プ ト とその子孫スク リ プ ト。

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

Page 72: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

外部関数の宣言

例 1 次の宣言では、 PowerBuilder は WINMM.DLL 内のサウンドを再生するのに必要な関数を呼び出します。

// サウン ドを再生します。FUNCTION boolean sndPlaySoundA (string SoundName,

uint Flags) LIBRARY "WINMM.DLL"FUNCTION uint waveOutGetNumDevs () LIBRARY "WINMM.DLL"

examples アプ リ ケーシ ョ ン内の関数 uf_playsound が外部関数を呼び出します。 関数 uf_playsound は、 引数 as_filename と ai_option で呼び出され、これらの引数を外部関数 sndPlaySoundA に渡します。 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)

62 PowerBuilder

Page 73: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

例 3 次は、 Windows の GetSysColor 関数の宣言です。

FUNCTION int GetSystemMetrics (int index) LIBRARY "USER32.DLL"

以下のステート メ ン トでは、 外部関数を呼び出し、 画面の高さ と幅を取得します。

RETURN GetSystemMetrics(1)RETURN GetSystemMetrics(0)

外部関数の引数のデータ型

PowerBuilder では、 外部関数を宣言する場合、 引数のデータ型は、 外部関数の定義で宣言されているデータ型と一致しなければな り ません。 この節では、 外部関数のデータ型と PowerBuilder のデータ型の対応について説明します。 また、 構造体を値渡しする と きのバイ ト アライン メ ン トについても説明します。

表から、 外部関数の宣言で使用する PowerBuilder のデータ型を探します。 PowerBuilder のどのデータ型を使用するかは、 外部関数のソースコードでのデータ型によって異な り ます。 最初の項目には、 外部関数のソース コードでのデータ型、 2 番目の項目には、 データ型についての詳しい説明、 3 番目の項目には、 外部関数の宣言で使用するPowerBuilder のデータ型を示します。

Boolean Windows 上における BOOL 型は 16-bit の符号付きです。 PowerBuilder では、 Boolean 型と して宣言します。

ポインタ 表 3-9: PowerBuilder のポインタのデータ型

Windows ポイ ン タ LPBYTE、 LPDWORD、 LPINT、 LPLONG、 LPVOID、LPWORD など 32-bit の FAR ポインタは、PowerBuilder では Long データ型と して宣言します。 HANDLE 型は 32 bit の符号なし と して定義され、PowerBuilder では UnsignedLong 型と して宣言します。

PSTR や NPSTR といった Near ポインタ データ型は、PowerBuilder ではサポー ト されていません。

ソース コー ドのデータ型 サイズ, 符号, 精度 PowerBuilder のデータ型

* (任意のポインタ) 32-bit のポインタ Longchar * 可変長のバイ ト配列 Blob

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

Page 74: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

外部関数の宣言

文字と文字列 表 3-10: PowerBuilder の文字と文字列のデータ型

Windows における 32-bit の FAR ポインタ LPSTR 型は、PowerBuilder では String 型と して宣言します。

参照引数参照によ り文字列を外部関数と して渡す場合、 すべてのメモ リ管理がPowerBuilder で行われます。 String 型文字列は、戻り値を保持できるだけの長さがある こ とが必要です。 必要な長さがあるかど うかを確認するには、 まず String 型変数を宣言し、 次に Space 関数を使って、 関数の予想される戻り値の最大文字数分の空白を変数に埋め込みます。

固定小数点の値 表 3-11: PowerBuilder の固定小数点数値のデータ型

Windows 定義の WORD 型は、PowerBuilder では UnsignedInteger、DWORD型は UnsignedLong と して宣言されます。 Short 型の戻り値や引数がある外部関数を呼び出すこ とはできません。

浮動小数点の値 表 3-12: PowerBuilder の浮動小数点数値のデータ型

PowerBuilder では、 Windows の 80-bit の Double 型をサポート していません。

ソース コードのデータ型 サイズ, 符号, 精度

PowerBuilder のデータ型

char 8-bit の符号付き Char 型string ヌルで終わる可変長の

バイ ト配列への 32-bitポインタ

String 型

ソース コードのデータ型 サイズ, 符号, 精度

PowerBuilder のデータ型

short 16-bit の符号付き Integer

unsigned short 16-bit の符号なし UnsignedInteger int 32-bit の符号付き Long

unsigned int 32-bit の符号なし UnsignedLong

long 32-bit の符号付き Long

unsigned long 32-bit の符号なし UnsignedLong

longlong 64-bit の符号付き LongLong

ソース コードのデータ型 サイズ, 符号, 精度

PowerBuilder のデータ型

float 32-bit の単精度 Real

double 64-bit の倍精度 Double

64 PowerBuilder

Page 75: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

Date 型と Time 型 PowerBuilder の Date 型、 DateTime 型、 Time 型は構造体で、 C 言語で記述された外部関数に直接対応するものはあ り ません。

構造体の値渡し C 言語で記述された外部関数の定義とアラ イン メ ン トが PowerBuilderの構造体のコンポーネン ト と同じであれば、 構造体をその外部関数に渡すこ とができます。 DLL や共有ラ イブラ リは、 バイ ト アライン メ ント を指定してコンパイルしなければな り ません。 つま り、 パディ ングを行わずに構造体内のフ ィールドを配置する とい う こ とです。

外部関数の呼び出しグローバル外部関数 PowerBuilder では、 グローバル外部関数の呼び出しには、 ユーザ定義

グローバル関数やシステム関数を呼び出す場合と同じ構文を使います。 そのほかのグローバル関数と同様、 グローバル外部関数を ト リ ガまたはポス トするこ とはできますが、 動的に呼び出すこ とはできません。

ローカル外部関数 オブジェ ク ト関数の呼び出しには、 ローカル外部関数を呼び出す場合と同じ構文を使います。 ローカル外部関数を ト リ ガまたはポス ト したり 、 動的に呼び出すこ とができます。

詳細については 詳細については、 113 ページの「 PowerBuilder の関数と イ ベント の呼び出し構文」 を参照して ください。

外部変数の定義

32-bit プラ ッ ト フォームのシーケンスの標準呼び出しをサポー トする言語であれば、 どの言語で記述された外部関数でも使用でき ます。Windows 上のラ イブラ リで独自に作成した関数を呼び出す場合、 その関数のエク スポー ト が必要にな り ます。 コンパイ ラによっては、 関数のプロ ト タ イプまたはリ ンカ定義 (.DEF) フ ァ イル内でエクスポートできます。外部関数の使い方についての詳細は、『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルを参照して ください。

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

Page 76: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

リモート プロシージャ コールとしての 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" }

66 PowerBuilder

Page 77: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 3 章 宣言

表 3-13: RPC を宣言するためのパラ メータ

解説 たとえば、 Void を戻す場合など、 関数が値を戻さない場合は、 関数ではな くサブルーチンと して宣言します。

RPC 宣言は、 常に ト ランザクシ ョ ン オブジェ ク ト に関連付けられます。 これらをローカル外部関数と して宣言します。 接続しているデータベースがス ト アド プロシージャをサポー ト していれば、 ローカル外部関数の宣言ビューで、 データベース内のス ト アド プロシージャの一覧にアクセスできます。

引数 説明

FUNCTION ま たは SUBROUTINE

呼び出しの種類を指定するキーワード。 このキーワードによって、 戻り値の取り扱い方法が決定されます。 戻り値がある場合は FUNCTION を指定し、戻り値がないまたは VOID を戻す場合は SUBROUTINE を指定します。

rtndatatype FUNCTION で宣言した場合、 関数の戻り値のデータ型。

functionname PowerBuilder で呼び出すデータベース プロシージャの名前。 DBMS での名前と異なる名前を使う場合は、ALIASFOR を指定し、DBMS 名と PowerBuilder 名を関連付けなければなり ません。

REF REF の後の引数が参照渡しであるこ と を指定します。 スト アド プロシージャは arg に値を格納できる。 この値には、 PowerBuilder のほかのスク リプ トからアクセスできます。

参照によ り 文字列を渡す場合、 すべてのメモ リ 管理がPowerBuilder で行われます。 String 型文字列は、 戻り値を保持できるだけの長さがある こ とが必要です。 必要な長さがあるかど うかを確認するには、 まず String 型変数を宣言し、 次に Space 関数を使って、 関数の予想される戻り値の最大文字数分の空白を変数に埋め込みます。

datatype arg ス ト アド プロシージャの引数のデータ型と名前。引数リス トは、データベース内のス ト アド プロシージャ定義と一致していなければな り ません。 各 datatype arg の前にREF を指定できます。

RPCFUNC キーワード。 この宣言は、 DLL の外部関数ではな く、DBMS のス ト アド プロシージャであるこ とを示します。外部関数の宣言についての詳細は、58 ページの「 外部関数の宣言」 を参照して ください。

ALIAS FOR "spname" (オプシ ョ ン)

キーワード。spname にはデータベース内のプロシージャの名前を指定します。 データベース内の名前と異なる名前をスク リプ ト で使う場合、 またはデータベース内の名前が PowerScript で使うには不適切な場合は、ALIAS FOR"spname" を指定し、PowerScript 名とデータベース名を関連付けなければなり ません。

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

Page 78: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

詳細については、 『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルを参照して ください。

例 例 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

次のスク リプ トでは、 ス ト ア ド プロシージャ SPM8 を呼び出します。

int myresultmyresult = SQLCA.spm8(myresult)IF SQLCA.sqlcode <> 0 THEN

messagebox(" エラー ", SQLCA.sqlerrtext)END IF

68 PowerBuilder

Page 79: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 4 章 演算子と式

この章について この章では、 PowerScript がサポート している演算子、 および式における演算子の使用方法について説明します。

内容

演算子概要 演算子は、 算術演算、 数値、 テキス トおよび論理値の比較、 論理

値に対する論理演算、 さ らに文字列や Blob 値の連結に用います。

3 種類の演算子 PowerScript では、 以下の 3 種類の演算子をサポート しています。

• 算術演算子 : 数値型のデータに使用できる

• 関係演算子 : すべてのデータ型のデータに使用できる

• 連結演算子 : String 型のデータに使用できる

データウィ ンドウ オブジェク トで使用する演算子データウ ィ ン ド ウ式の演算子の使用法については、 データウ ィ ンド ウに関するマニュアルを参照して ください。

算術演算子説明 次に PowerBuilder 算術演算子を示します。

項目 ページ

演算子 69

演算子の優先順位 74

PowerBuilder 式のデータ型 75

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

Page 80: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

演算子

表 4-1: 算術演算子

解説 後置式演算式 算術演算子と代入式を連結する後置式演算子 (++、+= など) についての詳細は、 124 ページの「 値の代入文」 を参照して ください。

減算 オプシ ョ ン ダイアログボッ クスの [ス ク リ プ ト ] タブの [識別子にハイフンを表示] がチェ ッ ク されている場合、 減算演算子および-- 演算子の前後には必ずスペースを入れなければな り ません。 それ以外の場合は、 PowerBuilder はその式を識別子と して解釈します。

識別子におけるハイフンについての詳細は、 5 ページの「 識別子の命名」 を参照して ください。

乗除 乗算と除算は最大精度 (最大有効桁数 16 ~ 18 桁) を確保して実行されます。 Decimal 型の数値は、 代入時にその有効桁数に応じて、切り捨てではな く四捨五入されます。

NULL 値を含む計算 算術式に NULL 値が含まれている場合、 計算結果は NULL 値にな り ます。 これは、 NULL を未定義の値と考えれば容易に理解できます。

NULL 値についての詳細は、9 ページの「 NULL 値」を参照して ください。

エラーとオーバーフロー 算術演算子を使用する と きは、 以下の問題に注意する必要があ り ます。

• 0 の除算、負の値の累乗などを行う と、実行時にエラーが発生します。

• Real 型、 Double 型、 および Decimal 型の値がオーバーフローすると、 実行時にエラーが発生します。

• 符号付き、 または符号なしの Integer 型および Long 型の値がオーバーフローした場合は、 結果がまるめられます。 ただし、 計算の過程で Integer 型のオペランドが Long 型に昇格する場合は、Integer型の変数に結果が代入されるまで、 まるめは発生しません。

演算子 意味 使用例

+ 加算 Total=SubTotal+Tax

- 減算 Price=Price-iscount

識別子名にハイフンが使用でき る場合は、減算演算子の前後にスペースを入れる必要があ り ます。

* 乗算 Total=Quantity*Price

/ 除算 Factor=Discount/Price

^ 累乗 Rank=Rating^2.5

70 PowerBuilder

Page 81: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 4 章 演算子と式

データ型の昇格についての詳細は、 75 ページの「 PowerBuilder 式のデータ型」 を参照して ください。

例 減算 次のステート メ ン トは、 常に A から B を減算する とい う意味です。

A - B

DashesInIdentifiers が 1 に設定されている場合、 次のステー ト メン トはA-B とい う名前の変数を意味します。 DashesInIdentifiers が 0 に設定されている場合は、 A から B を減算する という意味にな り ます。

A-B

除算の精度 以下の例は、 Decimal 型の値をさまざまな演算子で処理しています。

decimal {4} a,b,d,e,fdecimal {3} c

a = 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 = 32767

i = i + 1 // i の値は -32768 になります。

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

Page 82: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

演算子

関係演算子説明 PowerBuilder では、 論理式で関係演算子を使って 2 つ以上のオペラン

ドを評価します。 関係式を論理演算子で接続して、 よ り複雑な論理式を作成する こ と もできます。

論理式を評価した結果は、 常に TRUE か FALSE です。

次の表に、 関係演算子と論理演算子を示します。

表 4-2: PowerBuilder の関係演算子と論理演算子

解説 文字列の比較 PowerBuilder では、 文字列を比較する と きに大文字と小文字が区別されます。 また、 末尾部分の空白も区別されます。

大文字と小文字を区別しない文字列の比較方法についての詳細は、1350 ページの「 Upper」 および 835 ページの「 Lower」 を参照して ください。

末尾部分の空白を削除するには、 RightTrim 関数を使います。 先頭部分の空白を削除するには、 LeftTrim 関数を使います。 先頭と末尾部分の空白を削除するには、 Trim 関数を使います。 これらの関数の詳細については、1085 ページの「 RightTrim」、801 ページの「 LeftTrim」、1335 ページの「 Trim」 を参照して ください。

NULL 値の評価 NULL 値を含んだ論理式を作成する と、 AND 演算子とOR 演算子は、 通常とは異なる結果を返し ます。 NULL を TRUE でもFALSE でもない未定義の値と考えれば容易に理解できます。

NULL 値についての詳細は、9 ページの「 NULL 値」を参照して ください。

例 大文字と小文字の比較 テキス ト は同じでも大文字と小文字が異なる 2つの文字列を比較する と、 これらは同じ とみなされません。 ただし、Upper 関数や Lower 関数を使う と、両方の文字列の大文字と小文字は区別されないため、 文字の並びだけで比較できます。

演算子 意味 使用例

= 等しい 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

72 PowerBuilder

Page 83: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 4 章 演算子と式

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 Test

Test = "over" + "stock" // Test の値は "overstock" となります。string Lname, Fname, FullNameFullName = Lname + ', ' + Fname

// FullName の値は、 姓と名をカンマとスペースで区切った // 文字列となります。

演算子 意味 使用例

+ 連結 "cat " + "dog"

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

Page 84: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

演算子の優先順位

例 2 以下の例は、 データをファ イルから読み込んで、 Blob 型の変数に Blob 値を次々と連結します。

integer i, fnum, loopsbflob 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 が加算されます。

演算子 用途

( ) グループ化 (下記の 「式のグループ化」 を参照)

+, - 単項加減 (正の数と負の数を表す)

^ 累乗

*, / 乗除

+, - 加減、 文字列連結

=, >, <, <=, >=, <> 関係演算子

NOT 論理否定

AND 論理積

OR 論理和

74 PowerBuilder

Page 85: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 4 章 演算子と式

PowerBuilder 式のデータ型概要 関数やイベン トの引数に式を渡すと き、 式のデータ型は重要です。 式

のデータ型は、 引数の定義と互換性がなければな り ません。 関数が多重定義されている場合は、 引数のデータ型がどの関数を呼び出すかを決定します。

数値データ型、 String データ型、 Char データ型の 3 種類のデータ型があ り ます。

数値データ型概要 数値データ型は、 互いに互換性があ り ます。

PowerBuilder での処理

PowerBuilder は、 計算や代入を行う と き、 必要に応じてデータ型を変換します。 数値式のオペランドのデータ型は、 演算子とほかのオペランドのデータ型によって、 よ り高い優先順位のデータ型に変換されます。

数値式の評価時におけるデータ型の昇格

優先順位 次に、PowerBuilder の数値データ型を優先順位の高い順に示します。優先順位は、 各データ型の値の範囲に基づいています。

DoubleRealDecimalLongLongUnsignedLongLongUnsignedIntegerInteger

データ型の昇格規則 オペランドのデータ型 式のオペランドが異なるデータ型の場合は、 優先順位の低いデータ型のオペランドが、 優先順位の高いデータ型に変換されます。

符号なしと符号付き 符号なしのデータ型は、 符号付きのデータ型よ り優先順位が高いです。 符号なしのデータ型のオペランド と符号付きのデータ型のオペランドがある場合は、 両方のオペランドのデータ型が優先順位の高い符号なしのデータ型に変換されます。 たとえば、 Long型のオペランド と UnsignedInteger 型のオペラン ドの場合は、 両方のオペランドのデータ型が、 UnsignedLong 型に変換されます。

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

Page 86: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PowerBuilder 式のデータ型

演算子 演算子は、 式のデータ型に対して以下のよ うに影響します。

• +、 -、 * 加算、 減算、 乗算では、 Long 型のオペランドに対する演算結果は、最低限の精度が得られます。計算を行う前に、 Integer 型のオペランドは Long 型へ変換され、式の結果のデータ型は Long 型にな り ます。オペランドのデータ型が Long 型よ り高い優先順位である場合、 ほかのオペランドのデータ型はオペラン ドのデータ型の規則に基づいて同じデータ型に変換されます。

• / と ^ 除算と累乗では、 Double 型のオペランドに対する演算結果は、最低限の精度が得られます。 すべてのオペランドのデ-タ型はDouble 型に変換され、式の結果のデータ型は Double 型にな り ます。

• 関係演算子 関係演算子は、 数値データ型に対するデータ型の変換は発生しません。

リテラルのデータ型 式のオペランドが リテラルの場合、 リ テラルのデータ型はリ テラルの値によって決ま り ます。 リ テラルのデータ型は、 リ テラルとほかのオペランドのデータ型の昇格に影響します。

表 4-5: 式内のリテラル オペラン ドのデータ型

範囲外LongLong 型の範囲を超える整数のリ テラルは、 コンパイル エラーになり ます。

代入とデータ型

概要 代入は、 式を評価しません。 代入文では、 式の結果のデータ型が、 左辺の変数のデータ型に変換されます。

c = a + b

式 a+b のデータ型は、 変数 a と b のデータ型によって決定されます。そして、 式の結果のデータ型は、 変数 c のデータ型に変換されます。

リテラル データ型

Long 型の範囲内にある小数点も累乗指数もない整数 Long

Long 型の範囲を超える整数 (ただし UnsignedLong の範囲内)

UnsignedLong

UnsignedLong 型の範囲を超える整数(ただし LongLong の範囲内)

UnsignedLong

小数点のある (ただし累乗指数のない) 数値 Decimal

小数点と累乗指数がある数値 Double

76 PowerBuilder

Page 87: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 4 章 演算子と式

代入時のオーバーフロー

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 を Long 型に変換しますInteger 型の変数 b を Long 型に変換しますLong 型の変数、 a と b を加算しますLong 型の結果を Integer 型に変換して、 変数 c に代入しますInteger 型の変数 c を Long 型に変換して、 変数 e に代入します

変数 c への代入は、 Long 型の結果が切り捨てられるため、 オーバーフローと まるめが発生します。 変数 c を変数 e に代入しても、失った情報は復元できません。

String 型と Char 型の間の変換概要 明示的な Char 型の リテラルはあ り ません。

以下の規則にしたがって、String 型リテラルは Char 型に変換されます。

• String 型リ テラルを Char 型の変数に代入する と、String 型リテラルの先頭の文字だけが変数に代入される。 次に例を示します。

char c = "xyz"

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

Page 88: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PowerBuilder 式のデータ型

この例では、 文字 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 型配列を渡すと、 前述の変換規則にしたがって、 データ型が変換されます。

78 PowerBuilder

Page 89: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

この章について この章では、 構造体と オブジェ ク ト の基本的なコ ンセプ ト と、PowerScript におけるオブジェ ク ト と構造体の定義方法、宣言方法、使用方法について解説します。

内容

構造体について概要 構造体は、 1 つ以上の変数 (要素と も呼ばれます) を 1 つの名前の

も とにグループ化した集合体です。 変数は、 標準データ型、 オブジェク ト データ型、 ほかの構造体など、 どんなデータ型でも定義できます。

構造体の定義 構造体ペインタやオブジェ ク ト ペインタ (ウ ィ ン ド ウ、 メニュー、ユーザ オブジェ ク ト など) で構造体を定義する とい う こ とは、 構造体の定義を作成する とい う こ とです。 構造体を使用するためには、構造体を宣言しなければな り ません。構造体を宣言する と、構造体のインスタンスが自動的に生成されます。 構造体がスコープから外れる と、 そのインスタンスが破棄されます。

構造体の定義についての詳細は、 『PowerBuilder ユーザーズ ガイド』 マニュアルを参照して ください。

構造体の宣言 構造体ペインタでグローバル構造体 str_emp_data を定義した場合、スク リプ トやオブジェ ク トのインスタンス変数で構造体のインスタンスを宣言します。 オブジェク ト ペインタで構造体を定義した場合は、 そのオブジェ ク ト のインスタンス変数と ス ク リプ ト だけが、 その構造体のインスタンスを宣言できます。

以下の宣言は、 構造体 str_emp_data のインスタンスを 2 つ宣言します。

str_emp_data str_emp1, str_emp2

項目 ページ

構造体について 79

オブジェ ク ト について 80

オブジェ ク ト と構造体の代入 87

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

Page 90: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

オブジェク トについて

構造体変数への参照 スク リプ ト では、 ド ッ ト (.) 表記を使用して、 構造体の変数を参照します。

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 のオブジェ ク ト には、 ウ ィ ン ド ウやウ ィ ン ド ウのコン トロールなどのビジュアル オブジェ ク ト 、 Transaction や Error などの非ビジュアル オブジェ ク ト 、開発者が作成するユーザ オブジェ ク トがあり ます。

80 PowerBuilder

Page 91: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

オブジェ ク ト ク ラ スは、 オブジェ ク ト の定義です。 ウ ィ ン ド ウ、 メニュー、 アプ リ ケーシ ョ ン、 構造体、 またはユーザ オブジェ ク トの各ペインタで、 オブジェ ク ト の定義を作成します。 ペインタでは、 次のよ うにオブジェ ク トの定義を作成します。 つま り 、 オブジェ ク ト の一部となるコン ト ロールを追加、 オブジェ ク ト のプロパテ ィに初期値を設定、 インスタンス変数と関数を定義、 イベン トや関数のスク リプ トを記述、 とい う手順にな り ます。

オブジェ ク ト のインスタンスは、 アプ リ ケーシ ョ ンの実行時に作成されるオブジェ ク ト ク ラスのコピーです。 オブジェ ク トに対してメモ リを割り当て、 オブジェ ク ト ク ラスの定義に基づいてオブジェ ク ト を定義する場合は、 オブジェ ク トのインスタンスを作成します。

オブジェ ク トへの参照は、 オブジェ ク ト のインスタンスへのハンドルです。 オブジェ ク ト を操作するには、 そのオブジェ ク トへの参照が必要です。 適切なデータ型の変数にオブジェ ク トへの参照を代入できます。

システム オブジェクト とユーザ オブジェク ト

PowerBuilder がサポー ト するオブジェ ク ト は、 2 つに分類でき ます。PowerBuilder が定義するシステム オブジェ ク ト (システム ク ラス と して参照される) と開発者がペインタで定義するユーザ オブジェ ク トです。

システム オブジェク ト PowerBuilder のシステム オブジェ ク ト またはシステム ク ラスは、 基本ク ラ スである PowerObject から継承されます。システム ク ラスは、 開発者が定義するオブジェ ク ト の先祖です。 システム ク ラ ス の階層を見る には、 ブ ラ ウザの [シ ス テム] タブで、「PowerObject」 を選択し、 ポップア ップ メ ニューから [階層の表示]と [この下をすべて表示] を選択します。

ユーザ オブジェ ク ト 適切なペインタでオブジェ ク ト ク ラ スの定義を作成します。 ペインタには、 ウ ィ ン ド ウ、 メ ニュー、 アプ リ ケーシ ョン、構造体、 ユーザ オブジェ ク ト ペインタがあ り ます。開発者が定義するオブジェ ク トは、 システム ク ラスか開発者が作成した別のク ラスから継承されます。

ペインタでオブジェ ク ト を定義する場合、 多くのク ラスから継承されます。 ウ ィ ン ド ウ ペインタやユーザ オブジェ ク ト ペインタで作成するオブジェ ク ト の定義は、 システム ク ラ スである Window ク ラ スやUserObject ク ラスから継承されます。 また、 開発者が使用する コン トロールも、 そのコン ト ロールに対応したシステム ク ラスから継承されます。

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

Page 92: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

オブジェク トについて

ユーザ オブジェク トについて2 種類のユーザ オブジェク ト

ユーザ オブジェ ク トには、 ビジュアル ユーザ オブジェ ク ト と ク ラスユーザ オブジェ ク ト の 2 種類があ り ます。

ビジュアル ユーザ オブジェク ト

ビジュアル ユーザ オブジェ ク ト とは、一定の動作を行う、再利用可能なコン ト ロールまたはコン ト ロールの集合です。 標準、 カスタム、 外部の 3 種類があ り ます。

表 5-1: ビジュアル ユーザ オブジェ ク トの種類

クラス ユーザ オブジェク ト

ク ラス ユーザ オブジェ ク トは、プロパテ ィ と関数で構成されます。 イベン ト を含む場合もあ り ます。 画面での表示機能はあ り ません。 標準とカスタムの 2 種類があ り ます。

ビジュアル ユーザ オブジェ ク ト 説明

標準 標準の PowerBuilder コン ト ロールから継承されます。 プロパティ を設定した り、 ス ク リプ ト を記述して、 コン ト ロールを拡張できます。

先祖のコン ト ロールと同じイベン ト とプロパティがあ り ます。 また、開発者はユーザ イベン ト を定義して、 独自のイベン ト を追加できます。

カスタム Userobject システム ク ラスから継承されます。 開発者は、 ユーザ オブジェク ト に複数の PowerBuilderコン ト ロールを配置し、 そのコン ト ロールのイベン トに対するスク リプ ト を記述できます。

ユーザ オブジェ ク ト に配置したコン ト ロールは、先祖のコン ト ロールと同じイベン ト とプロパティがあ り ます。 また、開発者はユーザ イベン ト を定義して、 独自のイベン ト を追加できます。

外部 DLL で定義されたビジュアルなコン ト ロールを表示するユーザ オブジェ ク ト です。 このコン トロールは、 PowerBuilder オブジェ ク ト の階層構造体の一部ではあ り ません。 DLL の開発元は、 コント ロールの提示を管理するスタ イルビッ ト (Stylebit) に関する情報を提供します。

また、コン ト ロールのイベン ト 、関数、プロパティに関する情報も、 DLL の開発元が提供します。

外部ユーザ オブジェ ク トは、 OCX を保持できるOLE 2.0 カスタム コン ト ロールとは異な り ます。

82 PowerBuilder

Page 93: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

表 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 ク ラス オブジェクト から継承されます。 開発者は、 インスタンス変数や関数を追加して、 オブジェ ク ト を拡張できます。

PowerBuilder ク ラス オブジェク ト にはイベン トがある ものがあ り ます。 このイベン トに対するスクリ プ ト を記述するには、ク ラス ユーザ オブジェクト を定義しなければな り ません。

カスタム 開発者が独自に設計するオブジェク ト です。 インスタンス変数、 イベン ト 、 関数を定義して、 アプリ ケーシ ョ ン特定のプログラ ミ ングをカプセル化します。

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

Page 94: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

オブジェク トについて

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 つのオブジェ ク ト に対して、 そのオブジェ ク トへの参照を複数持つこ とができます。 適切なデータ型の変数にオブジェ ク トへの参照を代入するか、 オブジェ ク トへの参照を別のオブジェ ク トに渡して、 オブジェ ク トの情報の取得や変更ができます。

オブジェ ク ト データ型の変数と代入についての詳細は、 86 ページの「 構造体と してのユーザ オブジェク ト 」 を参照して ください。

先祖と子孫の使い方子孫オブジェク ト PowerBuilder では、 オブジェ ク ト ク ラスを別のク ラスから継承できま

す。 継承されたオブジェ ク ト (子孫オブジェ ク ト ) には、 先祖のインスタンス変数、 イベン ト 、 関数すべてが継承されます。 子孫オブジェク トは、 変数、 イベン ト 、 関数を追加して、 子孫オブジェ ク ト を拡張させる こ とができます。 子孫オブジェ ク ト を変更した後も、 先祖オブジェ ク ト を変更すれば、 子孫オブジェ ク トには先祖オブジェ ク トの変更が反映されます。

インスタンスの作成 子孫オブジェ ク ト のインスタンスを作成する と、 そのすべての先祖クラスのインスタンス も作成されます。 プログラムは、 先祖オブジェ クトのインスタンスにアクセスできません。 ただし、 スコープ演算子を使用すれば、 先祖の関数やイベン トにアクセスできます。

84 PowerBuilder

Page 95: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

ガベージ コレクシ ョ ンガベージ コレクシ ョンの機能

PowerBuilder のガベージ コレクシ ョ ン メカニズムは、 メモ リ内の参照されていないオブジェ ク ト や参照元のないオブジェ ク ト を自動的にチェ ッ ク し、 このよ う なオブジェ ク ト が見つかる と削除する こ とによって、 ほとんどの メモ リ リ ークに対処しています。 DESTROY 文を使ってオブジェ ク ト を明示的に破棄しな く ても、 ガベージ コレ クシ ョンを使用して破棄できます。 これによって、 別のプロセスで使用されたオブジェ ク トや、 ポス ト されたイベン トや関数への参照によって渡されたオブジェ ク ト を破棄する と きの実行時エラーを防ぐこ とができます。

ガベージ コレクシ ョンが発生する状況

ガベージ コレ クシ ョ ンが発生するのは、 以下のよ う な場合です。

• 参照がオブジェク トから削除されるとき オブジェ ク ト への参照 とは、 値が object 型のすべての変数です。 変数がスコープからはずれた り、変数に異なる値が代入される と、PowerBuilder がオブジェク トへの参照を削除し、 残りの参照をカウン ト して、 参照が残っていなければオブジェ ク ト を破棄します。

• ガベージ コレクシ ョ ンの間隔時間を超えた場合 PowerBuilder がシ ステム起動イベン トの実行を完了した場合、 設定されたガベージ コレ クシ ョ ンの受け渡し間隔を超えていれば、 ガベージ コレ クシ ョンが行われます。 デフォル トの間隔は 0.5 秒です。 ガベージ コレクシ ョ ンの受け渡しによって、 循環参照を持つもの (互いを参照している以外に参照されていないオブジェ ク ト ) を含め、 参照できないオブジェ ク ト と ク ラスは削除されます。

イベン ト と関数のポス トイベン トや関数をポス ト してオブジェ ク ト参照を渡す場合、 ポス ト した時間から イベン ト や関数が実際に実行される までの間にガベージコレ クシ ョ ンが適用されるのを防ぐため、 オブジェ ク トへの内部参照が追加されます。 この内部参照は、 イベン トや関数が実行される と削除されます。

ガベージ コレクシ ョン適用の例外

コレ クシ ョ ンが適用されないオブジェ ク ト もいくつかあ り ます。

• ビジュアル オブジェ ク ト 画面に表示されるオブジェ ク トは、 画面で作成され、 表示される と きに内部参照が追加されるため、 コレクシ ョ ンの対象とな り ません。 ビジュアル オブジェ ク トは、 閉じられる と明示的に破棄されます。

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

Page 96: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

オブジェク トについて

• タイ ミ ング オブジェ ク ト 実行中のタイ ミ ング オブジェ ク トは、 タイ ミ ング オブジェ ク ト に対する Start 関数によって内部参照が追加されるため、 コレ クシ ョ ンの対象とな り ません。 Stop 関数により、 内部参照は削除されます。

• 共有オブジェク ト 登録された共有オブジェクト は、SharedObjectRegister関数によって内部参照が追加されるため、 コレ クシ ョ ンの対象とな り ません。 内部参照は、 SharedObjectUnregister 関数によって削除されます。

ガベージ コレクシ ョン発生の制御

PowerBuilder では、 ガベージ コレ クシ ョ ンは自動的に発生しますが、GarbageCollect、GarbageCollectGetTimeLimit、GarbageCollectSetTimeLimit の関数を使用する と、 その場で強制的にガベージ コレ クシ ョ ンを発生させた り、 参照カウン トのチェ ッ ク間隔を変更できます。 ガベージ コレクシ ョ ンの間隔を非常に長く設定する こ とによって、 ガベージ コレクシ ョ ンを実質的に無効にするこ と もできます。

構造体としてのユーザ オブジェク ト

PowerBuilder では、 ク ラス ユーザ オブジェ ク トは、 構造体と同じ よ うな機能を提供します。ク ラス ユーザ オブジェ ク ト のインスタンス変数は、 構造体の変数と似た集合体を形成します。 スク リプ ト では、 構造体の変数と同じよ うに、 ド ッ ト (.) 表記を使用して、 ク ラス ユーザ オブジェク ト のインスタンス変数を参照します。

ユーザ オブジェ ク トの利点

ユーザ オブジェ ク トは、 ユーザ オブジェ ク ト関数やユーザ オブジェク ト構造体を定義できる う え、 先祖ク ラスから継承する こ と もできます。 しかし、 構造体は、 関数の定義はできません。

メモリ割り当ての違い ユーザ オブジェ ク ト に対する メモ リの割り当ては、 構造体と異な り ます。 オブジェ ク ト 変数は、 オブジェ ク トへの参照です。 したがって、変数を宣言しても、 オブジェ ク ト に対して メモ リ を割り当てません。オブジェ ク ト を宣言した後に、CREATE 文でオブジェ ク ト のインスタンスを作成しなければな り ません。 また、 ユーザ オブジェ ク トに対する代入も、同じ よ うに異な り ます (次の「 オブジェク ト と 構造体の代入」で解説します)。

インスタンスを自動生成するオブジェク ト

メ ソ ッ ド と継承を持つユーザ オブジェ ク トに、 構造体のメモ リ割り当てと同じ機能を持たせる場合は、 インスタンスを自動生成するユーザオブジェ ク ト を定義します。

86 PowerBuilder

Page 97: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

インスタンスを自動生成するユーザ オブジェ ク トは、 開発者がインスタンスを作成した り破棄する必要があ り ません。構造体と同じよ うに、オブジェ ク ト を宣言したと きにインスタンスが作成され、 スコープから外れたと きに、 インスタンスが破棄されます。 インスタンスを自動生成するオブジェ ク トに対する代入は、 構造体と同じ よ う な動作をします。 したがって、 通常のオブジェ ク トの代入と異な り、 制約事項があ り ます。

カスタム ク ラス ユーザ オブジェ ク ト を自動生成するには、 ユーザ オブジェ ク トのプロパテ ィ シー トのポップアップ メニューから [インスタンスの自動生成] チェ ッ クボッ クスをオンにします。

オブジェク ト と構造体の代入PowerBuilder では、 オブジェ ク ト の代入は、 構造体やインスタンスを自動生成するオブジェ ク トの代入とは異な り ます。

• 構造体を、 同じ定義を持つ別の構造体に代入する と、 構造体のすべての変数の値がコピーされ、 構造体データの 2 つ目のコピーができます。

• オブジェ ク ト データ型の変数を同じオブジェ ク ト データ型の別の変数に代入する と、 そのオブジェ ク ト の参照がコピーされ、 どちらの変数も同じオブジェ ク ト を参照するよ うにな り ます。 オブジェ ク ト自体は、 コピーされません。

構造体の代入

構造体をデータ型とする変数を宣言する と、 その構造体のインスタンスが作成されます。

str_emp_data str_emp1, str_emp2 // 2 つの構造体の// インスタンス

構造体を同じ定義を持つ別の構造体に代入する と、 構造体のすべての変数の値がコピーされ、 構造体データの 2 つ目のコピーができます。

str_emp1 = str_emp2

代入は、 構造体のすべての変数の値を同じデータ型の別の構造体にコピーします。 各変数は、 構造体 str_emp_data のインスタンスです。

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

Page 98: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

オブジェク ト と構造体の代入

構造体の代入の制限 構造体の定義が異なる場合、 構造体の変数の定義が同じでも、 構造体の代入はできません。

たとえば、 以下の代入はできません。

str_emp str_person1str_cust str_person2

str_person2 = str_person1 // 代入できません

構造体を関数の引数と して渡す方法についての詳細は、 107 ページの「 関数と イベント への引数の渡し方」 を参照して ください。

オブジェク トの代入

オブジェ ク ト データ型の変数を宣言する と、 オブジェ ク トの参照が宣言されます。

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

88 PowerBuilder

Page 99: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

オブジェ ク ト を関数の引数と して渡す方法についての詳細は、 107ページの「 関数と イベント への引数の渡し方」 を参照して ください。

自動生成するユーザ オブジェク トの代入

インスタンスを自動生成するユーザ オブジェ ク ト を宣言する と、 そのオブジェ ク ト のインスタンスが自動的に生成されます (構造体と同じです)。 [インスタンスの自動生成] オプシ ョ ン設定がされているユーザ オブジェ ク ト に対しては、 CREATE 文は使用できません。 以下の例では、 uo_emp_data には、 [インスタンスの自動生成] オプシ ョ ンが設定されています。

uo_emp_data uo_emp1, uo_emp2 // 2 つのオブジェ ク ト インスタンス

インスタンスを自動生成するユーザ オブジェ ク ト を別のインスタンスを自動生成するユーザ オブジェ ク トに代入する と、 オブジェ ク ト全体がコピーされます。

uo_emp1 = uo_emp2

インスタンスを自動生成するユーザ オブジェ ク トへの参照は、 1 つしかあ り ません。

関数の引数渡し インスタンスを自動生成するユーザ オブジェ ク ト を関数の引数に渡すと、 構造体を渡したと き と同じよ うな動きをします。

• 値渡しは、 オブジェ ク トのコピーを渡します。

• 参照渡しは、 ほかの標準データ型と同様に、 オブジェ ク トへの参照を渡します。

• 読み出し専用は、 オブジェ ク ト のコピーを渡しますが、 コピーを修正できません。

コピーの制約事項 オブジェ ク ト データ型が一致するか、 コピー先のオブジェ ク トがそのオブジェ ク ト の先祖で、 インスタンスを自動生成しない場合だけ、 インスタンスを自動生成するユーザ オブジェ ク トの代入ができます。

規則 1 インスタンスを自動生成するユーザ オブジェ ク ト を別のインスタンスを自動生成するユーザ オブジェ ク トに代入する場合は、 両方同じオブジェ ク ト データ型でなければな り ません。

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

Page 100: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

オブジェク ト と構造体の代入

規則 2 イ ン ス タ ンス を自動生成する子孫オブジェ ク ト を先祖オブジェ ク トの変数に代入する場合は、 先祖オブジェ ク トに [インスタンスの自動生成] オプシ ョ ンが設定されていてはいけません。 先祖オブジェ ク ト の変数には、 その子孫オブジェ ク トのコピーへの参照が保持されます。

規則 3 先祖オブジェ ク ト を子孫オブジェ ク ト の変数に代入する場合は、 先祖オブジェ ク ト が子孫オブジェ ク トのインスタンスを保持していなければ、 実行時エラーが起きます。

例 以下に例を示します。 宣言文は次のとおりです。 なお、 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 にその子孫オブジェ ク トのインスタンスが保持されていない場合は、 実行時エラーが起きます。

関数と イベン トへの引数の渡し方についての詳細は、107 ページの「 関数と イベント への引数の渡し方」 を参照して ください。

90 PowerBuilder

Page 101: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

この章について この章では、 まず、 関数やイベン ト のさ まざまな使い方を理解するのに役立つ予備知識を説明し、 次に、 関数と イベン ト を呼び出す構文について説明します。

内容

関数とイベン トについて関数とイベン トの重要性 PowerScript 言語には、式や代入文で使用できる PowerScript 関数が

用意されています。

関数とイベン トの種類 PowerBuilder のオブジェ ク ト には、 そのオブジェ ク ト で使用できる イベン ト と関数があ り ます。 独自のユーザ定義関数とユーザイベン ト を定義すれば、オブジェ ク ト を拡張するこ とができます。また、オブジェ ク トにローカル外部関数を宣言するこ と もできます。PowerScript 言語には、 どのオブジェ ク トにも属さないシステム関数もあ り ます。 また、外部関数やリモート プロシージャ コールを宣言して、 独自のグローバル関数を定義できます。

次の表に、 関数と イベン トの種類の一覧を示します。

項目 ページ

関数と イベン トについて 91

関数と イベン トの検索と実行方法 94

関数と イベン トの ト リ ガまたはポス ト 96

静的呼び出し と動的呼び出し 98

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

関数と イベン トへの引数の渡し方 107

戻り値の使い方 110

PowerBuilder の関数と イベン トの呼び出し構文 113

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

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

Page 102: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

関数とイベン トについて

表 6-1: 関数とイベン トの種類

分類 用語 定義

イベン ト イベン ト スク リプ トの実行を開始できる、 オブジェクトやコン ト ロールのアクシ ョ ン。 エンド ユーザはアクシ ョ ン (オブジェ ク ト をク リ ッ クするかデータを入力します) によって、 イベント を起動できます。 また、 別のスク リプ トのステー ト メ ン ト でも イベン ト を起動でき ます。

ユーザ イベント

オブジェク ト の機能を拡張するために定義するイベン ト 。 引数やリ ターン コードを指定します。 また、 イベン ト が Windows システムメ ッセージに対応するかど う か も指定し ます。 ユーザ イベン トの定義方法についての詳細は、 『PowerBuilder ユーザーズ ガイ ド』 マニュアルを参照して ください。

シ ステム イベン ト - ま たは組み込み イ ベ ント

PowerBuilder であらかじめ定義されているオブジェ ク ト に対するイベン ト 。システム イベン トは通常、エンド ユーザのアクシ ョ ンやシステム メ ッセージによって起動されます。PowerBuilder は、 あらかじめ定義されているイベン トに引数を渡すので、 そのイベン トに対するスク リ プ ト で引数が参照できます。 システム イベン トは、 Long 型の リ ターン コードを指定するか、 リ ターン コードがないかのどちらかです。

関数 関数 特定の処理を実行するプログラムまたはルーチン

システム関数 オブ ジ ェ ク ト に関連付 け ら れ て い な いPowerScript 関数

オブ ジ ェ ク ト関数

オ ブ ジ ェ ク ト に 関 連付 け ら れ た 関 数。PowerBuilder はあ らかじめ定義されたオブジェク ト関数を用意しています。 また、 開発者が独自に関数を定義するこ と もできます。

ユーザ定義関数

開発者が定義する関数。 関数ペイ ンタでグローバル関数を定義し、ス ク リ プ ト ビューを持つほかのペインタでオブジェ ク ト関数を定義します。

グ ロ ーバル関数

アプ リ ケーシ ョ ン内のすべてのスク リプ トから呼び出すこ とができる関数。 PowerScript のシステム関数はグローバルにアクセスできます。

92 PowerBuilder

Page 103: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

関数とイベン トの比較 関数と イベン トには次のよ う な類似点があ り ます。

• 引数と戻り値がある

• 動的または静的に呼び出すこ とができ る (グローバル関数やシステム関数は動的に呼び出すこ とはできない)

• 関数やイベン トの呼び出しをポス ト または ト リ ガできる

関数と イベン トの相違点は以下のとおりです。

• 関数はグローバルかオブジェ ク トの定義の一部。 イベン トはオブジェ ク トに関連付けられている

• イベン ト と関数の検索方法は異なる

• 定義されていないイベン ト の呼び出しはエラーにならないが、 定義されていない関数の呼び出しはエラーになる

• オブジェ ク ト レベルの関数は多重定義できるが、 イベン ト (とグローバル関数) は多重定義できない

• 関数を定義する と きは、 関数へのアクセスを制限できるが、 イベン ト を定義する と きは、 スコープ レベルを記述できない

• 関数を継承する場合、 子孫のス ク リプ ト内で先祖関数を呼び出すこ とによって、 先祖関数を拡張でき る。 また、 先祖関数の定義を上書きする こ と もできる。 イベン ト を継承する場合、 デフォル トではイベン ト のス ク リプ ト が拡張される。 ス ク リ プ ト を拡張するか、 上書きするかを選択できる

関数 ロ ー カ ル外部関数

オブジェ ク ト に属す外部関数。ウ ィ ンド ウ ペインタやユーザ オブジェ ク ト ペインタなどで宣言します。 外部関数の定義は別のラ イブラ リ内にあ り ます。

グ ロ ーバル外部関数

アプ リ ケーシ ョ ン内のすべてのスク リプ ト で呼び出すこ とができる外部関数。 各種ペインタで宣言します。 外部関数の定義は別のライブラ リ内にあ り ます。

リ モー ト プロシージ ャ コール

スク リプ ト から呼び出すこ とのできるデータベースのス ト アド プロシージャ。RPC は、グローバルまたはローカル (オブジェク ト に属します) で宣言できます。 ス ト アド プロシージャの定義はデータベースにあ り ます。

分類 用語 定義

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

Page 104: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

関数とイベン トの検索と実行方法

どちらを使うか ス ク リ プ ト をユーザ定義関数かユーザ イベン ト のどちらで記述するかは、 アプ リ ケーシ ョ ンの設計時に決めます。 ス ク リプ ト をどちらで記述してもパフォーマンスに違いはあ り ません。 開発者がユーザ イベン トの定義かユーザ定義関数の定義のどちらのインタフェースを好むか、 エラー処理をどのよ うにするか、 多重定義をするかなどを考慮して決定します。

イベン ト か関数のどちらか一方しか使用しないとい う こ とはないでし ょ うが、 管理を容易にするために、 通常の処理にはイベン トか関数のどちらかを使用するよ うに決めた方がよいでし ょ う。

関数とイベン トの検索と実行方法PowerBuilder は、 一致する関数やイベン ト を、 その名前と引数 リ ス トに基づいて検索します。 PowerBuilder は、引数のデータ型に互換性があれば (すべての数値型など)、一致する とみなします。データ型は正確に一致する必要はあ り ません。 PowerBuilder は、互換性のあるデータ型の優先順位に従って、 あるデータ型が別のデータ型とどの く らいの近さで一致するかをチェ ッ ク します。

関数と イベン トの大きな違いは、 検索方法です。

関数の検索

関数を呼び出すと きは、 一致する関数が見つかるまで検索し、 関数が見つかる と検索が終了し、 その関数が実行されます。 関数名が同じで引数が異なる場合は、 関数の多重定義と呼びます。 詳細については、105 ページの「 関数と イ ベント の多重定義、 上書き 、 拡張」 を参照して ください。

修飾子のない関数名 関数名をオブジェ ク ト名で修飾していない場合は、 名前と引数が一致す る 関数が検索 さ れ、 最初に見つか っ た関数が実行 さ れ ます。PowerBuilder は、 次の順序で一致する関数を検索します。

1 グローバル外部関数

2 グローバル関数

3 オブジェ ク ト関数と ローカル外部関数。 オブジェ ク ト が子孫の場合は、 継承階層の最下位の階層レベルから順に一致する関数が検索される

94 PowerBuilder

Page 105: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

4 システム関数

修飾子のある関数名 オブジェ ク ト関数とグローバル関数が同じ名前の場合、 オブジェ ク ト関数を呼びだすには、 ド ッ ト (.) 表記を使用してオブジェ ク ト関数を修飾します。 修飾子のある関数名を使えば、 関数の検索は、 そのオブジェ ク トの先祖の階層 (上記の検索順の 3 番) までしか行われません。以下に例を示します。

dw_1.Update( )w_employee.uf_process_list()This.uf_process_list()

オブジェ ク ト の継承階層内で関数を検索する場合は、 一致する子孫関数のかわりに、 先祖関数を呼び出すこ とができます。

先祖関数を呼び出す構文については、 117 ページの「 先祖オブジェ クト の関数と イベント の呼び出し 」 を参照して ください。

イベン トの検索

子孫オブジェ ク トのイベン トは、 デフォル ト では先祖イベン トの拡張です。 イベン ト を呼び出すと きは、 そのオブジェ ク トの継承階層の最下位のレベルから順に、 最上位のレベルに達するか先祖オブジェ ク トを上書きする イベン ト が見つかるまで、 イベン ト が検索されます。 次に、 上位の階層レベルの先祖イベン トから下位の階層レベルの子孫イベン トへと、 検出されたすべてのイベン トが実行されます。

関数とイベン トの検索 次の図に、 関数の検索方法と イベン トの検索方法の違いを示します。

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

Page 106: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

関数とイベン トのト リガまたはポスト

関数とイベン トのト リガまたはポス トト リガ PowerBuilder では、関数やイベン ト (以下、 2 つを総称してメ ソ ッ ド と

呼ぶ) を ト リ ガする と、 メ ソ ッ ドはすぐに呼び出されます。 メ ソ ッ ドの戻り値は、 呼び出し元のスク リプ ト で使用できます。

ポスト メ ソ ッ ド をポス ト する と、 メ ソ ッ ドは呼び出し元のオブジェ ク ト のキューに追加され、 順番が来る と実行されます。 ほとんどの場合、 現行のスク リプ トが終了する と実行されます。 ただし、 別のシステム イベン トが、 メ ソ ッ ドが実行される前に発生した場合は、 キュー内でのメ ソ ッ ドの位置はそのシステム イベン トの後になる こ とがあ り ます。メ ソ ッ ドの戻り値は、 呼び出し元のスク リプ トでは使用できません。

メ ソ ッ ド をポス トする と、 呼び出し元のスク リプ トはメ ソ ッ ドの戻り値を使用できません。 ポス ト されたメ ソ ッ ドは、 サブルーチンの呼び出し とみなすこ とができます。

状態情報をチェ ッ クする前に処理を終了しなければならない場合や、さ らに処理が続く よ う な場合、 ポス ト機能を使用します。 次の例 2 を参照して ください。

PowerBuilder メ ッセージの優先

PowerBuilder によってポス ト されたすべてのイベン トは、 Windows システムのキューとは別のキューによって処理されます。 PowerBuilderによってポス ト された メ ッセージは、 Windows によってポス ト されたメ ッセージよ り も先に処理されるため、 Windows のメ ッセージをポスト する イベン ト の中でポス ト された PowerBuilder のイベン ト は、Windows のメ ッセージよ り も先に処理されます。

た と えば、 エデ ィ ッ ト マス ク コン ト ロールに文字が入力される と、PowerBuilder の pdm_keydown イベン ト が Windows の メ ッ セージWM_CHAR をポス ト してこの文字を入力します。 入力された文字をエディ ッ ト マス ク コン ト ロールから別のコン ト ロールにコピーしたい場合は、 コードを pdm_keydown イベン トの中でポス ト されるイベン トの中に記述してはいけません。 この処理は、pdm_keyup にマップされたイベン ト など、 WM_CHAR メ ッセージが処理された後で発生する イベン ト の中で行う必要があ り ます。

POST の制約条件 メ ソ ッ ド をポス トする と、 呼び出し元のスク リプ ト ではメ ソ ッ ドの戻り値が使用できません。 したがって、 以下の制約があ り ます。

• 式のオペラン ドには、 ポス ト された関数やイベン ト を使用できません。

• 関数の引数には、ポス ト された関数やイベン ト を使用できません。

• カスケード呼び出しでは、最後のメ ソ ッ ドの呼び出しだけ POST を使用できます。

96 PowerBuilder

Page 107: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

以下のステー ト メ ン トは、 コンパイル エラーにな り ます。 どちらのステート メ ン ト も戻り値が必要です。

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 のメ ッセージ オブジェ ク トで、 イベン トにデータを渡さなければな り ません。

ポス トの例 以下に、 イベン ト をポス トする例を示します。

例 1 サンプル アプリ ケーシ ョ ンで、 ウ ィ ン ド ウ w_activity_manager のOpen イベン ト は、 ユーザ オブジェ ク ト u_app_actman に属する関数uf_setup と uf_set_tabpbsystem を呼び出します。 関数がポス ト されるので、 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 ()

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

Page 108: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

静的呼び出しと動的呼び出し

静的呼び出し と動的呼び出し関数とイベン トの呼び出し

関数と イベン ト の呼び出しには、 関数やイベン ト の種類と定義された検索方法に応じて、 3 つの方法があ り ます。

表 6-2: PowerBuilder による関数とイベン トの呼び出し方法

静的または動的な呼び出しの指定

オブジェ ク ト関数やイベン トでは、 静的または動的な呼び出しを指定して、 PowerBuilder がいつオブジェ ク ト関数やイベン ト を検索するかを指定できます。 静的な呼び出しには STATIC キーワード、 動的な呼び出しには DYNAMIC キーワードを指定します。 DYNAMIC キーワードは、オブジェ ク ト に関連付けられた関数だけに適用されます。 グローバル関数やシステム関数は、 動的に呼び出すこ とはできません。

静的呼び出し

PowerBuilder は、 デフォル ト では関数と イベン トの静的な呼び出しをします。 つま り、 ス ク リ プ ト をコンパイルする と きに、 メ ソ ッ ドの名前と引数のデータ型を照合する こ とによって、メ ソ ッ ド を識別します。コンパイル時に、 一致する メ ソ ッ ドがオブジェ ク ト に存在しなければな り ません。

関数の種類 コンパイル条件 コ メン ト

グ ローバル関数とシステム関数

必須。 関数はス ク リ プト がコンパイルされると きに存在しなければな り ません。

関数は、コンパイル時に存在していなければならず、直接呼び出されます。 関数は多重定義できません。したがって、実行時に同じ名前の別の関数が呼ばれる こ とはあ りません。

静的に検索されるオブジェ ク ト関数

必須。 関数はス ク リ プト がコンパイルされると きに存在しなければな り ません。

関数は多重定義でき ます。関数は、コンパイルする と きに存在しなければな り ませんが、実行時に別のク ラスがインス タンス化された場合は、そのク ラスの関数がかわりに呼び出されます。

動的に検索されるオブジェ ク ト関数

任意。 関数はス ク リ プト がコンパイルされると き に、 そ の 存 在 をチェ ッ ク されません。

関数は多重定義でき ます。実際に呼び出される関数は、実行時に決定されます。

98 PowerBuilder

Page 109: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

静的呼び出しの結果 静的呼び出しでは、 コンパイル時に識別された関数やイベン トが実行される とは限り ません。 たとえば、 先祖オブジェ ク ト をデータ型と して変数を定義し、 その先祖オブジェ ク ト には関数が定義されている とします。 その変数に子孫オブジェ ク ト のインス タンスを代入します。子孫オブジェ ク トに先祖関数 (コンパイル時に見つけられた先祖の関数) を上書きする関数がある場合は、 その子孫関数が実行されます。

動的呼び出し

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 にあ りません。

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

Page 110: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

静的呼び出しと動的呼び出し

例 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 型)が実行されます。

ステート メン ト 結果

100 PowerBuilder

Page 111: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

動的呼び出しの使用例 サンプル アプ リ ケーシ ョ ンで、 先祖ウ ィン ド ウ 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( )

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

Page 112: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

静的呼び出しと動的呼び出し

次の表は、 これらのステート メン ト を例と して使用しています。

表 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( )

次の表は、 これらのステート メン ト を例と して使用しています。

条件 1 条件 2 結果 例

関数が存在しない場合

なし 実行時エラー 65 :「動的関数が参照できません」が起きます。

す べ て の ステー ト メ ン トで 実 行 時 エラー 65 が起きます。

関数が存在し、実行されるが、戻り値が定義されていない場合

ス ク リ プ ト が リターン コー ド を必要とする場合

実行時エラー 63 :「戻 り値のない関数/ イベン トが式の中で使われています」が起きます。

ス テー ト メ ント 2 と 3 では、実行時エ ラ ー63 が起きます。

102 PowerBuilder

Page 113: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

表 6-4: 動的なイベン トの呼び出しエラー

条件 1 条件 2 結果 例

イベン トが存在しない場合

ス ク リ プ ト が リターン コー ド を必要と しない場合

呼び出しは失敗し ま す が、 エラーは起き ません。

ステー ト メ ン ト 1の実行は失敗しますが、 エラーは起きません。

ス ク リ プ ト が リターン コー ド を必要とする場合

Any 型の NULL が返されます。

ステー ト メ ン ト 3では、変数 La_anyに NULL が設定されます。

ス ク リ プ ト が必要とする リ ターン コードのデータ型が Any 型でない場合、 実行時エラー 19 が起きます。 Any 型のリ ターン コードを適切なデータ型に変換する こと は で き ま せん。

ステー ト メ ン ト 2では、変数 li_int への代入は実行時エラー 19 が起き ます。

イベン トが存在するが、 実装されない (ス ク リプ トがない) 場合

イベン ト に リ ターン コー ド が定義されている場合

定義されたデータ型の NULL が返されます。

イベント eventnameが Integer 型の リターン コー ド を返すよ うに定義されている場合、 ステー ト メ ン ト 2 では、 変数 li_int にNULL が設定されます。

イベン ト に リ ターン コー ド が定義されていない場合

Any 型の NULL が返されます。

ステー ト メ ン ト 3では、変数 La_anyに NULL が設定されます。

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

Page 114: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

静的呼び出しと動的呼び出し

エラーが起きた場合 実行時エラーが起きた と きにアプ リ ケーシ ョ ンを終了させないために、 動的関数呼び出しを try-catch ブロ ッ クで囲むこ とができ ます。SystemError イベン ト でエラーを処理する こ と もでき ますが、 アプ リケーシ ョ ンをそのまま継続させないでください。 SystemError イベン トでは、 エラーの後処理をし、 アプ リ ケーシ ョ ンを終了させる必要があり ます。

try-catch ブロ ッ クの使用法については、 『アプ リ ケーシ ョ ン テクニック』 マニュアルの例外処理の章を参照して ください。

引数が一致しない場合 関数の引数は、 関数定義の一部です。 したがって、 引数が一致しない場合は (データ型に互換性があれば一致する とみなす)、その関数は異なる関数です。 関数が存在しない場合と同じ結果とな り ます。

引数が一致しないイベン ト を動的に呼び出す場合は、 呼び出しは失敗し、 制御が呼び出し元のスク リプ ト に戻り ます。 実行時エラーは起きません。

エラーのないスク リプトの記述方法

関数と イベン ト の動的呼び出しは、 実行時エラーが起きやすくな り ます。 これらのエラーを回避する方法は、 関数と イベン ト を静的に呼び出すこ とです。 または、 アプ リ ケーシ ョ ンの設計と テス ト を十分に行って、 関数やイベン ト が、 正しいデータ型の戻り値を確実に返すようにします。

エラーをチェ ッ クする こ とで、 実行時エラーを回避できるのは、 データ型の変換エラーです。

ス ク リ プ ト が必要とする リ ターン コードのデータ型が Any 型でない場合、 実行時エラー 19 が起きます。 Any 型のリ ターン コードを適切なデータ型に変換する こと は で き ま せん。

ステー ト メ ン ト 2では、変数 li_int への代入は実行時エラー 19 が起き ます。

イベン トが存在し、 実行されるが、 リ タ ー ンコードが定義されていない場合

ス ク リ プ ト が リターン コー ド を必要とする場合

実行時エラー 63 :「戻 り 値の な い関数/ イベン トが式の中で使われています」 が起きます。

ステー ト メ ン ト 2と 3 では、 実行時エラー 63 が起きます。

条件 1 条件 2 結果 例

104 PowerBuilder

Page 115: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

上記の表で前述したとおり、 関数やイベン ト が定義されていても実装されていない場合、 関数やイベン トは、 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

関数とイベン トの多重定義、 上書き、 拡張PowerBuilder で関数を継承する場合、次の「 関数の多重定義と 上書き 」で説明しているよ うに、 関数を多重定義するか、 その定義を上書きするかを選択できます。

イベン ト を継承する場合、 デフォル トではイベン トのス ク リプ ト が拡張されます。 107 ページの「 イ ベント の拡張と 上書き 」 で説明しているよ うに、 スク リプ ト を拡張するか、 上書きするかを選択できます。

関数の多重定義と上書き

多重定義する関数を作成するには、 ほかの関数の場合と同じ よ う に、[挿入|関数] を使って関数を宣言します。

関数の上書きは、 先祖オブジェ ク トの関数と同じ名前で同じ引数の関数を、 子孫オブジェ ク トで定義する こ と を意味します。 子孫オブジェク ト では、 スコープ記号 (::) を使用しない限り、 先祖関数のかわ りに子孫関数が常に呼び出されます。

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

Page 116: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

関数を上書きするには、 ペインタで子孫オブジェ ク ト を開き、 スク リプ ト ビューでその関数を選択し、 新しいスク リプ ト を作成します。 関数にスク リプ ト があるこ と を示すアイ コンは、 その関数が先祖から継承されている場合、 半分影付きになっています。

オブジェ ク ト関数だけが多重定義や上書きができます。 グローバル関数は多重定義できません。

多重定義された関数の引数を一致させるときのデータ型の変換

引数に数値を渡す関数と文字列を渡す関数が多重定義されている場合、 開発者には、 どの引数を指定すれば、 どちらの関数が呼び出されるかは明らかです。 多重定義された関数の引数のデータ型は、 互換性がないほ うがよいでし ょ う。このよ う な多重定義では、アプリ ケーシ ョンに必要な関数を確実に呼び出せます。

問題のある多重定義 多重定義された関数の引数のデータ型が互換性がある場合 (数値データ型、文字列と文字)、 どの関数が呼び出されるかを決定するには、 どのよ うにデータ型が変換されるかを考慮しなければな り ません。 どの関数が呼び出されるかを決定するのが複雑なため、 このよ う な多重定義は望まし く あ り ません。

引数に式を渡して関数を呼び出した場合、 式のデータ型が明確でないと きがあ り ます。 しかし、 引数のデータ型は、 多重定義された関数のう ちどの関数を呼び出すかを決定するので重要です。

数値データ型のデータ型変換は複雑なため、 異なる数値データ型の引数を持つ関数は多重定義しないほ うがよいでし ょ う 。 後で何か変更を行った場合、 その変更が変更前と異なる関数を呼び出してしま う と、アプ リ ケーシ ョ ンを実行したと きに予期せぬ結果になる こ とがあ り ます。

データ型の昇格の動作方法

式が評価される と きは、 定数や変数のデータ型を変換して、 演算や文字列の連結をします。

数値 算術演算式が評価される と き、 演算子とオペラン ドのデータ型に応じて、 式のデータ型が変換されます。 たとえば、 式 n/2 は除算なので、式のデータ型は Double 型にな り ます。変数 n のデータ型は、データ型の変換には関係しません。

文字列 文字と文字列を連結する式が評価される と き、 文字 (Char 型)は文字列 (String 型) に変換されます。

データ型の昇格についての詳細は、 75 ページの「 PowerBuilder 式のデータ型」 を参照して ください。

106 PowerBuilder

Page 117: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

データ型の変換関数の使い方

データ型の変換関数を呼び出すこ とによ り、 式のデータ型を制御できます。 データ型の変換関数を用いて、 式のデータ型を変換し、 呼び出す関数の引数のデータ型に合わせる こ とができます。

たとえば、式 n/2 は除算なので、式のデータ型は Double 型にな り ます。しかし、呼び出す関数の引数のデータ型が Long 型の場合は、呼び出す関数とオブジェ ク ト に定義されている関数を一致させるために、 Long関数を使用して、 式のデータ型を Long 型に変換します。

CalculateHalf(Long(n/2))

イベン トの拡張と上書き

PowerBuilder で、 子孫オブジェ ク ト でイベン ト のス ク リプ ト を記述する場合は、 先祖で記述したスク リプ ト を拡張または上書きできます。

イベン ト の拡張 (デフォル ト ) は、 まず先祖ス ク リ プ ト を実行して、次に子孫のイベン ト スク リプ ト を実行します。

イベン ト の上書きは、 先祖ス ク リプ ト を無視して、 子孫スク リプ ト だけを実行します。

イベン トの多重定義はできません同じ名前で異なる引数のイベン ト を定義しても、 イベン トは多重定義できません。 イベン ト名は固有でなければな り ません。

拡張または上書きを選択するには、 スク リプ ト ビューでスク リプ ト を開き、 メニューの [編集] またはポップアップ メニューの [先祖スクリプ ト を拡張] をオンまたはオフにします。

関数とイベン トへの引数の渡し方PowerBuilder では、 組み込みまたはユーザ定義の関数と イベン ト に引数を渡す方法は、 3 種類あ り ます。

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

Page 118: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

関数とイベン トへの引数の渡し方

表 6-5: 関数とイベン トへの引数の渡し方

オブジェク トの渡し方

関数やイベン ト の引数にオブジェ ク ト を渡すと、 そのオブジェ ク トのプロパテ ィ と関数を参照する と きは、 オブジェ ク ト が存在しなければな り ません。 関数を呼び出してもオブジェ ク トのインスタンスが破棄されていた場合は、 NULL オブジェ ク トの参照のため実行時エラーにな り ます。 これは、 参照渡し、 値渡し、 読み出し専用のいずれの方法で引数を渡したと してもエラーにな り ます。

たとえば、 シングルラ イン エディ ッ トがあるウ ィン ド ウがある と します。 ウ ィ ン ド ウの Close イベン トで、 関数にシングルラ イン エディ ット を渡してポス トする場合、 関数が実行する と きにはウ ィ ン ド ウが存在しません。 シングルラ イン エディ ッ トに入力した情報を使用するには、 引数にオブジェ ク ト を渡すのではな く、 オブジェ ク ト名などの情報そのものを渡さなければな り ません。

引数の渡し方 説明

値渡し (By value) 関数やイベン トのスク リプ ト では、呼び出し元の変数のコピーが使用できます。 渡された引数の変更は、変数のコピーだけに影響します。 呼び出し元のスク リプ トにあるオリ ジナルの変数は、変更されません。

参照渡し(By reference) 関数やイベン トのス ク リ プ ト に呼び出し元の変数へのポインタが渡されます。 渡された引数の変更は、呼び出し元のスク リプ トにあるオ リ ジナルの変数を変更します。

読み出し専用 関数やイベン トで呼び出し元の変数が使用できます。 引数の値は定数と同じよ うに扱われます。渡された引数の変更はできません。引数を変更するスクリ プ ト を記述する と コンパイル エラーにな り ます。

読み出し専用は値渡しのよ う にデータのコピーを作成しないので、いくつかのデータ型ではパフォーマンスがよ く な り ます。 読み出し専用によってパフォーマンスがよ く なるデータ型は、String 型、Blob型、 Date 型、 Time 型、 DateTime 型です。

ほかのデータ型については、読み出し専用で引数を渡すこ とによって、開発者に引数が読み出ししか使用されないこ とを明確にさせます。

108 PowerBuilder

Page 119: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

オブジェ ク ト を渡しても、 関数ではオブジェ ク ト のコピーは取得できません。 参照渡し と値渡しはオブジェ ク ト自身でな く、 オブジェ ク トの参照が渡されます。

値渡し されたオブジェク ト

オブジェ ク ト を値渡しする と、 オブジェ ク トへの参照のコピーが渡されます。 その参照はオ リ ジナルのオブジェ ク ト をそのまま指しています。 渡されたオブジェ ク ト のプロパテ ィ を変更する と、 オ リ ジナルのオブジェ ク ト が変更されます。 ただし、 オ リ ジナルのオブジェ ク ト に影響しないで、 別のオブジェ ク ト を参照するよ うに引数の値を変更する こ と もできます。

参照渡しされたオブジェ ク ト

オブジェ ク ト を参照渡しする と、 オ リ ジナルのオブジェ ク トの参照へのポインタが渡されます。 渡されたオブジェ ク ト のプロパテ ィ を変更する と、 オ リ ジナルのオブジェ ク トが変更されます。 渡された引数の値を変更して、 オ リ ジナルのオブジェ ク トへの参照を新しいオブジェク トへの参照にするこ とができます。

読み出し専用で渡されたオブジェク ト

オブジェ ク ト を読み出し専用で渡すと、 オブジェ ク トへの参照のコピーが渡されます。 新しいオブジェ ク ト を指すよ うに、 オ リ ジナルのオブジェ ク トへの参照を変更する こ とはできませんが (読み出し専用は CONSTANT 宣言に等しいため) 、 オ リ ジナルのオブジェ ク トのプロパティ を変更するこ とはできます。

構造体の渡し方

引数に構造体を渡す場合は、 オブジェ ク ト と違って変数と同じよ うに動作します。

値渡し された構造体 構造体を値渡しする と、 構造体のコピーが渡されます。 オ リ ジナルの構造体に影響しないで、 引数の値を変更するこ とができます。

参照渡しされた構造体 構造体を参照渡しする と、 構造体への参照が渡されます。 引数の値を変更する と、 オ リ ジナルの構造体が変更されます。 構造体は、 スコープの外に出るまで存在するので、 NULL オブジェ ク トの参照エラーになるこ とはあ り ません。

読み出し専用で渡された構造体

構造体を読み出し専用で渡すと、 構造体のコピーが渡されます。 引数の値は変更できません。

配列の渡し方

引数が配列の場合は、 関数やイベン トの定義で引数名の後に角カッ コ([]) を指定します。

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

Page 120: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

戻り値の使い方

引数としての可変長配列

たとえば、関数 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)

配列の次元が一致しない場合渡された配列変数の次元が、 関数で定義されている配列引数の次元と一致しない場合は、 配列から配列への代入規則が適用されます。 詳細については、 48 ページの「 配列の宣言」 を参照して ください。

戻り値の使い方関数と イベン トの戻り値は使用できます。

関数

すべての PowerScript 関数は、戻り値を返します。戻り値は、 使用するこ と も、 無視する こ と もできます。 ユーザ定義関数と外部関数は、 必ずし も戻り値を返すとは限り ません。

戻り値を使用するには、適切なデータ型の変数に戻り値を代入するか、戻り値と同じデータ型の値が使用できる箇所で関数を呼び出します。

110 PowerBuilder

Page 121: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

関数のポスト関数をポス トする と、 その戻り値は使用できません。

例 組み込みの Asc 関数は String 型の引数を受け取り、 渡された文字列の最初の文字の ASCII コードを返します。

string S1 = "Carton"int Test

Test=32+Asc(S1) // 変数 Test の値は現在 99// です ("C" の ASCII コードは 67 です)。

SelectRow 関数は、最初の引数に行番号を受け取り ます。 GetRow 関数の戻り値は、 行番号を返します。

dw_1.SelectRow(dw_1.GetRow(), TRUE)

戻り値を無視するには、 1 つのステー ト メ ン ト と して関数を呼び出します。

Beep(4) // Beep 関数は戻り値を返しますが、 // ほとんど必要と されません。

イベン ト

ほとんどのシステム イベン トは リ ターン コードを返します。 リ ターンコードは Long 型の数値のコードで、イベン ト ご とに特別な意味があ ります。 イベン トに対するスク リプ ト で RETURN 文を使用して、 イベントの リ ターン コードを指定します。

エン ド ユーザのアクシ ョ ンかシステム メ ッセージによってイベン トが起動された場合、 リ ターン コードはスク リプ トにではな く システムに戻されます。

システム イベン トやユーザ定義イベン ト をス ク リ プ ト で起動する場合は、 リ ターン コードは呼び出し元のスク リプ トに戻されます。 スクリプ トでは、 その リ ターン コードを使用できます。 イベン ト をポス トする と、 リ ターン コードは使用できません。

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

Page 122: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

戻り値の使い方

カスケード呼び出しと戻り値の使い方

PowerBuilder のド ッ ト (.) 表記を使用して、 いくつかのオブジェ ク ト関数またはイベン ト を連続的に呼び出すこ とができます。 関数またはイベン ト の戻り値は、 次に呼び出される関数またはイベン トが属すオブジェク ト と同じオブジェク ト データ型でなければな り ません。

次の構文は、 3 つの関数をカスケード呼び出しする場合の戻り値の関係を示します。

func1returnsobject( ).func2returnsobject( ).func3returnsanything( )

カスケード呼び出しの欠点関数をカスケード呼び出しする と、 関数の戻り値をチェ ッ クできな くなるため、 関数の呼び出しが成功したかど うかを確認するこ とができません。 関数の戻り値をチェ ッ クする場合、 各関数を別々に呼び出し、戻り値を変数に代入します。 そして、 カスケード呼び出しの最後の関数名の前に、 エラー チェ ッ ク した変数をド ッ ト (.) 表記で指定できます。

動的呼び出し カスケード呼び出しで DYNAMIC キーワードを使用する と、呼び出されるすべての関数に適用されます。

次の例では、 関数 func1 と func2 がどちら と も動的に呼び出されます。

object1.DYNAMIC func1().func2()

カスケード呼び出しで DYNAMIC キーワードを複数使用する と、コンパイル エラーにな り ます。 次の例は、 エラーにな り ます。

object1.DYNAMIC func1().DYNAMIC func2() // エラー

ポスト された関数とイベン ト

ポス ト された関数やイベン トは、 呼び出し元のスク リプ トに戻り値を戻しません。 したがって、 カスケード呼び出しの最後の関数またはイベン トだけが POST キーワードを使用できます。 最後の呼び出しの前の呼び出しは、 最後に呼び出される関数またはイベン ト が属すオブジェ ク ト と同じオブジェ ク ト データ型の戻 り値を戻さなければな りません。

システム イベン ト システム イベン ト の リ ターン コードのデータ型は Long 型であるか、またはリ ターン コードがないので、システム イベン トはカスケード呼び出しの最後に指定しなければな り ません。 システム イベン トは、 次の呼び出しで使用できるオブジェ ク ト を戻しません。

ユーザ定義イベン トは、オブジェク ト データ型のリ ターン コードを定義できます。 したがって、 ユーザ定義イベン ト をカスケード呼び出しに指定できます。

112 PowerBuilder

Page 123: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

PowerBuilder の関数とイベン トの呼び出し構文説明 これは、 PowerBuilder のすべての関数と イベン ト を呼び出すための構

文です。 指定するキーワードによって、 システム関数、 グローバル関数、 オブジェ ク ト関数、 ユーザ定義関数、 外部関数、 およびユーザ定義イベン ト を呼び出すこ とができます。

構文 { objectname.} { type } { calltype } { when } name ( { argumentlist } )

次の表に、関数と イベン ト を呼び出すと きに使用する引数を示します。

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

Page 124: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PowerBuilder の関数とイベン トの呼び出し構文

表 6-6: 関数とイベン トの呼び出しで使用する引数

引数 説明

objectname (オプシ ョ ン)

関数またはイベン ト が定義されているオブジェ ク ト の名前またはその子孫オブジェ ク ト の名前。 後にピ リ オド (.) が続きます。 または、 2 つのコロン (::) が続く先祖ク ラスの名前です。 修飾子のない関数名の場合、 PowerBuilder は関数の検索規則に従い、 最初に見つけた関数を実行します。

システム関数やグローバル関数の場合は、objectname を省略します。 修飾子のない関数名を検索するための検索規則についての詳細は、 94 ページの 「関数と イベン トの検索と実行方法」 を参照して ください。

type (オプシ ョ ン)

関数またはイベン ト のどちらを呼び出すかを指定するキーワード。 キーワードは、 次のとおりです。

• FUNCTION (デフォル ト ) • EVENT

calltype (オプシ ョ ン)

PowerBuilder が関数をいつ検索するかを指定するキーワード。 キーワードは、 次のとおりです。

• STATIC (デフォル ト ) • DYNAMIC

静的呼び出し と動的呼び出しについての詳細は、 98ページの 「静的呼び出し と動的呼び出し」 を参照してください。 動的呼び出しについての詳細は、 99 ページの 「動的呼び出し」 を参照して ください。

when (オプシ ョ ン)

関数またはイベン ト を直ちに実行するか、 現行のスクリ プ ト が終了した後に実行するかを指定するキーワード。 キーワードは、 次のとおりです。

• TRIGGER- (デフォル ト ) 関数またはイベン ト を直ちに実行します。

• POST -関数またはイベン トがオブジェ ク ト のキューに追加され、 キュー内のほかのメ ッセージが処理された後で順番が来たら実行します。

ト リガとポス トについての詳細は、 96 ページの 「関数と イベン トの ト リ ガまたはポス ト 」 を参照して ください。

name 呼び出すオブジェ ク ト関数またはイベン トの名前

argumentlist (オプシ ョ ン)

name に渡す値。 こ こで指定する値のデータ型は、 関数またはイベン ト の定義で宣言されたデータ型に対応しなければなり ません。

114 PowerBuilder

Page 125: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

解説 大文字と小文字の処理関数名と イベン ト名は大文字と小文字を区別しません。 たとえば、 以下のステート メ ン トは同じです。

Clipboard("PowerBuilder")clipboard("PowerBuilder")CLIPBOARD("PowerBuilder")

引数の呼び出し type、 calltype、 when キーワードは、 objectname の後であれば、 どの順序で指定してもかまいません。

イベン ト または関数によっては、 適用されない構文のオプシ ョ ンがあり ます。 たとえば、 PowerScript オブジェ ク ト関数の動的呼び出しは、余分なオーバーヘッ ドを引き起こすだけです。しかし、異なるオブジェク ト に同じ名前のユーザ定義関数がある場合は、 その関数を動的に呼び出せば、 有効なこ と もあるでし ょ う。

ユーザ定義グローバル関数やシステム関数を ト リ ガまたはポス トするこ とはできますが、 動的に呼び出すこ とはできません。

関数の検索 指定 し た名前のグ ロ ーバル関数が存在 し ない場合、PowerBuilder は、 システム関数を検索する前に、 関数の名前と引数が一致するオブジェ ク ト関数を検索します。

先祖オブジェ ク トの関数とイベン トの動的呼び出し PowerBuilder に子孫オブジェ ク ト の関数やイベン ト を検索させないで、 先祖オブジェ ク トの関数やイベン ト を検索させる場合は、 グローバル スコープ記号 (::)を使用します。

グローバル スコープ記号についての詳細は、 117 ページの「 先祖オブジェク ト の関数と イベント の呼び出し 」 を参照して ください。

カスケード呼び出し ド ッ ト (.) 表記を使用して、 カスケード呼び出しを行えます。 各関数やイベン ト の戻り値は、 次に呼び出される関数またはオブジェ ク ト が属すオブジェ ク ト と同じオブジェ ク ト データ型でなければな り ません。

カスケード呼び出しについての詳細は、 112 ページの「 カスケード 呼び出し と 戻り 値の使い方」 を参照して ください。

戻り値の使い方 関数に戻り値がある場合、 別の関数の引数か式のオペランド と して、 代入文の右辺に関数を指定できます。

外部関数 外部関数を呼び出すには、 まず、その関数を宣言しなければな り ません。 外部関数の宣言についての詳細は、 58 ページの「 外部関数の宣言」 を参照して ください。

例 例 1 以下のステー ト メ ン トは、 最も簡単な関数呼び出し構文を使用する各種の関数呼び出しです。

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

Page 126: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PowerBuilder の関数とイベン トの呼び出し構文

以下のステート メン トは、 システム関数 Asc を呼び出します。

charnum = Asc("x")

以下のステート メン トは、 データウ ィ ン ド ウ コン ト ロールのスク リプトで、 データウ ィン ド ウ関数を呼び出します。

Update( )

以下のステート メン トは、 グローバル ユーザ定義関数 gf_setup_appl を呼び出します。

gf_setup_appl(24, "Window1")

以下のステート メン トは、 システム関数 PrintRect を呼び出します。

PrintRect(job, 250, 250, 7500, 1000, 50)

例 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 イベン ト をポス ト します。

116 PowerBuilder

Page 127: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

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 の呼び出しは成功します。

先祖オブジェク トの関数とイベン トの呼び出し説明 PowerBuilder では、子孫オブジェ ク トのインスタンスを作成する場合、

そのク ラスが先祖で、 子孫オブジェ ク ト に先祖を上書きする関数またはイベン ト が定義されていても、 子孫の関数またはイベン トが実行されます。 先祖の関数またはイベン ト を実行するには、 グローバル スコープ記号 (::) を使って、明示的に先祖の関数またはイベン ト を呼び出します。

構文 { objectname. } ancestorclass ::{ type } { when } name ( { argumentlist } )

次の表に、 オブジェ ク ト の先祖の関数と イベン ト を呼び出すと きに使用する引数を示します。

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

Page 128: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

先祖オブジェ ク トの関数とイベン トの呼び出し

表 6-7: 先祖の関数とイベン トの呼び出しで使用する引数

解説 AncestorReturnValue 変数 子孫オブジェ ク ト でイベン ト ス ク リ プ トを拡張する場合、 コンパイ ラはローカル変数 AncestorReturnValue を自動的に生成します。 先祖イベン ト スク リプ トの戻り値を知る必要がある場合は、 この変数を使います。 また、 先祖ス ク リ プ ト を上書き し、CALL 構文を使って先祖イベン ト ス ク リプ ト を呼び出す場合にも、 この変数が生成されます。

AncestorReturnValue 変数のデータ型は、 そのイベン ト の戻り値に定義されたデータ型と常に一致します。 呼び出しに渡される引数は、 子孫オブジェ ク トのイベン ト に渡される引数にな り ます。

イベン ト スクリプ トの拡張 AncestorReturnValue 変数は、 拡張したイベン ト ス ク リプ ト で使用できます。 イベン ト スク リプ ト を拡張する と、PowerBuilder が次の構文を生成し、 イベン ト スク リプ ト の先頭に挿入します。

CALL SUPER::event_name

オブジェ ク トの構文をエクスポートする場合、 またはソース エディ タに表示する場合、 ステート メ ン トの参照のみ可能です。

引数 説明

objectname (オプシ ョ ン)

先祖オブジェ ク ト に実行する関数が定義されているオブジェク トの名前

ancestorclass 実行する関数またはイベン ト があ る先祖ク ラ スの名前。ancestorobject が現行のオブジェ ク ト の直近の先祖の場合は、 代名詞 Super が指定できます。

type (オプシ ョ ン)

関数またはイベン ト のどちらを呼び出すかを指定するキーワード。 キーワードは、 次のとおりです。

• FUNCTION (デフォル ト )

• EVENT

when (オプシ ョ ン)

関数またはイベン ト を直ちに実行するか、 現行のスク リ プト が終了した後に実行するかを指定するキーワード。 キーワードは、 次のとおりです。

• TRIGGER- (デフォル ト ) 関数またはイベン ト を直ちに実行します。

• POST -関数またはイベン トがオブジェ ク ト のキューに追加され、 キュー内のほかのメ ッセージが処理された後で順番が来たら実行します。

name 呼び出すオブジェク ト関数またはイベン トの名前

argumentlist (オプシ ョ ン)

name に渡す値。 こ こで指定する値のデータ型は、 関数またはイベン トの定義で宣言されたデータ型に対応しなければな り ません。

118 PowerBuilder

Page 129: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

次に、 拡張したイベン ト スク リプ トの例を示します。

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 文についての詳細は、127 ページの「 CALL」を参照して ください。

例 例 1 ウ ィ ン ド ウ w_ancestor にイベン ト ue_process が定義されていると します。 子孫ウ ィ ン ド ウには、 同じ イベン トに対するスク リプ ト が記述されています。

子孫スク リプ トの以下のステート メ ン トは、 継承階層内のイベン ト を検索して、 一致するイベン ト をすべて呼び出します。 子孫スク リプ トが先祖ス ク リプ ト を拡張する場合は、 その継承階層の最上位レベルの先祖スク リプ トから順番に実行され、 子孫スク リプ トは最後に実行されます。 子孫スク リプ ト が先祖ス ク リプ ト を上書きする場合は、 その子孫スク リプ トだけが実行されます。

EVENT ue_process( )

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

Page 130: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

先祖オブジェ ク トの関数とイベン トの呼び出し

以下のステート メ ン トは、 先祖イベン トだけを呼び出します。 呼び出し元のスク リプ トが別のオブジェ ク ト または子孫ウ ィン ド ウに属す場合に、 このスク リプ トは実行できます。

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( )

120 PowerBuilder

Page 131: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

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

Page 132: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス
Page 133: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

この章について この章では、 PowerScript の各ステート メ ン ト と ス ク リプ ト内におけるステー ト メン トの使い方について説明します。

内容項目 ページ

値の代入文 124CALL 127CHOOSE CASE 129CONTINUE 131CREATE 132DESTROY 136DO...LOOP 137EXIT 139FOR...NEXT 140GOTO 142HALT 143IF...THEN 144RETURN 146THROW 147THROWS 148TRY...CATCH...FINALLY...END TRY 149

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

Page 134: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

値の代入文

値の代入文機能 変数やオブジェ ク ト のプロパテ ィに値を代入します。 また、 オブジェ

ク ト変数にオブジェク ト参照を代入します。

構文 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 のデータ型と互換性がなければなり ません。

124 PowerBuilder

Page 135: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

表 7-1: 後置式演算式を使用した値の代入

変数名にハイフンを使える場合は、 -- や -= の前にスペースを入れる必要があ り ます。 スペースが入っていないと、 マイナス符号は変数名の一部とみなされます。 詳細については、 5 ページの「 識別子の命名」を参照して ください。

例 例 1 以下のステート メン トは、 変数 ld_date に、 それぞれ値を代入します。

date ld_dateld_date = Today( )ld_date = 1996-01-01ld_date = Date("January 1, 1996")

例 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 型の変数に代入します。

string Text1Text1 = sle_emp.Text+".DAT"

例 6 以下のステート メン トでは、 後置式演算式を使用しています。 int i = 4

i ++ // i の値は 5。

値の代入文 例 同等の文

++ 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

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

Page 136: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

値の代入文

i -- // i の値は再び 4 となります。i += 10 // i の値は 14。i /= 2 // i の値は 7。

後置式演算子は、 後置式代入文だけで使用できます。 また、 ステー トメ ン トの中で、 ほかの演算子と一緒に使用するこ とはできません。 たとえば、 以下のステート メ ン トは無効です。

int i, ji = 12

j = i ++ // このステート メン トは無効です。

以下のステート メン トは、 ++ が単独で使用されているので有効です。

int i, ji = 12i ++j = i

126 PowerBuilder

Page 137: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

CALL機能 子孫オブジェ ク トのスク リプ ト から先祖オブジェ ク トのスク リプ ト を

呼び出します。 先祖ユーザ オブジェ ク ト 、 先祖メニュー、 先祖ウ ィ ンド ウの、 イベン ト に対するス ク リプ ト を呼び出すこ とができます。 また、 先祖ユーザ オブジェ ク トや先祖ウ ィ ン ド ウ内のコン ト ロールのイベン トに対するス ク リプ ト を呼び出すこ と もできます。

CALL 文を使用し て先祖イベン ト ス ク リ プ ト を呼び出す場合、AncestorReturnValue 変数が生成されます。 AncestorReturnValue 変数の詳細については、 193 ページの「 イベント について」 を参照して ください。

構文 CALL ancestorobject {`controlname}::event

解説 標準的な構文の使い方原則と して、 関数やイベン ト を呼び出す際には標準的な構文を使用して く だ さい。 標準的な構文についての詳細は、 113 ページの

「 PowerBuilder の関数と イ ベント の呼び出し 構文」 を参照して く ださい。

標準的な構文を使用する と、 先祖オブジェ ク ト のイベン トや関数を トリ ガまたはポス ト して、 引数を渡すこ とができます。 ただし、 標準的な構文では、 先祖オブジェ ク トのコン ト ロールのス ク リプ ト を呼び出すこ とはできません。

ancestorobject が子孫オブジェ ク トの直近の先祖の場合は、代名詞 Superを使う こ とができます。 詳細については、 15 ページの「 Super 代名詞」を参照して ください。

先祖イベン ト の呼び出しが行われる と、 現行イベン トに渡される引数は自動的に先祖イベン ト に伝搬されます。 先祖以外のイベン ト を呼び出し、 引数を渡す場合は、 新しい構文を使用する必要があ り ます。 新しい構文を使用しないと、 各引数に NULL が渡されます。

例 例 1 次のステート メ ン トでは、先祖ウ ィ ン ド ウのイベン トに対するスク リプ ト を呼び出します。

CALL w_emp::Open

パラ メータ 説明

ancestorobject 子孫オブジェク ト の先祖

controlname (オプシ ョ ン)

先祖ウ ィ ン ド ウやカスタム ユーザ オブジェ ク ト に配置されているコン ト ロール名

event 先祖オブジェク ト のイベン ト

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

Page 138: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

CALL

例 2 次のステート メ ン ト では、先祖ウ ィ ン ド ウに配置されているコント ロールのイベン トに対するスク リプ ト を呼び出します。

CALL w_emp`cb_close::Clicked

128 PowerBuilder

Page 139: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

CHOOSE CASE機能 条件式の値 (通常は変数) に基づいてプログラムの実行内容を変更し

ます。

構文 CHOOSE CASE testexpressionCASE expressionlist

statementblock{ CASE expressionlist

statementblock . . .CASE expressionlist

statementblock } CASE ELSE

statementblock } END CHOOSE

解説 CHOOSE CASE 文には、 最低 1 つの CASE 句が必要です。 また、 ENDCHOOSE 文で完結させなければな り ません。

CHOOSE CASE 文の次に記述された testexpression と CASE 句のexpressionlist の値が一致した場合には、 その expressionlist の直後のstatementblock を実行します。 その後、 END CHOOSE 句の次のステートメ ン ト を実行します。

CASE 句が複数存在する場合は、testexpression と各 expressionlist に一致する値が見つかるか、CASE ELSE 句または END CHOOSE 句を検出するまで照合を行います。

パラ メータ 説明

testexpression スク リプ トの実行内容を決定する式

expressionlist 以下のいずれかの式

• 単一の値

• カンマで区切られた値の並び (たとえば、2, 4, 6,8)

• TO 句 (たとえば、 1 TO 30)

• IS に続く関係演算子と比較値 (たとえば、IS>5)

• 上記の式の任意の組み合わせ。 式と式は暗黙的に OR で結合されます (た とえば、1, 3, 5, 7, 9, 27TO 33, IS>42)

statementblock testexpression と expressionlist の値が一致する場合に実行する実行文ブロ ッ ク

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

Page 140: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

CHOOSE CASE

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

例 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

130 PowerBuilder

Page 141: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

CONTINUE機能 DO...LOOP または FOR...NEXT 文の中で使用して、 ループ内のステート

メ ン ト をスキップします。 CONTINUE 文はパラ メータを取り ません。

構文 CONTINUE

解説 DO...LOOP 文または FOR...NEXT 文の中で CONTINUE 文を使う と、 制御は次の LOOP 文または NEXT 文に移り ます。 その回のループ処理に限って、 CONTINUE 文とループの最終文の間のステー ト メ ン ト がスキップされます。 ネス ト されたループ処理では、CONTINUE 文は現行のループ内でステート メ ン ト をスキップします。

制御を現行のループ処理の外に移す場合は、 139 ページの「 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 : " + String(B) )

LOOP

例 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 となります。

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

Page 142: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

CREATE

CREATE機能 指定されたオブジェ ク ト データ型のオブジェ ク ト のインス タンスを

作成します。 CREATE 文の実行後、作成されたオブジェ ク トのインスタンスのプロパテ ィは、 ド ッ ト (.) 表記を用いて参照できます。

CREATE 文で作成されたオブジェ ク ト のインス タンスは、 同じオブジェ ク ト データ型の変数に保持できます。

形式 1 では、 オブジェ ク ト データ型を直接指定します。 形式 2 では、アプ リ ケーシ ョ ンは動的にオブジェ ク ト データ型を選択できます。

構文 形式 1 (オブジェ ク ト データ型を直接指定)

objectvariable = CREATE objecttype

形式 2 (アプ リ ケーシ ョ ンは動的にオブジェク ト データ型を選択) objectvariable = CREATE USING objecttypestring

解説 CREATE 文は、 任意の ク ラ ス ユーザ オブジ ェ ク ト (mailSession やTransaction などの標準ク ラス ユーザ オブジェ ク ト を含む) を初めて参照する と きに使用します。

PowerBuilder は、 標準ク ラ ス ユーザ オブジェ ク ト の う ち、 Message、Error、 Transaction、 DynamicDescriptionArea、 DynamicStagingArea のデフォル トのオブジェク ト インスタンスを 1 つずつ作成します。 これらのオブジェ ク ト のインス タンスをほかにも作成する場合は、 CREATE文を使用します。

開いているウ ィ ン ド ウに定義されていない メニューが必要な場合は、CREATE 文でそのメニューのインスタンスを作成します。968 ページの

「 PopMenu」 を参照して ください。

パラ メータ 説明

objectvariable データ型が objecttype のグローバル変数、 インスタンス変数あるいはローカル変数

objecttype オブジェ ク ト データ型

パラ メータ 説明

objectvariable データ型が、 作成されるオブジェ ク トのク ラスか、 そのク ラスの先祖と同じ ク ラスである、 グローバル変数、 インスタンス変数あるいはローカル変数

objecttypestring String 型の値。 作成する ク ラスのデータ型の名前を指定します。

132 PowerBuilder

Page 143: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

ビジュアル ユーザ オブジェ ク トやウ ィ ン ド ウのインスタンスを作成するには、 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

作成したインスタンスの破棄 作成したオブジェ ク ト のインス タンスの使用後、DESTROY 文を呼び出して、 そのオブジェ ク トのインスタンスが使用したメモ リ を解放する こ とができます。 ただし、 DESTROY 文を呼び出すのは、 ほかのオブジェ ク トによってそのオブジェ ク トが参照されていない場合のみです。 ガベージ コレ クシ ョ ン機能によって、 各オブジェ ク トへの参照数がカウン ト され、 参照されていないオブジェク トは自動的に破棄されます。

ガベージ コレ クシ ョ ンについての詳細は、 85 ページの「 ガベージ コレク ショ ン」 を参照して ください。

例 例 1 以下のステート メ ン トでは、 新しい ト ランザクシ ョ ン オブジェク トのインスタンスを作成し、 そのインスタンスを変数 DBTrans に格納します。

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

Page 144: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

CREATE

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

サービス オブジェ ク トのインスタンスが作成されている場合は、 そのインスタンスを破棄する必要があ り ます。

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)

134 PowerBuilder

Page 145: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

例 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

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

Page 146: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DESTROY

DESTROY機能 CREATE 文で作成したオブジェ ク ト の イ ン ス タ ン ス を破棄し ます。

DESTROY 文の実行後は、破棄されたオブジェ ク ト のインスタンスのプロパティ を参照するこ とはできません。

構文 DESTROY objectvariable

解説 作成したオブジェ ク トのインスタンスの使用後、DESTROY 文を呼び出して、 そのオブジェ ク ト のインスタンスが使用したメモ リ を解放するこ とができます。 ただし、DESTROY 文を呼び出すのは、ほかのオブジェク トによってそのオブジェ ク トが参照されていない場合のみです。 ガベージ コレクシ ョ ン機能によって、 各オブジェ ク トへの参照数がカウン ト され、 参照されていないオブジェ ク トは自動的に破棄されます。

ガベージ コレ クシ ョ ンについての詳細は、 85 ページの「 ガベージ コレク ショ ン」 を参照して ください。

アプ リ ケーシ ョ ンを終了する と、 オブジェ ク ト のインスタンスはすべて自動的に破棄されます。

例 例 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 オブジェ ク ト の変数

136 PowerBuilder

Page 147: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

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 文または DOUNTIL 文を使用します。 DO WHILE 文および DO UNTIL 文は、 実行文ブロ ッ クを実行する前に条件を評価します。

パラ メータ 説明

condition 評価する条件

statementblock 反復処理する実行文ブロ ッ ク

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

Page 148: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DO...LOOP

実行文ブロ ッ クを最低 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

138 PowerBuilder

Page 149: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

EXIT機能 DO...LOOP 文または FOR...NEXT 文の中で用いて、 制御を現行のループ

処理の外に移します。 EXIT 文はパラ メータを取り ません。

構文 EXIT

解説 DO...LOOP 文または FOR...NEXT 文の中で EXIT 文を使用する と、制御がLOOP 文または NEXT 文の後のステート メ ン ト に移り ます。 また、 ネスト されたループ処理の中で、EXIT 文を使用する と、制御が実行中のループの外に移り ます。

ループ処理の制御を次の LOOP 文または NEXT 文に移す方法についての詳細は、 131 ページの「 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))

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

Page 150: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

FOR...NEXT

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 反復処理カ ウ ン タ変数名。 どの数値データ型(Integer、 Double、 Real、 Long、 Decimal) でも可能ですが、 Integer 型が最も高速です。

start varname の開始値

end varname の終了値

increment (オプシ ョ ン)

加算値を表す定数。 Increment は定数で varname と同じデータ型でなければな り ません。 increment を入力する場合には STEP 文が必要です。 +1 はデフォル トの加算値です。

statementblock 反復処理する実行文ブロ ッ ク

140 PowerBuilder

Page 151: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

オーバーフローの回避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

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

Page 152: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

GOTO

GOTO機能 制御をスク リプ ト の中のあるステート メ ン ト から、 ラベルの指示する

別のステート メ ン トに移します。

構文 GOTO label

例 例 1 以下の GOTO 文は、 Taxable=FALSE の行をスキップします。

Goto NextStep

Taxable=FALSE // このステート メン トは、 実行されません。NextStep:Rate=Count/Count4

例 2 次の GOTO 文では、 ラベル 「OK:」 があるステート メ ン トに制御を移します。

GOTO OK...OK:...

パラ メータ 説明

label 制御を移したいステー ト メ ン ト を指示する ラベル。 ラベルの識別子のあとにはコ ロンを付けます(た とえば、OK: )。 GOTO 文の中ではラベルにはコロンを付けません。

142 PowerBuilder

Page 153: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

HALT機能 アプリ ケーシ ョ ンを終了します。

構文 HALT {CLOSE}

解説 キーワード CLOSE を伴わない HALT 文は、 直ちにそのアプリ ケーシ ョンを終了します。

キーワード CLOSE を伴った HALT 文は、 直ちにそのアプ リ ケーシ ョ ンの Close イベン トに対するスク リプ ト を実行して、 アプ リ ケーシ ョ ンを終了します。 アプ リ ケーシ ョ ンの Close イベン ト に対するス ク リプトがない場合には、 直ちにアプリ ケーシ ョ ンを終了します。

例 例 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

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

Page 154: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

IF...THEN

IF...THEN機能 条件が TRUE の場合は、スク リプ ト で指定した処理を実行します。 単一

行書式の形式 1 と、 複数行書式の形式 2 があ り ます。

構文 形式 1 (単一行書式) IF condition THEN action1 {ELSE action2}

形式 2 (複数行書式) IF condition1 THEN

action1{ ELSEIF condition2 THEN

action2. . . }{ 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 でなかった場合に実行する処理。処理は、単一行をセ ミ コロンで区切った複数のステート メ ン ト、または複数行で記述されたステー ト メ ン ト でもかまいません。

144 PowerBuilder

Page 155: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

解説 継続行文字を使用して、 単一行書式を複数行に渡って記述できます。

複数行書式の 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

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

Page 156: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

RETURN

RETURN機能 イベン トや関数の実行を直ちに停止します。

構文 RETURN { expression }

解説 ユーザのアクシ ョ ンによってイベン ト が起動された場合、 そのイベントに対するスク リプ トの中に RETURN 文が使用されている と、 そのイベン トの実行を停止して、 ユーザからの次のアクシ ョ ンを待ちます。

また、 ス ク リプ トから関数やイベン ト を呼び出す場合、 呼び出された関数やイベン ト のス ク リプ ト の中に RETURN 文が使用されている と、関数やイベン トが呼び出された行に制御を移します (値を返します)。

例 例 1 以下のスク リプ ト を実行する と、システムはビープ音を 1 回鳴らします。 2 番目の Beep 関数は実行されません。

Beep(1)RETURN

Beep(1) // このステート メン トは実行されません。

例 2 ユーザ定義関数の中の以下のステー ト メ ン ト は、 変数 Arg2 が 0でないと きには変数 Arg1 を変数 Arg2 で割った結果を返し、 0 のと きには -1 を返します。

IF Arg2 <> 0 THENRETURN Arg1/Arg2

ELSERETURN -1

END IF

パラ メータ 説明

expression 関数の戻り値 (または式)。 戻り値は、 関数の定義で指定した戻り値のデータ型と同じでなければなり ません。

146 PowerBuilder

Page 157: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

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 ク ラスから派生したユーザ定義例外ク ラスです。

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

Page 158: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

THROWS

THROWS機能 メ ソ ッ ドが ト リ ガする例外型を宣言するのに使用します。 メ ソ ッ ド プ

ロ ト タ イプの一部にな り ます。

構文 methodname ( {arguments} ) THROWS ExceptionType { , ExceptionType, ... }

解説 内部使用のみ。

PowerBuilder スク リプ トの関数呼び出しに THROWS 句をを入力した り追加するこ とはあ り ません。 ただし、 PowerBuilder 関数に THROWS 句を追加した り、 pbm イベン ト ID によって定義されていないユーザ イベン トに追加する こ とはできます。

関数やイベン ト のプロ ト タ イプに THROWS 句を追加する方法については、『PowerBuilder ユーザーズ ガイ ド』 マニュアルを参照して ください。 例外処理についての詳細は、 『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルを参照して ください。

パラ メータ 説明

methodname 例外を送出する メ ソ ッ ドの名前

arguments 例外を送出する メ ソ ッ ドの引数。 メ ソ ッ ドによっては、メソ ッ ドの引数は省略できます。

ExceptionType Throwable 型のオブジェク ト 。通常、送出されるオブジェク ト型は、システム Exception ク ラスから派生したユーザ定義の例外ク ラ スです。 1 つのメ ソ ッ ドに対して複数の例外を定義する場合、 カンマで例外型を区切る こ とにより、 同じ句内で各例外型を送出できます。

148 PowerBuilder

Page 159: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 7 章 PowerScript のステート メン ト

TRY...CATCH...FINALLY...END TRY機能 例外の原因になるコードを分離し、 特定の型の例外が発生した場合に

何をすべきかを説明し、 例外が発生したかど うかに関わらず、 ファ イルやネッ ト ワークの接続を閉じる (およびオブジェ ク ト を元の状態に戻す) こ とができるよ うにします。

マシン コードマシン コードの DLL を構築する必要がある場合、 例外処理は使用でき ません。 マシン コード を構築するプロセスは、 例外処理構造をサポー ト していないためです。 例外処理を使用する コードからマシンコード DLL をコンパイルし よ う と しても失敗し、 エラー メ ッセージが表示されます。 P コード (PBD) とマシン コード (DLL) の う ち、 どちらを使うかの判別基準については、 『アプ リ ケーシ ョ ン テクニッ ク』マニュアルの配布用アプ リ ケーシ ョ ンのパッケージ化の章を参照してください。

構文 TRYtrystatements

CATCH ( ThrowableType1 exIdentifier1 )catchstatements1

CATCH ( ThrowableType2 exIdentifier2 )catchstatements2

...CATCH ( ThrowableTypeN exIdentifierN )

catchstatementsNFINALLY

cleanupstatementsEND TRY

パラ メータ 説明

trystatements 例外を送出する可能性のあるコードのブロ ッ ク

ThrowableTypeN キャ ッチする例外のオフジェ ク ト型。 FINALLY ブロ ックを指定している場合は、 CATCH ブロ ッ クを省略可能です。 CATCH ブロ ッ クは複数指定する こ と もできます。 try-catch ブロ ッ ク内の CATCH ブロ ッ クご とに、対応する例外オブジェ ク ト 型とその型のローカル変数を指定する必要があ り ます。

exIdentifierN ThrowableTypeN 型のローカル変数

catchstatementsN キャ ッチする例外の処理コード

cleanupstatements ク リーンアップ コード。 1 つ以上の CATCH ブロ ッ クを指定している場合は、FINALLY ブロ ッ クを省略可能です。

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

Page 160: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

TRY...CATCH...FINALLY...END TRY

解説 TRY ブロッ クは、 例外を送出する可能性のあるコードを分離するために使用し ます。 なお、 TRY ブロ ッ ク とは、 TRY キーワード と CATCHキーワードの間のステート メ ン ト ブロ ッ クです。CATCH 句を指定していない場合は、 TRY キーワード と FINALLY キーワードの間のステー トメ ン ト ブロ ッ クにな り ます。 TRY ブロ ッ ク内のステート メ ン トは、 ステー ト メ ン ト のブロ ッ ク全体が実行された り、 そのブロ ッ ク内の一部のステート メ ン ト が例外の送出を引き起こすまで、 無条件に実行されます。

TRY ブロ ッ ク内で送出される例外を処理するには 1 つまたは複数のCATCH ブロ ッ クを使用します。 例外が送出される と、 TRY ブロ ッ クの実行は停止し、その例外が CATCH キーワードの後の識別子が示す型と同じ型、 またはその子孫である場合にのみ、最初の CATCH ブロ ッ ク内のステート メ ン ト が実行されます。

送出された例外が最初の CATCH ブロ ッ クの識別子と同じ型またはその子孫でない場合、例外はこの CATCH ブロ ッ クによる処理を受けません。 CATCH ブロ ッ クが複数ある場合は、 その出現順に評価が実行されます。 例外をどの CATCH ブロ ッ クによっても処理できない場合は、FINALLY ブロ ッ クのステート メン トが実行されます。

例外は、外側にネス ト された try-catch ブロ ッ クへのコール スタ ッ クの解放を続けます。 外側にネス ト されたブロ ッ クがない場合、 アプ リケーシ ョ ン オブジェ ク トの SystemError イベン トが起動します。

送出される例外がない場合、 FINALLY ブロ ッ クがあればこのブロ ッ クの最初から実行が続行され、 なければ END TRY 文に続く行から実行が続行されます。

関連項目 THROW

150 PowerBuilder

Page 161: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

この章について この章では、 埋め込み SQL 文と動的 SQL 文について説明し、 さらにそのスク リプ トでの使い方を解説します。

内容項目 ページ

スク リ プ トにおける SQL 文の使い方 152CLOSE Cursor 155CLOSE Procedure 156COMMIT 157CONNECT 158DECLARE Cursor 159DECLARE Procedure 160DELETE 162DELETE Where Current of Cursor 163DISCONNECT 164EXECUTE 165FETCH 166INSERT 167OPEN Cursor 168ROLLBACK 169SELECT 170SELECTBLOB 172UPDATE 174UPDATEBLOB 175UPDATE Where Current of Cursor 177

動的 SQL の使い方 177

動的 SQL 書式 1 182

動的 SQL 書式 2 183

動的 SQL 書式 3 184

動的 SQL 書式 4 187

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

Page 162: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

スクリプ トにおける SQL 文の使い方

スク リプ トにおける 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) において指定します。

各インジケータ変数と インジケータ変数が示している変数は、 スペース (カンマは付けない) で区切り ます。 たとえば、 次のステー ト メ ントは、 インジケータ変数を含まないホス ト変数リ ス トです。

:Name, :Address, :City

次のステート メ ン トは、 インジケータ変数を含む上記と同じホス ト変数リ ス トです。

:Name :IndVar1, :Address :IndVar2, :City :IndVar3

インジケータ変数は、 以下のいずれかの値を持ちます。

数値 意味

0 有効な NULL 以外の値

-1 NULL 値-2 変換エラー

152 PowerBuilder

Page 163: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

エラーの報告あるカラムのデータ型が、関連する変数のデータ型と一致しない場合、すべての 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 プロパテ ィ もチェ ッ クする と よいでし ょ う 。

SQLErrText プロパテ ィ と SQLDBCode プロパテ ィ Transaction オブジェク トの String 型の SQLErrText プロパテ ィには、 データベース ベンダが提供するエラー メ ッセージが保持されています。 また、 Long 型のSQLDBCode プロパティには、 データベース ベンダが定めたステータス コードが保持されています。

値 意味

0 正常に終了しました。

100 検索する行が見つかり ません。

-1 エ ラ ーが発生し、 ス テー ト メ ン ト の実行は失敗 し ま し た。SQLErrText プロパティ または SQLDBCode プロパティの値を使用して詳細情報を入手して ください。

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

Page 164: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

スクリプ トにおける SQL 文の使い方

IF SQLCA.SQLCode = -1 THEN

MessageBox("SQL エラー ", SQLCA.SQLErrText)END IF

標準 SQL 文の貼り付け

以下の SQL 文をスク リプ トや関数に貼り付ける こ とができます。

• SQL カーソルおよびス ト アド プロシージャの宣言

• カーソルを使用する FETCH 文、 UPDATE 文、 および DELETE 文

• カーソルを使用しない SELECT 文、 INSERT 文、 UPDATE 文、 および DELETE 文

スコープ (適用範囲) の詳細については、 31 ページの「 変数の宣言場所」 を参照して ください。

カーソルおよびス ト ア ド プロシージャを、 グローバル変数、 インスタンス変数、共有変数、 またはローカル変数のスコープで宣言できます。カーソルまたはプロシージャは、 ペインタバーの [SQL 貼付] ボタンを使用して、 スク リプ ト ビューで宣言できます。

ペインタバーの [SQL 貼付] ボタン、 またはポップアップ メニューの[形式を指定して貼り付け| SQL] を使用して、ス ク リプ ト ビュー、関数ペインタ、およびデータベース ペインタの対話型 SQL ビューで標準の埋め込み 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;

154 PowerBuilder

Page 165: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

CLOSE Cursor機能 CursorName で指定された SQL カーソルをク ローズして、 CursorName

の処理を終了します。

構文 CLOSE CursorName ;

解説 ク ローズするカーソルは、その時点で、OPEN 文によってオープンされていなければな り ません。 また、 カーソルを宣言したステー ト メ ン トの中で ト ランザクシ ョ ン オブジェ ク トが指定されているため、 CLOSECursor 文で USING TransactionObject 句を用いる こ とはできません。

CLOSE Procedure 文は、 フェ ッチ後の SQLCode プロパティの値が 100(行が見つからない)のと きに実行されるス ク リプ トの中でよ く使用されます。

エラー処理CLOSE Cursor 文の実行後に SQLCode プロパテ ィの値をテス ト して、成否を確認するこ とをお勧めします。

例 次のステート メ ン トは、 カーソル Emp_cursor をク ローズします。

CLOSE Emp_cursor ;

パラ メータ 説明

CursorName ク ローズするカーソル名

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

Page 166: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

CLOSE Procedure

CLOSE Procedure機能 ProcedureName で指定された SQL プロ シージ ャ を ク ローズ し て、

ProcedureName の処理を終了します。

ス トアド プロシージャのサポートすべての DBMS がス ト ア ド プロシージャをサポート している とは限り ません。

構文 CLOSE ProcedureName;

解説 ク ローズするプロシージャは、 その時点で、 EXECUTE 文によって実行されていなければな り ません。 また、 プロシージャを宣言したステート メ ン ト の中で ト ランザクシ ョ ン オブジェ ク ト が指定されているため、CLOSE Procedure 文で USING TransactionObject 句を用いるこ とはできません。

CLOSE Procedure 文は、結果集合を返すプロシージャをク ローズする ときにのみ使用して く だ さい。 結果集合を返さないプロシージャは、PowerBuilder によって自動的にク ローズされ、 SQLCode プロパティの値に 100 が設定されます。

CLOSE Procedure 文は、 フェ ッチ後の SQLCode プロパテ ィの値が 100(行が見つからない)のと きに実行されるスク リプ トの中でよ く使用されます。

エラー処理CLOSE Procedure 文の実行後に SQLCode プロパテ ィ の値をテス ト して、 成否を確認するこ と をお勧めします。

例 次のステート メ ン トは、 ス ト ア ド プロシージャ Emp_proc をク ローズします。

CLOSE Emp_proc ;

パラ メータ 説明

ProcedureName クローズするス ト アド プロシージャ名

156 PowerBuilder

Page 167: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

COMMIT機能 指定された ト ランザクシ ョ ン オブジェ ク ト に対して前回の COMMIT、

ROLLBACK、または CONNECT 以降に行われたすべてのデータベース処理を永久的に更新します。

サーバ コンポーネン トにおける COMMIT と ROLLBACK の使用サーバ コ ンポーネン ト の中に埋め込まれた COMMIT コ マン ド とROLLBACK コマンドは、UseContextObject の DBParm パラ メータの設定によって、 効果が異なる場合があ り ます。

UseContextObject のパラ メータについては、 『データベース との接続』マニュアルを参照して く ださい。 ト ランザクシ ョ ン サーバへのコンポーネン トの配布については、『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルを参照して ください。

構文 COMMIT {USING TransactionObject};

解説 COMMIT 文は、 データベース との接続は解除しませんが、 オープンしてい る カー ソ ル ま たはプ ロ シージ ャ を すべて ク ロ ーズ し ま す(PowerBuilder における DISCONNECT 文は、 COMMIT 文を発行するこ とに注意して ください)。

エラー処理COMMIT 文の実行後に SQLCode プロパティの値をテス ト して、成否を確認する こ とをお勧めします。

例 例 1 次のステート メ ン トは、 デフォル ト ト ランザクシ ョ ン オブジェク ト で指定されたデータベースに対するすべての処理内容をコ ミ ッ トします。

COMMIT ;

例 2 次のス テー ト メ ン ト は、 ト ラ ンザ ク シ ョ ン オブジ ェ ク トEmp_tran で指定されたデータベースに対するすべての処理内容をコミ ッ ト します。

COMMIT USING Emp_tran ;

パラ メータ 説明

TransactionObject 前回の COMMIT、 ROLLBACK、 または CONNECT以降の、 データベースに対するあらゆる処理を確定したい ト ランザクシ ョ ン オブジェ ク ト名。 この句は、デフォル ト (SQLCA) 以外の ト ランザクシ ョン オブジェク トに対して必要とな り ます。

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

Page 168: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

CONNECT

CONNECT機能 指定されたデータベースに接続します。

構文 CONNECT {USING TransactionObject};

解説 CONNECT 文は、デフォル ト ト ランザクシ ョ ン オブジェ ク ト または指定された ト ランザクシ ョ ン オブジェ ク ト を使用してデータベース操作 (INSERT、 UPDATE、 または DELETE) を行う前に実行しなければなり ません。

エラー処理CONNECT 文の実行後に SQLCode プロパテ ィの値をテス ト して、 成否を確認する こ と をお勧めします。

例 例 1 次のステート メ ン トは、 デフォル ト ト ランザクシ ョ ン オブジェク ト で指定されたデータベースに接続します。

CONNECT ;

例 2 次のステート メ ン トは、ト ランザクシ ョ ン オブジェ ク ト Emp_tranで指定されたデータベースに接続します。

CONNECT USING Emp_tran ;

パラ メータ 説明

TransactionObject 接続するデータベースに対する必要な接続情報を保持している ト ランザクシ ョ ン オブジェ ク ト名。この句は、 デフォル ト (SQLCA) 以外の ト ランザクシ ョ ン オブジェ ク ト に対して必要とな り ます。

158 PowerBuilder

Page 169: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

DECLARE Cursor機能 指定された ト ランザクシ ョ ン オブジェ ク ト に対してカーソルを宣言

します。

構文 DECLARE CursorName CURSOR FOR SelectStatement {USING TransactionObject};

解説 DECLARE Cursor 文 は非実行コマン ドであ り、 変数の宣言に似ています。

ローカル カーソルを宣言するには、スク リプ ト ビューでスク リプ ト を開き、ペインタバーの [SQL 貼付] を使用するか、 [編集|形式を指定して貼り付け] メニューを選択します。 グローバル、 インスタンス、 または共有のカーソルを宣言するには、 ス ク リ プ ト ビューの最初のドロ ップダウン リ ス ト から [Declare] を選択し、 2 つ目のド ロ ップダウン リ ス トから [Global Variables]、 [Instance Variables]、 または [SharedVariables ] を選択します。

グローバル変数、 インスタンス変数, 共有変数、 およびローカル変数のスコープについては、 31 ページの「 変数の宣言場所」 を参照して ください。

例 次のステート メ ン トは、デフォルト ト ランザクシ ョ ン オブジェ ク トで指定されたデータベースに対して、 カーソル 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) 以外の トランザクシ ョ ン オブジェ ク ト に対して必要とな ります。

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

Page 170: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DECLARE Procedure

DECLARE Procedure機能 指定された ト ランザクシ ョ ン オブジェ ク ト に対してプロシージャを

宣言します。

ス トアド プロシージャのサポートすべての DBMS がス ト ア ド プロシージャをサポート している とは限り ません。

構文 DECLARE ProcedureName PROCEDURE FOR StoredProcedureName@Param1=Value1, @Param2=Value2,...{USING TransactionObject};

解説 DECLARE Procedure 文は非実行コマンドであ り、変数の宣言に似ています。

ローカル カーソルを宣言するには、スク リプ ト ビューでス ク リプ ト を開き、ペインタバーの [SQL 貼付] を使用するか、 [編集|形式を指定して貼り付け] メニューを選択します。 グローバル、 インスタンス、 または共有のプロシージャを宣言するには、 スク リプ ト ビューの最初のド ロ ップダウン リ ス ト から [Declare] を選択し、 2 つ目のド ロ ップダウン リ ス トから [Global Variables]、[Instance Variables]、または[SharedVariables] を選択します。

グローバル変数、 インスタンス変数, 共有変数、 およびローカル変数のスコープについては、 31 ページの「 変数の宣言場所」 を参照して ください。

パラ メータ 説明

ProcedureName 有効な PowerBuilder 名StoredProcedureName データベース中のス ト アド プロシージャ名

@Paramn=Valuen ス ト アド プロシージャで指定されたパラ メータ(引数)と有効な PowerBuilder の式。n はパラ メータ と値の個数を表します。

TransactionObject プロシージャを宣言する ト ランザクシ ョ ン オブジェク ト名。 この句は、デフォル ト (SQLCA) 以外の ト ランザクシ ョ ン オブジェ ク ト に対して必要とな り ます。

160 PowerBuilder

Page 171: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

例 例 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) ;

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

Page 172: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DELETE

DELETE機能 Criteria で指定された条件によって TableName で指定されたテーブル

の行を削除します。

構文 DELETE FROM TableName WHERE Criteria {USING TransactionObject};

解説 エラー処理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 変数である こ と を示すために、 変数名の先頭にコロンを付ける必要があ り ます。

パラ メータ 説明

TableName 行を削除するテーブル名

Criteria 削除する行を指定する条件

TransactionObject 削除するテーブルが格納されているデータベースを指定した ト ラ ンザク シ ョ ン オブジェ ク ト名。 この句は、 デフォル ト (SQLCA) 以外の トランザクシ ョ ン オブジェ ク ト に対して必要となり ます。

162 PowerBuilder

Page 173: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

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 文で USING TransactionObject 句を用いる こ とはできません。

エラー処理DELETE Where Current of Cursor 文の実行後に SQLCode プロパティの値をテス ト して、 成否を確認するこ と をお勧めします。

例 次のステート メ ン トは、 Employee テーブルからカーソル Emp_cur が現在位置している行を削除します。

DELETE FROM Employee WHERE current of Emp_curs ;

パラ メータ 説明

TableName 行を削除するテーブル名

CursorName テーブルを指定するカーソル名

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

Page 174: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DISCONNECT

DISCONNECT機能 指定された ト ランザクシ ョ ン オブジェ ク トに対して COMMIT 文を実行

してから、 データベース との接続を解除します。

構文 DISCONNECT {USING TransactionObject};

解説 エラー処理DISCONNECT 文の実行後に SQLCode プロパティの値をテス ト して、成否を確認するこ と をお勧めします。

例 例 1 次のステート メ ン トは、 デフォル ト ト ランザクシ ョ ン オブジェク ト で指定されたデータベース との接続を解除します。

DISCONNECT ;

例 2 次のス テー ト メ ン ト は、 ト ラ ンザ ク シ ョ ン オブジェ ク トEmp_tran で指定されたデータベース との接続を解除します。

DISCONNECT USING Emp_tran ;

パラ メータ 説明

TransactionObject 接続を解除し、 かつ前回の COMMIT、 ROLLBACK、または CONNECT 以降の、データベースに対するあらゆる処理内容を確定したい ト ランザクシ ョ ン オブジェク ト名。 この句は、 デフォル ト (SQLCA) 以外の ト ランザクシ ョ ン オブジェ ク ト に対して必要とな り ます。

164 PowerBuilder

Page 175: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

EXECUTE機能 ProcedureName で指定されたあらかじめ宣言されているプロシージャ

を実行します。

構文 EXECUTE ProcedureName;

解説 プロシージャを宣言したステート メ ント の中でト ラ ンザク ショ ン オブジェク ト が指定さ れているため、EXECUTE 文で USING TransactionObject句を用いるこ とはできません。

エラー処理EXECUTE 文の実行後に SQLCode プロパテ ィの値をテス ト して、 成否を確認するこ と をお勧めします。

例 次のステー ト メ ン トは、 ス ト ア ド プロシージャ Emp_proc を実行します。

EXECUTE Emp_proc ;

パラ メータ 説明

ProcedureName 実行するプロシージャの DECLARE 文で割り当てられた名前。プロシージャはあらかじめ宣言されていなければなり ません。 ProcedureName は、 データベースに格納されているプロシージャ名と同一とは限り ません。

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

Page 176: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

FETCH

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 プロパテ ィをチェ ッ ク して ください。

例 例 1 以下のス ク リ プ ト は、 カーソル Emp_cur の宣言で指定し たSELECT 句で検索されたデータをフェ ッチし、 その値を変数 Emp_numと Emp_name に代入します。

int Emp_numstring Emp_nameFETCH Emp_cur INTO :Emp_num, :Emp_name ;

例 2 以下のス ク リプ ト は、 カーソル Emp_cur からデータをフェ ッチし、 そのデータ を変数 Emp_num と シン グル ラ イ ン エデ ィ ッ トsle_emp_name に保持し ます。 次に、 変数 Emp_num を Integer 型からString 型に変換して、その値をシングルライン エディ ッ ト sle_emp_numに代入します。

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

パラ メータ 説明

Cursor or Procedure フェ ッチする行を指示するカーソル名またはプロシージャ名

HostVariableList 検索されたデータ値が保持される PowerScript 変数

166 PowerBuilder

Page 177: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

INSERT機能 RestOfInsertStatement で指定されたテーブルに、 1 つまたは複数の新し

い行を挿入します。

構文 INSERT RestOfInsertStatement {USING TransactionObject} ;

解説 エラー処理INSERT 文の実行後に SQLCode プロパテ ィの値をテス ト して、 成否を確認する こ とをお勧めします。

例 例 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 ;

パラ メータ 説明

RestOfInsertStatement INSERT 文の中身 (INTO 句、 カラムの リ ス ト 、値またはソースの リ ス ト )

TransactionObject 目的のテーブルが格納されているデータベースを指定した ト ランザクシ ョ ン オブジェ ク ト名。この句は、 デフォル ト (SQLCA) 以外の ト ランザクシ ョ ン オブジェ ク ト に対して必要とな り ます。

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

Page 178: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

OPEN Cursor

OPEN Cursor機能 カーソルを宣言したと きに指定された SELECT 文を実行して、 カーソ

ルをオープンします。

構文 OPEN CursorName ;

解説 カーソ ルを宣言したステート メ ント の中でト ランザク ショ ン オブジェク ト が指定さ れているため、 OPEN Cursor 文で USING TransactionObject句を用いる こ とはできません。

エラー処理OPEN Cursor 文の実行後に SQLCode プロパティの値をテス ト して、 成否を確認するこ と をお勧めします。

例 次のステート メ ン トは、 カーソル Emp_cur を開きます。

OPEN Emp_curs ;

パラ メータ 説明

CursorName オープンするカーソル名

168 PowerBuilder

Page 179: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

ROLLBACK機能 指定されたデータベースにおける前回の COMMIT、 ROLLBACK、 または

CONNECT 以降のすべてのデータベース処理を取り消します。

サーバ コンポーネン トにおける COMMIT と ROLLBACK の使用サーバ コ ンポーネン ト の中に埋め込まれた COMMIT コ マン ド とROLLBACK コマンドは、UseContextObject の DBParm パラ メータの設定によって、 効果が異なる場合があ り ます。

UseContextObject のパラ メータについては、 『データベース との接続』マニュアルを参照して く ださい。 ト ランザクシ ョ ン サーバへのコンポーネン トの配布については、『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルを参照して ください。

構文 ROLLBACK {USING TransactionObject} ;

解説 ROLLBACK 文は、 データベース との接続は解除しませんが、 オープンしているカーソルまたはプロシージャをすべてク ローズします。

エラー処理ROLLBACK 文の実行後に SQLCode プロパテ ィの値をテス ト して、成否を確認するこ と をお勧めします。

例 例 1 次のステート メ ン トは、 デフォル ト ト ランザクシ ョ ン オブジェク ト で指定されたデータベースにおけるすべての処理内容を取り消します。

ROLLBACK ;

例 2 次のス テー ト メ ン ト は、 ト ラ ンザ ク シ ョ ン オブジ ェ ク トEmp_tran で指定されたデータベースにおけるすべての処理内容を取り消します。

ROLLBACK USING emp_tran ;

パラ メータ 説明

TransactionObject 前回の COMMIT、 ROLLBACK、 または CONNECT以降の、 データベースに対するあらゆる処理内容を取り消す ト ランザクシ ョ ン オブジェ ク ト名。 この句は、 デフォル ト (SQLCA) 以外の ト ランザクシ ョ ン オブジェク トに対して必要とな り ます。

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

Page 180: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

SELECT

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_fnameEmp_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 THEN

パラ メータ 説明

RestOfSelectStatement SELECT 文の中身 (カラムの リ ス ト 、 INTO 句、FROM 句、 WHERE 句、 そのほかの句)

TransactionObject 検索するテーブルが格納されているデータベースを指定した ト ラ ンザクシ ョ ン オブジェ ク ト名。 この句は、 デフォル ト (SQLCA) 以外の トランザクシ ョ ン オブジェ ク ト に対して必要となり ます。

170 PowerBuilder

Page 181: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

MessageBox("従業員の照会 ", &"従業員が見つかりません ")

ELSEIF Emp_tran.SQLCode > 0 then

MessageBox("データベース エラー ", &Emp_tran.SQLErrText, Exclamation!)

END IFsle_Lname.text = Emp_lnamesle_Fname.text = Emp_fname

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

Page 182: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

SELECTBLOB

SELECTBLOB機能 RestOfSelectStatement で指定されたテーブル中の 1 行から、 1 つの Blob

型カラムを 1 つ検索します。

構文 SELECTBLOB RestOfSelectStatement {USING TransactionObject} ;

解説 SELECTBLOB 文が複数行を返した場合には、 エラーにな り ます。

エラー処理SELECTBLOB 文の実行後に成否を確認するこ とをお勧めします。また、ト ランザクシ ョ ン オブジェ ク ト の SQLNRows プロパテ ィ をチェ ッ クして、 行が更新されたかど うかを確認できます。 SQLCode プロパテ ィまたは SQLDBCode プロパテ ィでは、 SELECTBLOB 文の実行結果の成否はわかり ません。

INTO 句内のホス ト変数の リ ス ト (ターゲッ ト パラ メータ) にインジケータ変数を挿入すれば、 空の Blob (長さがゼロの Blob) および変換エラーを調べるこ とができます。

データベース情報Sybase ASE および Microsoft SQL Server を使用し ている場合は、SELECTBLOB 関数を呼び出す前に、 ト ランザクシ ョ ン オブジェ ク トのAutoCommit プロパテ ィ を TRUE に設定する必要があ り ます。AutoCommit プロパティについては、 『データベース との接続』 マニュアルを参照して ください。

例 以下のスク リプ トは、Employee テーブルの Emp_num カラムの値が 100である行から Blob 型カラム Emp_pic を検索し、 その値を Blob 型変数Emp_id_pic に代入します。次に、 ピクチャ p_1 に Emp_id_pic のビッ トマップを設定します。ト ランザクシ ョ ン オブジェ ク ト には Emp_tran が使用されています。

パラ メータ 説明

RestOfSelectStatement SELECT 文の中身 (INTO 句、FROM 句、WHERE句)

TransactionObject 検索するテーブルが格納されているデータベースを指定した ト ラ ンザクシ ョ ン オブジェ ク ト名。 この句は、 デフォル ト (SQLCA) 以外の トランザクシ ョ ン オブジェ ク ト に対して必要となり ます。

172 PowerBuilder

Page 183: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

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 の) ホス ト変数である こ と を示すために、 変数名の先頭にコロンを付ける必要があ り ます。

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

Page 184: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

UPDATE

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) 以外の ト ランザクシ ョ ン オブジェ ク ト に対して必要とな り ます。

174 PowerBuilder

Page 185: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

UPDATEBLOB機能 TableName で指定された行の BlobColumn カラムを更新します。

構文 UPDATEBLOB TableName SET BlobColumn = BlobVariableRestOfUpdateStatement {USING TransactionObject} ;

解説 エラー処理UPDATEBLOB 文の実行後に成否を確認するこ とをお勧めします。また、ト ランザクシ ョ ン オブジェ ク ト の SQLNRows プロパテ ィ をチェ ッ クして、 行が更新されたかど うかを確認できます。 SQLCode プロパテ ィまたは SQLDBCode プロパテ ィでは、 SELECTBLOB 文の実行結果の成否はわかり ません。

データベース情報Sybase ASE および Microsoft SQL Server を使用し ている場合は、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) 以外の ト ランザクシ ョ ン オブジェ ク ト に対して必要とな り ます。

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

Page 186: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

UPDATEBLOB

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 の) ホス ト変数である こ と を示すために、 コ ロンを付ける必要があ り ます。

176 PowerBuilder

Page 187: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

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 ;

動的 SQL の使い方概要 通常、 データベース アプ リ ケーシ ョ ンは決められた処理を行う ため、

ス ク リ プ ト を記述してコンパイルする時点で、 その処理を記述したSQL 文が完成しています。 しかし、 PowerBuilder が記述したい埋め込み SQL 文 (たとえば、 データ定義言語) をサポー ト していない場合、また、 SQL 文のパラ メータや使用すべき書式がコンパイル時にはわからない場合は、アプ リ ケーシ ョ ン実行時に SQL 文を作成する必要があり ます。 これを動的 SQL といいます。動的 SQL 文で使用するパラ メータは、プログラムが実行される状況に応じて変わる可能性があ り ます。

Adaptive Server® Anywhere の使い方Adaptive Server Anywhere での動的 SQL の使い方については、 AdaptiveServer Anywhere の 『 Programming Interfaces』 マニュアルを参照して ください。

パラ メータ 説明

TableName 行を更新するテーブル名

SetStatement SET ステー ト メ ン ト の後に、 カンマで区切られたColumnName = value とい う形式の リ ス ト を続けたもの

CursorName テーブルを参照するカーソル名

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

Page 188: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

動的 SQL の使い方

4 つの書式 動的 SQL 文の 4 つの書式 PowerBuilder には、コンパイル時の状況に応じて、 以下の 4 つの動的 SQL 書式が用意されています。

以下のものを用いて、 コンパイル時の状況に応じた処理を行います。

• PowerBuilder の動的 SQL 文

• CLOSE 文、DECLARE 文、 FETCH 文、OPEN 文、および EXECUTE 文の動的 SQL バージ ョ ン

• PowerBuilder データ型の DynamicStagingArea および DynamicDescriptionArea の変数

前提条件例では、 デフォル ト ト ランザクシ ョ ン オブジェ ク ト (SQLCA) に有効な値が割り当てられているこ と、CONNECT 文が正常に終了しているこ と を前提と しています。 また、 例ではエラー チェ ッ クを行っていませんが、 通常は、 各 SQL 文の後で SQLCode プロパテ ィの値をチェ ックするべきです。

動的 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 ;

書式 書式を用いる状況

書式 1 入力パラ メータを持たず、 結果集合を返さないステート メ ント

書式 2 入力パラ メータを持つ、 結果集合を返さないステート メ ン ト

書式 3 コンパイル時に入力パラ メータ と結果集合カラムの内容が判明している、 結果集合を返すステート メ ン ト

書式 4 コンパイル時に入力パラ メータまたは結果集合カラム、 あるいはその両方と も判明していない、 結果集合を返すステートメ ン ト

178 PowerBuilder

Page 189: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

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 で用いられる入出力パラ メータについての情報を保持します。

PowerBuilder は、 SQLDA とい う DynamicDescriptionArea 型のグローバル変数を用意しているので、DynamicDescriptionArea 型の変数が必要なと きにこのデフォル ト変数を使用するこ とができます。

必要であれば、DynamicDescriptionArea データ型の別のオブジェ ク ト変数を宣言して使用できます。以下のステー ト メ ン トは、動的 SQL 文で参照する変数を、 事前に宣言し作成します。

DynamicDescriptionArea dda_desc1dsa_desc1 = CREATE DynamicDescriptionArea

SQLDA については、 187 ページの「 動的 SQL 書式 4」 を参照して ください。

動的 SQL を使用する前に

動的 SQL 文を使用する と きには、 以下のこ とが重要です。

• 書式 1 以外のすべての書式における DynamicStagingArea 型の変数の準備

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

Page 190: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

動的 SQL の使い方

• 書式 4 における DynamicDescriptionArea 型の変数の記述

• 動的 SQL 文の実行順序

準備と記述 SQLSAS ステージング エ リ アは、 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 文の前に実行します。

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 ;

180 PowerBuilder

Page 191: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

ELSEPREPARE SQLSA FROM :sql2 USING SQLCA ;

END IF

OPEN DYNAMIC my_cursor ; // my_cursor にマップされる// SELECT 文は条件によって// 異なります。

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

Page 192: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

動的 SQL 書式 1

動的 SQL 書式 1機能 入力パラ メータを必要とせず、結果集合を返さない SQL 文を実行する

と きには、 書式 1 を使用します。 この書式では、 あらゆる形式のデータ定義言語 (DDL) を実行できます。

構文 EXECUTE IMMEDIATE SQLStatement {USING TransactionObject} ;

例 以下のス ク リプ トは、 Employee テーブルを作成します。 このステートメ ン トは、 文字列 Mysql に CREATE 文を保持しています。

Sybase ASE と Microsoft SQL Server をご使用の場合ASE または SQL Server データベースに接続している場合は、 CREATE文を実行する前に AUTOCOMMIT プロパテ ィに TRUE を設定して ください。

string MysqlMysql = "CREATE TABLE Employee "&

+"(emp_id integer not null,"&+"dept_id integer not null, "&+"emp_fname char(10) not null, "&+"emp_lname char(20) not null)"

EXECUTE IMMEDIATE :Mysql ;

以下のスク リプ トは、ト ランザクシ ョ ン オブジェ ク ト My_trans が存在し、 データベース と正常に接続されているこ とを前提と しています。

string MysqlMysql="INSERT INTO dept Values (1234, 'Purchasing')" EXECUTE IMMEDIATE :Mysql USING My_trans ;

パラ メータ 説明

SQLStatement 有効な SQL 文を示す文字列。 この文字列は通常、文 字 列 定 数 ま た は 先 頭 に コ ロ ン を 付 け たPowerBuilder の変数 (たとえば :mysql) です。 この文字列は 1 行に収める必要があ り、 式を用いる ことはできません。

TransactionObject (オプシ ョ ン)

データベースを指定する ト ランザク シ ョ ン オブジェ ク ト名

182 PowerBuilder

Page 193: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

動的 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 上に入力パラ メータを 2 つ持つ INSERT文を作成し、 PowerScript 変数 Dept_id_var と Dept_name_var の値を用いて実行します。 Dept_name_var には NULL 値が設定されています。

INT Dept_id_var = 156String Dept_name_varSetNull(Dept_name_var)PREPARE SQLSA

FROM "INSERT INTO dept VALUES (?,?)" ;EXECUTE SQLSA USING :Dept_id_var,:Dept_name_var ;

パラ メータ 説明

DynamicStagingArea DynamicStagingArea 型の変数名 (通常は、 SQLSA)

SQLSA 以外の DynamicStagingArea 変数が必要な場合は、 CREATE 文で変数を宣言し、 インスタンス化してから使用して ください。

SQLStatement 有効な SQL 文を示す文字列。 この文字列は通常、文字列定数または先頭にコロンを付けた PowerBuilder の変数 (たとえば :mysql) です。 この文字列は 1 行に収める必要があ り、 式を用いるこ とはできません。

SQL 文の各入力パラ メータを疑問符 (?) で代用する必要があ り ます。 各パラ メータの値は記述した順序で代入されます。

TransactionObject(オプシ ョ ン)

データベースを指定する ト ランザクシ ョ ン オブジェク ト名

ParameterList (オプシ ョ ン)

カ ンマで区切られた PowerScript 変数の リ ス ト 。 各PowerScript 変数の先頭にはコロン (:) を付けます。

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

Page 194: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

動的 SQL 書式 3

動的 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 ;

解説 NULL 値を指定する と きには、 SetNull 関数を使用します。

DECLARE 文は非実行文です。 また、 グローバル変数と して宣言することができます。

パラ メータ 説明

Cursor または Procedure 使用するカーソル名またはプロシージャ名

DynamicStagingArea DynamicStagingArea 型の変数名 (通常は、SQLSA)

SQLSA 以外の DynamicStagingArea 変数が必要な場合は、 CREATE 文で変数を宣言し、 インスタンス化してから使用して ください。

SQLStatement 有効な SQL SELECT 文を示す文字列。この文字列は通常、 文字列定数または先頭にコロンを付けたPowerBuilder 変数 (たとえば :mysql) です。 この文字列は 1 行に収める必要があ り、 式を用いるこ とはできません。 SQL 文の各入力パラ メータを疑問符 (?) で代用する必要があ り ます。 各パラ メータの値は記述した順序で代入されます。

TransactionObject (オプシ ョ ン)

データベースを指定する ト ランザクシ ョ ン オブジェ ク ト名

ParameterList (オプシ ョ ン)

カンマで区切られた PowerScript 変数の リ ス ト 。 各PowerScript 変数の先頭にはコロン(:)を付けます。

HostVariableList 検索したデータ値を格納する PowerScript 変数のリ ス ト

184 PowerBuilder

Page 195: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

使用している DBMS が標準の (デフォル トの) FETCH NEXT 文以外のFETCH 文書式をサポー ト し ている場合には、 FETCH FIRST、 FETCHPRIOR、 または FETCH LAST 文を使用できます。

書式 3 で使用する FETCH 文と CLOSE 文は、 標準の埋め込み SQL 文と同じです。

ローカル変数のスコープでカーソルまたはプロシージャを宣言するには、 スク リプ ト ビューでス ク リプ ト を開き、 ペインタバーの [SQL 貼付] を使用するか、 [編集|形式を指定して貼り付け] メニューを選択します。 グローバル変数、インスタンス変数、または共有変数のスコープでカーソルまたはプロシージャを宣言するには、 ス ク リプ ト ビューの最初のド ロ ップダウン リ ス トから [Declare] を選択し、 2 つ目のドロ ップダウン リ ス トから [Global Variables]、 [Instance Variables]、 または [Shared Variables] を選択します。

グローバル変数、 インスタンス変数, 共有変数、 およびローカル変数のスコープについては、 31 ページの「 変数の宣言場所」 を参照して ください。

例 例 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 文の場合と同じよ うに、ループでカーソルを処理するこ とができます。

例 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 emp_state = ?"

PREPARE SQLSA FROM :sqlstatement ;

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

Page 196: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

動的 SQL 書式 3

OPEN DYNAMIC my_cursor using :Emp_state_var ;FETCH my_cursor INTO :Emp_id_var ;CLOSE my_cursor ;

例 3 以下のスク リプ トは前述の例と同じ処理を行いますが、ス ト アドプロシージャ Emp_select を用いています。

// emp_select の構文は以下のようになっています。// "SELECT emp_id// FROM employee WHERE emp_state=@stateparm"DECLARE my_proc DYNAMIC PROCEDURE FOR SQLSA ;integer Emp_id_varstring Emp_state_var

PREPARE SQLSA FROM "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 ;

186 PowerBuilder

Page 197: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

動的 SQL 書式 4機能 入力パラ メータの数または結果集合のカラム数、 あるいは両方がコン

パイル時に判明していない場合、結果集合を返す SQL 文を実行する ときは、 書式 4 を使用します。

構文 DECLARE Cursor | Procedure DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea ;

PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject} ;

DESCRIBE DynamicStagingAreaINTO DynamicDescriptionArea ;

OPEN DYNAMIC Cursor | ProcedureUSING DESCRIPTOR DynamicDescriptionArea ;

EXECUTE DYNAMIC Cursor | 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 文の各入力パラ メータを疑問符 (?) で代用する必要があ り ます。 各パラ メータの値は記述した順序で代入されます。

TransactionObject (オプシ ョ ン)

データベースを指定する ト ランザクシ ョ ン オブジェ ク ト名

DynamicDescriptionArea DynamicDescriptionArea 型の変数名 (通常は、SQLDA)。

SQLDA 以外の DynamicDescriptionArea 変数が必要な場合は、 CREATE 文で変数を宣言し、 インスタンス化してから使用して ください。

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

Page 198: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

動的 SQL 書式 4

解説 DECLARE 文は非実行文です。 また、 グローバル変数と して宣言することができます。

使用している DBMS が標準の (デフォルト の) FETCH NEXT 文以外のFETCH 文書式をサポー ト し ている場合には、 FETCH FIRST、 FETCHPRIOR、 または FETCH LAST 文を使用できます。

ローカル変数のスコープでカーソルまたはプロシージャを宣言するには、 スク リプ ト ビューでスク リプ ト を開き、 ペインタバーの [SQL 貼付] を使用するか、 [編集|形式を指定して貼り付け] メニューを選択します。 グローバル変数、インスタンス変数、または共有変数のスコープでカーソルまたはプロシージャを宣言するには、 スク リプ ト ビューの最初のド ロ ップダウン リ ス トから [Declare] を選択し、 2 つ目のドロ ップダウン リ ス トから [Global Variables]、 [Instance Variables]、 または [Shared Variables] を選択します。

グローバル変数、 インスタンス変数, 共有変数、 およびローカル変数のスコープについては、 31 ページの「 変数の宣言場所」 を参照して ください。

プロパテ ィ情報へのアクセス DynamicDescriptionArea 型の変数に SQL文が記述される と、その DynamicDescriptionArea 型の変数のプロパテ ィを調べるこ とによって、 下表に示す情報を入手できます。

パラ メータ値の設定とアクセス DynamicDescriptionArea 型の変数には、入力パラ メータ値の配列と出力パラ メータ値の配列を保持しています。 入力パラ メータの値は、 SetDynamicParm 関数を使用して配列に設定します。 また、 以下の関数を使用して、 出力パラ メータの値を配列から入手できます。

GetDynamicDate GetDynamicDateTime GetDynamicNumber GetDynamicString GetDynamicTime

情報 プロパテ ィ

入力パラ メータの数 NumInputs

入力パラ メータのデータ型を保持する配列

InParmType

出力パラ メータの数 NumOutputs

出力パラ メータのデータ型を保持する配列

OutParmType

188 PowerBuilder

Page 199: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

これらの関数の詳細については、 611 ページの「 GetDynamicDate」、613 ページの「 GetDynamicDateTime」、 615 ページの

「 GetDynamicNumber」、 616 ページの「 GetDynamicString」、 および 617 ページの「 GetDynamicTime」 を参照して ください。

パラ メータのデータ型 以下のカタログ データ型は、 入力パラ メータ と出力パラ メータのデータ型を示すのに用います。

TypeBoolean!TypeDate!TypeDateTime!TypeDecimal!TypeDouble!TypeInteger!TypeLong!TypeReal!TypeString!TypeTime!TypeUInt!TypeULong!TypeUnknown!

入力パラ メータ PREPARE 文の各入力パラ メータのデータ型と値は、開発者が設定でき ます。 DESCRIBE 文が実行される と きに PowerBuilderによって SQLDA の NumInputs プロパテ ィに値が代入されます。 この値を SetDynamicParm 関数で使用すれば、 個々の入力パラ メータのデータ型と値を設定できます。 入力パラ メータはオプシ ョ ンですが、 使用する場合には、 OPEN 文または EXECUTE 文を実行する前に入力パラメータの値をすべて代入しておく必要があ り ます。

出力パラ メータ PREPARE 文の各出力パラ メータのデータ型と値にアクセスできます。 データベースが出力パラ メータ記述子をサポー ト している場合、 DESCRIBE 文が実行される と きに PowerBuilder によってSQLDA の NumOutputs プロパテ ィの値が生成されます。 データベースが出力パラ メータ記述子をサポート していない場合は、 FETCH 文が実行される と きに NumOutputs プロパティの値が生成されます。

NumOutputs プロパテ ィ の出力パラ メ ータ数を関数で用いれば、OutParmType プロパテ ィの保持する出力パラ メータのデータ型配列から個々のパラ メータのデータ型を入手できます。 データ型を入手すれば、 FETCH 文の後で適切な関数を呼び出して出力値を検索できます。

例 例 1 以下のス ク リ プ ト は、 出力パラ メータ記述子が 1 つしかな く、データ型が Integer であ る も の と し て記述されています。 また、CHOOSE CASE 文をループで処理するよ うに拡張する と、出力パラ メータ記述子とそのデータ型をいくつでもサポートできます。

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

Page 200: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

動的 SQL 書式 4

string Stringvar, Sqlstatementinteger IntvarSqlstatement = "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! または TypeString!) の値を保持します。CHOOSE CASE SQLDA.OutParmType[1]

CASE TypeString!Stringvar = GetDynamicString(SQLDA, 1)

CASE TypeInteger!Intvar = GetDynamicNumber(SQLDA, 1)

END CHOOSECLOSE my_cursor ;

例 2 以下のスク リプ トは、 String 型の入力パラ メータ記述子が 1 つある ものと して、 入力パラ メータに MA を設定します。

string SqlstatementSqlstatement = "SELECT emp_id FROM employee "&

+"WHERE emp_state = ?"PREPARE SQLSA FROM :Sqlstatement ;

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 文が正常終了した場合、 出力記述子配列は、

190 PowerBuilder

Page 201: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 8 章 SQL 文

// 前述の例と同じよ うに // 結果集合の最初の行から// 返される値を保持します。

CLOSE my_cursor ;

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

Page 202: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

動的 SQL 書式 4

192 PowerBuilder

Page 203: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

この章について この章では、 イベン ト の種類について説明した後で、 データウ ィン ド ウ とデータス ト ア以外の PowerBuilder のすべてのコン ト ロールとオブジェ ク トに対するイベン ト とそのイベン ト ID、 引数、 戻り値について解説します。 解説と例では、 イベン ト ス ク リプ トで一般的に行われる処理内容について説明します。

データウ ィ ン ド ウ とデータス ト アのイベン トについては、『データウ ィ ン ド ウ リ フ ァレンス』 マニュアルを参照して ください。

内容 イベン トは、 アルファベッ ト順に解説されています。

イベン トについてイベン ト にはいくつかの種類があ り ます。

表 9-1: PowerBuilder のイベン トの種類

イベン ト ID、 引数、 戻り値に関する以下の解説は、 すべての種類のイベン トに適用されます。

イベン トの種類 イベン ト を起動させるもの

イベン ト ID のあるシステム イベン ト

ユーザの操作、 ほかのシステム メ ッセージ、 ス ク リプ ト によ る呼び出し

イベン ト ID のないシステム イベン ト

PowerBuilder メ ッセージ、 ス ク リプ ト による呼び出し

イベン ト ID のあるユーザ定義イベン ト

ユーザの操作、 ほかのシステム メ ッセージ、 ス ク リプ ト によ る呼び出し

イベン ト ID のないユーザ定義イベン ト ID

スク リプ トによ る呼び出し

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

Page 204: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

イベン トについて

イベン ト 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 文は下位互換性の目的でのみ残されており、 127 ページの「 CALL」 で説明している場合を除き、 新しいアプ リ ケーシ ョ ンでの使用は避けて ください。

戻り値 戻り値はどこに行くのか ほ とんどのイベン ト には戻 り値があ り ます。システムがイベン ト を起動する場合、システムに戻り値が返されます。

ス ク リ プ ト がユーザ定義イベン ト やシステム イベン ト を起動する場合には、 代入文によって戻り値を取得するこ とができます。

li_rtn = w_main.EVENT process_info(mydata)

194 PowerBuilder

Page 205: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

イベン ト をポス ト と して起動する場合、 ポス ト したス ク リプ トが実際に実行される と きには、 呼び出し元のスク リプ トはすでに終了しているため、 戻り値は失われます。 ポス ト されるイベン トに対して代入文を挿入する と、 コンパイル エラーとな り ます。

リ ターン コード 戻り値のあるシステム イベン ト では、 デフォル ト リターン コード と して 0 が返されます。 この値は 「特別なアクシ ョ ンをせずに処理を続行する」 とい う意味です。 イベン ト によっては、 イベン ト後の処理を変更するために リ ターン コードが追加されています。たとえば、 リ ターン コードの値に応じて、エラー メ ッセージ表示を省略した り、 行われた変更を取り消すこ とができます。

RETURN 文はイベン ト スク リプ トに必ずし も記述しな くてもかまいませんが、通常は、RETURN 文を記述しておく こ とが推奨されます。 戻り値のあるイベン トに RETURN 文が記述されていない場合、 イベン トは0 を返します。

システム イベン トによっては戻り値がないものがあ り ます。 これらのイベン トに対して RETURN 文を記述する と、 コンパイル エラーとな ります。

先祖イベン ト スクリプ トの戻り値

子孫オブジェ ク トのイベン ト でなんらかの処理を実行する と き、 その処理が先祖イベン ト ス ク リ プ ト が返す戻り値に依存する こ とがあ ります。 このよ う な場合、 AncestorReturnValue とい う ローカル変数を使う こ とができます。 この変数は、 自動的に宣言され、 先祖イベン ト の値が代入されます。

AncestorReturnValue については、117 ページの「 先祖オブジェク ト の関数と イベント の呼び出し 」 を参照して ください。

ユーザ定義イベン ト イベン ト ID のあるイベン ト システム メ ッセージによって起動されるユーザ定義イベン ト を宣言する場合は、イベン ト ID の リ ス トから適切なイベン ト ID を選択します。 イベン ト宣言用のダイアログボッ クスに表示される pbm (PowerBuilder Message) コードは、 システム メ ッセージに対応しています。

イベン ト ID に関連付けられている戻り値と引数は、イベン ト宣言の一部とな り ます。 これらはシステム メ ッセージに対応する ものなので、修正する こ とはできません。

システム メ ッセージが発生する と、 PowerBuilder は対応するイベン トを起動し、 イベン トの引数に値を渡します。

イベン ト ID のないイベン ト システム メ ッセージに対応付けられないユーザ イベン ト を宣言する と きは、 イベン ト ID を選択しません。

この場合、 独自の引数と戻り値のデータ型をイベン ト宣言用のダイアログボッ クスで指定するこ とができます。

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

Page 206: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

イベン トについて

イベン ト ID を持たないイベン トは、 ユーザ操作やシステム アクテ ィビテ ィによっては起動されません。 アプ リ ケーシ ョ ンのス ク リプ ト で起動しなければな り ません。

詳細について システム イベン ト など、 イベン ト を起動する際の呼び出し構文の詳細については、 113 ページの「 PowerBuilder の関数と イベント の呼び出し構文」 を参照して ください。

ユーザ定義イベン トの詳細については、『PowerBuilder ユーザーズ ガイド』 マニュアルを参照して ください。

196 PowerBuilder

Page 207: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

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 ウ ィ ンド ウ

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

Page 208: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

BeginDrag

BeginDragBeginDrag イベン トは、 オブジェ ク ト によって引数の内容が異な り ます。

構文 1 リス ト ビュー コン ト ロールに対して

機能 ユーザが リ ス ト ビュー コン ト ロール内でマウスの左ボタンを押して、ド ラ ッグを開始する と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザがマウス ボタンを押してド ラ ッグを開始する と、 ド ラ ッグの可能、 不可能に関わらず、 BeginDrag イベン ト と BeginRightDrag イベントが発生します。 ド ラ ッグを可能にするには、 次のよ うにします。

• DragAuto プロパテ ィ を TRUE に設定します。 リ ス ト ビューのDragAuto プロパテ ィが TRUE の場合、 ユーザがク リ ッ クする と自動的にド ラ ッグ モードにな り ます。

• Drag 関数を呼び出します。 DragAuto プロパテ ィが FALSE の場合は、BeginDrag イベン ト スク リプ トで Drag 関数を呼び出し、ド ラ ッグ操作を開始します。

リ ス ト ビュー項目を別のコン ト ロールにド ラ ッグする と、 ド ラ ッグ関連の標準イベン ト (DragDrop、 DragEnter、 DragLeave、 DragWithin) が発生します。 ほかのコン ト ロールが リ ス ト ビューの境界内にド ラ ッグされる と、 同様なド ラ ッグ関連のイベン トが発生します。

オブジェ ク ト 構文

リ ス ト ビュー コン ト ロール 構文 1ツ リービュー コン ト ロール 構文 2

イベン ト ID オブジェ ク ト

pbm_lvnbegindrag リ ス ト ビュー

引数 説明

index Integer 型。 値によって渡されます (ド ラ ッグされている ListViewItem のインデッ クス)。

198 PowerBuilder

Page 209: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

例 次の例は リ ス ト ビュー項目を リ ス ト ビューから別の リ ス ト ビューに移動します。 Ilvi_dragged_object は ListViewItem 型のウ ィ ン ド ウ インスタンス変数です。 リ ス ト ビュー項目をコピーする場合は、 移動元の リ スト ビューから リ ス ト ビュー項目を削除するコードを省いて ください。

次のコードは、 移動元の リ ス ト ビューの BeginDrag イベン トのスク リプ ト です。

// ツリービューの DragAuto プロパテ ィが FALSE の場合This.Drag(Begin!)

This.GetItem(This.SelectedIndex(), &ilvi_dragged_object)

// 移動でな く コピーの場合は、 次の 2 行を省 く ことThis.DeleteItem(This.SelectedIndex())This.Arrange()

次のコードは、移動先の リ ス ト ビューの DragDrop イベン トのスク リプトです。

This.AddItem(ilvi_dragged_object)This.Arrange()

関連項目 BeginRightDragDragDropDragEnterDragLeaveDragWithin

構文 2 ツリービュー コン ト ロールに対して

機能 ユーザがツ リービュー コン ト ロールのラベル上でマウスの左ボタンを押して、 ド ラ ッグを開始する と きに発生します。

イベン ト ID

引数

イベン ト ID オブジェク ト

pbm_tvnbegindrag ツ リービュー

引数 説明

handle Long 型。 値によって渡されます (ド ラ ッグされている TreeViewItem のハン ドル)。

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

Page 210: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

BeginDrag

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザがマウス ボタンを押してド ラ ッグを開始する と、 ド ラ ッグの可能、 不可能に関わらず、 BeginDrag イベン ト と BeginRightDrag イベントが発生します。 ド ラ ッグを可能にするには、 次のよ うにします。

• DragAuto プロパテ ィ を TRUE に設定します。 ツ リービューのDragAuto プロパテ ィが TRUE の場合、 ユーザがク リ ッ クする と自動的にド ラ ッグ モードにな り ます。

• Drag 関数を呼び出します。 DragAuto プロパテ ィが FALSE の場合は、BeginDrag イベン ト スク リプ トで Drag 関数を呼び出し、ド ラ ッグ操作を開始します。

ユーザはハイ ラ イ ト表示されている項目をド ラ ッグできません。

ツ リービュー項目を別のコン ト ロールにド ラ ッグする と、 ド ラ ッグ関連の標準イベン ト (DragDrop、 DragEnter、 DragLeave、 DragWithin) が発生します。 ほかのコン ト ロールがツ リービューの境界内にド ラ ッグされる と、 同様なド ラ ッグ関連のイベン トが発生します。

例 次の例はツ リービュー項目をツ リービューから別のツ リービューに移動します。 Ilvi_dragged_object は ListViewItem 型のウ ィ ン ド ウ インスタンス変数です。ツ リービュー項目をコピーする場合は、移動元のツ リービューからツ リービュー項目を削除するコードを省いて ください。

次のコードは、 移動元のツ リービューの 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, ilvi_dragged_object)This.SetRedraw(TRUE)

200 PowerBuilder

Page 211: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

移動元のツ リービューから項目を直ちに削除する代わりに、 DragDropイベン トでの項目の挿入を確認した後で削除しても構いません。

関連項目 BeginRightDragDragDropDragEnterDragLeaveDragWithin

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

Page 212: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

BeginLabelEdit

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 型。 値に よ っ て渡 さ れ ま す (選択 さ れ たListViewItem のインデッ クス)。

202 PowerBuilder

Page 213: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

構文 2 ツリービュー コン ト ロールに対して

機能 ユーザが項目を選択した後で、 その項目のラベルをク リ ッ クする と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 ラベルの編集を可能にします。1 ラベルの編集ができません。

解説 ラベルの編集が可能なと きは、 ラベルの位置にボッ クスが現われ、 ラベル テキス トがハイ ラ イ ト表示されます。 ユーザはこのテキス ト を変更するこ とができます。

例 次の例は、BeginLabelEdit イベン ト を使って、編集中のツ リービュー項目名をシングルライン エディ ッ トに表示します。

TreeViewItem tviThis.GetItem(index, tvi)sle_info.text = "Editing " + string(tvi.label)

関連項目 EndLabelEdit

イベン ト ID オブジェク ト

pbm_tvnbeginlabeledit ツ リービュー

引数 説明

handle Long 型。 値 に よ っ て 渡 さ れ ま す (選択 さ れ たTreeViewItem のハンドル)。

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

Page 214: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

BeginRightDrag

BeginRightDragBeginRightDrag イベン トは、 オブジェ ク ト によって引数の内容が異なり ます。

構文 1 リス ト ビュー コン ト ロールに対して

機能 ユーザが リ ス ト ビュー コン ト ロール内でマウスの右ボタンを押して、ド ラ ッグを開始する と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザがマウス ボタンを押してド ラ ッグを開始する と、 ド ラ ッグの可能、 不可能に関わらず、 BeginDrag イベン ト と BeginRightDrag イベントが発生します。 ド ラ ッグを可能にするには、 次のよ うにします。

• DragAuto プロパテ ィ を TRUE に設定します。 リ ス ト ビューのDragAuto プロパテ ィが TRUE の場合、 ユーザがク リ ッ クする と自動的にド ラ ッグ モードにな り ます。

• Drag 関数を呼び出します。 DragAuto プロパテ ィが FALSE の場合は、 BeginRightDrag イベン ト スク リプ ト で Drag 関数を呼び出し、ド ラ ッグ操作を開始します。

リ ス ト ビュー項目を別のコン ト ロールにド ラ ッグする と、 ド ラ ッグ関連の標準イベン ト (DragDrop、 DragEnter、 DragLeave、 DragWithin) が発生します。 ほかのコン ト ロールが リ ス ト ビューの境界内にド ラ ッグされる と、 同様なド ラ ッグ関連のイベン トが発生します。

オブジェ ク ト 構文

リ ス ト ビュー コン ト ロール 構文 1ツ リービュー コン ト ロール 構文 2

イベン ト ID オブジェ ク ト

pbm_lvnbeginrightdrag リ ス ト ビュー

引数 説明

index Integer 型。 値によって渡されます (ド ラ ッグされている ListViewItem のインデッ クス)。

204 PowerBuilder

Page 215: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

例 BeginDrag イベン トの例を参照して ください。 BeginRightDrag イベン トでも有効です。

関連項目 BeginDragDragDropDragEnterDragLeaveDragWithin

構文 2 ツリービュー コン ト ロールに対して

機能 ユーザがツ リービュー コン ト ロール内でマウスの右ボタンを押して、ド ラ ッグを開始する と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザがマウス ボタンを押してド ラ ッグを開始する と、 ド ラ ッグの可能、 不可能に関わらず、 BeginDrag イベン ト と BeginRightDrag イベントが発生します。 ド ラ ッグを可能にするには、 次のよ うにします。

• DragAuto プロパテ ィを TRUE に設定します。 リ ス ト ビューのDragAuto プロパテ ィが TRUE の場合、 ユーザがク リ ッ クする と自動的にド ラ ッグ モードにな り ます。

• Drag 関数を呼び出します。 DragAuto プロパティが FALSE の場合は、 BeginRightDrag イベン ト スク リプ ト で Drag 関数を呼び出し、ド ラ ッグ操作を開始します。

ユーザはハイ ラ イ ト 表示されている項目を ド ラ ッ グでき ません。 ツリービュー項目を別のコン ト ロールにド ラ ッグする と、 ド ラ ッグ関連の標準イベン ト (DragDrop、 DragEnter、 DragLeave、 DragWithin) が発生します。 ほかのコン ト ロールがツ リービューの境界内にド ラ ッグされる と、 同様なド ラ ッグ関連のイベン トが発生します。

イベン ト ID オブジェク ト

pbm_tvnbeginrightdrag ツ リービュー

引数 説明

handle Long 型。 値によって渡されます (ド ラ ッグ されているTreeViewItem のハン ドル)。

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

Page 216: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

BeginRightDrag

例 BeginDrag イベン トの例を参照して ください。

関連項目 BeginDragDragDropDragEnterDragLeaveDragWithin

206 PowerBuilder

Page 217: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

ClickedClicked イベン トは、 オブジェ ク トによって引数の内容が異な り ます。

データウ ィン ド ウ コン ト ロールの Clicked イベン ト については、『データウ ィ ン ド ウ リ フ ァレンス』マニュアルまたはオンライン ヘルプを参照して ください。

構文 1 メニュー オブジェ ク トに対して

機能 ユーザがメニューの項目を選択する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード なし (RETURN 文を使用しないでください)

解説 ユーザがメニュー項目を実行せずにハイ ラ イ ト表示にしただけの場合は、 Selected イベン ト が発生します。

ユーザが、 カスケード メニューに関連付けられたメニュー項目を選択した場合は、Clicked イベン トが発生し、カスケード メニューが表示されます。

例 次のスク リプ トは、 フレーム ウ ィ ン ド ウの [新規作成] メニュー項目の Clicked イベン トに対するものです。 こ こで、wf_newsheet 関数はウ ィン ド ウ関数です。 また、 w_genapp_frame は、 アプリ ケーシ ョ ン テンプレート (新規アプ リ ケーシ ョ ンの作成時に生成できます) のコンポーネン トです。

/* 新規シートの作成 */w_genapp_frame.wf_newsheet( )

関連項目 Selected

オブジェク ト 構文

メニュー 構文 1リ ス ト ビュー コン ト ロール 構文 2タブ コン ト ロール 構文 3ツ リービュー コン ト ロール 構文 4ウ ィン ド ウ 構文 5ほかのコン ト ロール 構文 6

イベン ト ID オブジェク ト

なし メニュー

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

Page 218: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Clicked

構文 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)This.SetItem(index, llvi_current)RETURN 0

関連項目 ColumnClickDoubleClicked

イベン ト ID オブジェ ク ト

pbm_lvnclicked リ ス ト ビュー

引数 説明

index Integer 型。 値によって渡されます (ユーザがク リ ック し た ListViewItem のイ ンデ ッ ク ス) 。 ユーザがListViewItem 以外のコン ト ロール内部をク リ ッ ク した場合、 index の値は -1 にな り ます。

208 PowerBuilder

Page 219: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

ItemActivateItemChangedItemChangingRightClickedRightDoubleClicked

構文 3 タブ コン ト ロールに対して

機能 ユーザがタブ コン ト ロールのタブ部分をク リ ッ クする と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベン トはマウス ボタンが放される と きに発生します。

ユーザがタブ コン ト ロールの表示領域をク リ ッ クする と、タブ コン トロールではな く、 タブ ページが Clicked イベン ト を得ます。

Clicked イベン トは、ダブルク リ ッ ク される と き も、DoubleClicked イベン トに先立って発生します。

ユーザがタブ ページ ラベルをク リ ッ クする と、 Clicked イベン トのほかに SelectionChanging イベン ト と SelectionChanged イベン ト が発生します。ユーザが矢印キーを押して別のタブ ページに移る場合は、Clickedイベント ではなく 、 SelectionChanging イベント と SelectionChanged イベント の前に Key イベント が発生します。

例 次のコードは 4 番目のタブ ページがク リ ッ ク されたと きだけ、タブ ラベルを太字に変えます。

IF index = 4 THEN This.BoldSelectedText = TRUE

ELSEThis.BoldSelectedText = FALSE

END IF

イベン ト ID オブジェ ク ト

pbm_tcnclicked タブ

引数 説明

index Integer 型。 値によって渡されます (ユーザがク リ ック したタブ ページのインデッ クス)。

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

Page 220: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Clicked

関連項目 DoubleClickedRightClickedRightDoubleClickedSelectionChangedSelectionChanging

構文 4 ツリービュー コン ト ロールに対して

機能 ユーザがツ リービュー コン ト ロールの項目をク リ ッ クする と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベン トはマウス ボタンが押されたと きに発生します。

Clicked イベン トは、ダブルク リ ッ ク される と き も、DoubleClicked イベン ト に先立って発生します。

フォーカス されていなかったコン ト ロールがク リ ッ ク される場合は、Clicked イベン トのほかに、 GetFocus イベン トが発生します。

例 次のコードは、 ユーザがク リ ッ ク した項目の英文ラベルを大文字に変更します。

TreeViewItem ltvi_current

This.GetItem(handle, ltvi_current)ltvi_current.Label = Upper(ltvi_current.Label)This.SetItem(handle, ltvi_current)

関連項目 DoubleClickedRightClickedRightDoubleClickedSelectionChangedSelectionChanging

イベン ト ID オブジェ ク ト

pbm_tvnclicked ツ リービュー

引数 説明

handle Long 型。 値によって渡されます (ユーザがク リ ッ クしたツ リービュー項目のハン ドル)。

210 PowerBuilder

Page 221: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

構文 5 ウィ ンドウに対して

機能 ユーザがウ ィ ン ド ウ上の未使用領域 (表示可能で使用可能なオブジェク トが配置されていないエリ ア) をク リ ッ クする と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベン トはマウス ボタンが放される と きに発生します。

ユーザがコン ト ロールやメニューをク リ ッ クする と、 ウ ィ ン ド ウではな く、オブジェ ク トが Clicked イベン ト を得ます。 なお、 ウ ィ ン ド ウのタイ トル バーをク リ ッ ク しても Clicked イベン トは発生しません。

ユーザがウ ィ ン ド ウを ク リ ッ クする と、 ウ ィ ン ド ウの MouseDown イベン ト と MouseUp イベン ト も発生します。

ユーザが、 表示されているが使用不可のコン ト ロールや、 使用可能だが非表示のコン ト ロールをク リ ッ ク した場合は、 ウ ィ ン ド ウが Clickedイベン ト を得ます。

イベン ト ID オブジェ ク ト

pbm_lbuttonclk ウ ィ ンド ウ

引数 説明

flags UnsignedLong 型。 値によって渡されます (押下されたマウス ボタンと修飾キーの値の合計)。

値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 - 〔Shift〕• 8 - 〔Ctrl〕• 16 - 中マウス ボタン

Clicked イベン ト で左マウス ボタンが押されない場合、 flags の値に 1 は加算されません。

flags の詳細については、284 ページの 「MouseMove」イベン トの構文 2 を参照して ください。

xpos Integer 型。 値によって渡されます (ウ ィ ン ド ウの左辺からポインタまでの距離で、 ピクセル単位の値)。

ypos Integer 型。 値によって渡されます (ウ ィ ン ド ウの上辺からポインタまでの距離で、 ピクセル単位の値)。

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

Page 222: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Clicked

例 次のコードは、ユーザがウ ィ ン ド ウの左上隅をク リ ッ クする と cb_clearボタンにフォーカスを移します。

IF (xpos <= 600 AND ypos <= 600) THENcb_clear.SetFocus( )

END IF

関連項目 DoubleClickedMouseDownMouseMoveMouseUpRButtonDown

構文 6 ほかのコン ト ロールに対して

機能 ユーザがコン ト ロールをク リ ッ ク したと きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Clicked イベン トはマウス ボタンが放される と きに発生します。

フォーカス されていなかったコン ト ロールがク リ ッ ク される場合は、Clicked イベン トのほかに、 GetFocus イベン トが発生します。

例 次のコードは、 OLE コン ト ロールの Clicked イベン トのスク リプ トです。OLE コン ト ロール上のオブジェ ク ト をインプレースで起動します。

integer li_successli_success = This.Activate(InPlace!)

関連項目 GetFocusRButtonDown

イベン ト ID オブジェ ク ト

pbm_bnclicked チェ ッ クボッ クス、 コマンドボタン、 グラフ、 OLE、ピクチャ、 ピクチャ ハイパーリ ンク、 ピクチャボタン、 ラジオボタン、 ス タテ ィ ッ ク テキス ト、 ス タテ ィ ッ ク ハイパーリ ンク

pbm_prnclicked 水平プログレスバー、 垂直プログレスバー

212 PowerBuilder

Page 223: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

CloseClose イベン トは、 オブジェ ク トによって引数の内容が異な り ます。

構文 1 アプリケーシ ョ ン オブジェク トに対して

機能 ユーザがアプ リ ケーシ ョ ンを閉じる と きに発生します。

イベン ト ID

引数 なし

リ ターン コード なし (RETURN 文を使用しないでください)

解説 Close イベン トは、 すべてのウ ィ ン ド ウ (MDI アプ リ ケーシ ョ ンの場合は MDI フレーム) が閉じ る と きに発生します。

関連項目 OpenSystemError

構文 2 OLE コン ト ロールに対して

機能 オフサイ ト で起動された OLE コン ト ロールのオブジェ ク ト (OLE サーバがサーバのウ ィ ン ド ウ上で表示しているオブジェ ク ト ) のサーバが閉じ られる と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型のリ ターン コード。 無視されます。

解説 ユーザが OLE サーバを閉じる と、ユーザの選択によってコン ト ロール内の OLE オブジェ ク トが更新され、 Save イベン ト または DataChangeイベン トが発生する場合があ り ます。

オブジェク ト 構文

アプ リ ケーシ ョ ン 構文 1OLE コン ト ロール 構文 2ウ ィン ド ウ 構文 3

イベン ト ID オブジェク ト

なし アプ リ ケーシ ョ ン

イベン ト ID オブジェク ト

pbm_omnclose OLE

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

Page 224: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Close

このイベン トの処理中に、OLE コン ト ロールの ObjectData Blob 値を取得したい場合は、 このコン ト ロールに対してユーザ イベン ト をポス トしないと、 実行時エラーが発生します。

関連項目 DataChangeSave

構文 3 ウィ ンドウに対して

機能 ウ ィン ド ウが画面に表示されな くなる直前に発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ウ ィン ド ウに対して Close 関数を呼び出す場合、 Close イベン トの前にCloseQuery イベン トが発生します。CloseQuery イベン ト では、Close イベン ト を発生させないでウ ィ ン ド ウを開いたままにするよ うに リ ターン コードを指定できます。

ウ ィ ン ド ウを閉じる場合は、 Close イベン ト を起動しないで、 Close 関数を呼び出して ください (Close イベン ト を起動しても、そのイベン トスク リプ ト が実行されるだけで、 ウ ィン ド ウは閉じません)。

関連項目 CloseQueryOpen

イベン ト ID オブジェ ク ト

pbm_close ウ ィ ンド ウ

214 PowerBuilder

Page 225: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

CloseQuery機能 ウ ィン ド ウが閉じ る と きに、 Close イベン ト の前に発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 ウ ィ ン ド ウを閉じます。1 ウ ィ ン ド ウを閉じません。

解説 CloseQuery イベン トが リ ターン コード と して 1 を返す場合、 ウ ィ ン ドウのクローズ処理は中止され、 Close イベン トは発生しません。

ユーザがウ ィ ン ド ウのク ローズボッ クスを使ってウ ィ ン ド ウを閉じる場合も CloseQuery イベン トが発生します。 したがって、 CloseQuery イベン ト を用いれば、 ウ ィン ド ウを閉じる前にユーザに変更内容を保存するかど うかを尋ねた り、 正当なデータが入力されたかど うかを調べる こ とができます。

関数仕様の変更Message オブジェ ク ト の ReturnValue プロパテ ィの値を設定する必要はな くな り ました。 代わりに、 RETURN 文を使用して ください。

例 次のスク リプ トは、ウ ィン ド ウの CloseQuery イベン トのものです。ユーザにウ ィン ド ウを本当に閉じるかど うかメ ッセージを発し、 ユーザが「いいえ」 と答えたら ク ローズ処理を中止します。

IF MessageBox("ウィ ンドウを閉じる ", &" ウィン ドウを閉じてもよろしいですか ?", &Question!, YesNo!) = 2 THEN

RETURN 1ELSE

RETURN 0END IF

次のスク リプ トは、 dw_1 データウ ィン ド ウに未保存のデータ変更があるかど うか調べます。 変更がある場合、 そのデータをデータベースに更新してからウ ィン ド ウを閉じ るか、 更新せずに閉じるか、 また、 更新しないでウ ィ ン ド ウを開いたままにするか、 ユーザに問い合わせます。

イベン ト ID オブジェ ク ト

pbm_closequery ウ ィ ンド ウ

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

Page 226: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

CloseQuery

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

// 変更されたデータがなかったので、 ウィ ンドウを単に閉じるRETURN 0

END IF

関連項目 Close

216 PowerBuilder

Page 227: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

ColumnClick機能 ユーザがカラム ヘッダをク リ ッ クする と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ColumnClicked イベン トは、リ ス ト ビューのビューが詳細表示になっていて、ButtonHeader プロパテ ィが TRUE に設定されている と きしか、発生しません。

例 次の例は、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 = TRUE

イベン ト ID オブジェ ク ト

pbm_lvncolumnclick リ ス ト ビュー

引数 説明

column ク リ ッ ク されたカラムのインデッ クス

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

Page 228: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ColumnClick

ls_align = "Justify!"END CHOOSE

sle_info.Text = String(column) &+ " " + ls_label &+ " " + ls_align &+ " " + String(li_width)

関連項目 Clicked

218 PowerBuilder

Page 229: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Constructor機能 コン ト ロールやオブジェ ク ト が作成される と きに、 そのコン ト ロール

が配置されるウ ィン ド ウの Open イベン トの前に発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ウ ィ ン ド ウが表示される前にコン ト ロールのプロパティ を設定したい場合は、 コン ト ロールの Constructor イベン トにスク リプ ト を記述できます。

ウ ィン ド ウやユーザ オブジェ ク トが開かれる と、 それらに配置されている各コン ト ロールの Constructor イベン トが発生します。 ウ ィン ド ウの Control プロパティ (配列)内のコン ト ロールの順序が Constructor イベン ト の発生順序を決定します。 ウ ィ ン ド ウのコン ト ロールにユーザオブジェ ク ト がある場合、 ユーザ オブジェ ク ト 内のすべてのコン トロールの Constructor イベン トが発生した後で、 ウ ィ ン ド ウ内の次のコン ト ロールの Constructor イベン トが発生します。

OpenUserObject 関数を呼び出して動的にユーザ オブジェ ク ト をウ ィ ンド ウに追加する場合、そのユーザ オブジェ ク ト の Constructor イベン トとそれを構成するすべてのコン ト ロールの Constructor イベン トが発生します。

CREATE 文を使用してク ラス (非表示) ユーザ オブジェ ク トのインスタンスを作成する場合、 ク ラス ユーザ オブジェ ク トの Constructor イベン トが発生します。

クラス ユーザ オブジェクト 変数のインスタンスの自動生成(AutoInstantiate)が設定されている場合、 変数がス コープ内に生成される と きにそのConstructor イベン ト が発生します。 つま り、 Constructor イベン トが発生するのは次の場合です。

• グローバル変数 : システムが開始する と き

• 共有変数 : 共有変数があるオブジェ ク トがロード される と き

• インスタンス変数 : インスタンス変数があるオブジェ ク トが作成される と き

イベン ト ID オブジェ ク ト

pbm_constructor すべてのオブジェ ク ト

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

Page 230: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Constructor

• ローカル変数 : ローカル変数を宣言した関数の実行が開始されると き

例 次の例は、データウ ィ ン ド ウ dw_1 のウ ィン ド ウが表示される前に、そのデータを検索します。

dw_1.SetTransObject(SQLCA)dw_1.Retrieve( )

関連項目 DestructorOpen

220 PowerBuilder

Page 231: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

DataChange機能 OLE サーバ アプリ ケーシ ョ ンが、OLE コン ト ロールにデータが変更さ

れたこ と を通知する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型のリ ターン コード。 無視されます。

関連項目 PropertyRequestEditPropertyChangedRenameViewChange

イベン ト ID オブジェク ト

pbm_omndatachange OLE

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

Page 232: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Deactivate

Deactivate機能 ウ ィン ド ウがアクティブでな く なる と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ウ ィン ド ウが閉じられる と、 Deactivate イベン トが発生します。

関連項目 ActivateShow

イベン ト ID オブジェ ク ト

pbm_deactivate ウ ィ ンド ウ

222 PowerBuilder

Page 233: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

DeleteAllItems機能 リ ス ト ビューの項目がすべて削除される と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、DeleteAllItems イベン ト で、 リ ス ト ビュー コン ト ロールにデフォル ト項目を追加し、項目がすべてな く ならないよ うにしています。

This.AddItem("Default item", 1)

関連項目 DeleteItemInsertItem

イベン ト ID オブジェ ク ト

pbm_lvndeleteallitems リ ス ト ビュー

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

Page 234: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DeleteItem

DeleteItemDeleteItem イベン トは、 オブジェ ク ト によって引数の内容が異な り ます。

構文 1 リス ト ビュー コン ト ロールに対して

機能 項目が削除される と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 DeleteItem イベン トの次の例は、削除された項目の項目番号を メ ッセージに表示します。

MessageBox(" メ ッセージ ", "項目 " + String(index) &+ "は削除されました。 ")

関連項目 DeleteAllItemsInsertItem

構文 2 ツリービュー コン ト ロールに対して

機能 項目が削除される と きに発生します。

イベン ト ID

オブジェ ク ト 構文

リ ス ト ビュー コン ト ロール 構文 1ツ リービュー コン ト ロール 構文 2

イベン ト ID オブジェ ク ト

pbm_lvndeleteitem リ ス ト ビュー

引数 説明

index Integer 型。 値に よ っ て渡 さ れ ま す (削除 さ れ たListViewItem のインデッ クス)。

イベン ト ID オブジェ ク ト

pbm_tvndeleteitem ツ リービュー

224 PowerBuilder

Page 235: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、 削除された項目の名前を メ ッセージ内に表示します。

TreeViewItem ll_tvi

This.GetItem(handle, ll_tvi)

MessageBox(" メ ッセージ ", String(ll_tvi.Label) &+ "は削除されました。 ")

引数 説明

handle Long 型。 値 に よ っ て 渡 さ れ ま す (削除 さ れ たTreeViewItem のハンドル)。

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

Page 236: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Destructor

Destructor機能 ユーザ オブジェ ク トやコン ト ロールが破棄される と き、 ウ ィ ン ド ウの

Close イベン トの直後に発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ウ ィ ン ド ウが閉じ られる と、 各コン ト ロールの Destructor イベン ト でコン ト ロールが破棄され、 メモ リから除去されます。 破棄されたコント ロールは、 ほかのスク リプ ト で参照できな くな り ます。 参照し よ うとする と実行時エラーが発生します。

関連項目 ConstructorClose

イベン ト ID オブジェ ク ト

pbm_destructor すべてのオブジェ ク ト

226 PowerBuilder

Page 237: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

DoubleClickedDoubleClicked イベン トは、オブジェ ク トによって引数の内容が異な ります。

データウ ィン ド ウ コン ト ロールの DoubleClicked イベン トについては、『データウ ィン ド ウ リ ファレンス』 マニュアルまたはオンライン ヘルプを参照して ください。

構文 1 リス トボッ クス、 ピクチャ リス トボッ クス、 リス ト ビュー、 タブ コン ト ロールに対して

機能 ユーザがコン ト ロールをダブルク リ ッ クする と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

オブジェク ト 構文

リ ス ト ボッ ク ス、 ピ クチャ リ ス ト ボッ ク ス、 リス ト ボッ クス、 タブ コン ト ロール

構文 1

ツ リービュー コン ト ロール 構文 2ウ ィン ド ウ 構文 3ほかのコン ト ロール 構文 4

イベン ト ID オブジェク ト

pbm_lbndblclk リ ス ト ボッ クス、 ピ クチャ リ ス ト ボッ クス

pbm_lvndoubleclicked リ ス ト ビュー

pbm_tcndoubleclicked タブ

引数 説明

index Integer 型。 値によって渡されます。 ユーザがダブルク リ ッ ク した ListViewItem のインデッ クス (タブ コン ト ロールの場合は、タブ ページのインデッ クス)。

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

Page 238: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DoubleClicked

解説 リ ス ト ビュー コン ト ロールをダブルク リ ッ クする と、DoubleClicked イベン トの前と後に、Clicked イベン ト が 2 回発生します (マウス ボタンが最初に放される と きに 1 回目の Clicked イベン ト が発生し、 マウスボタンが押されて 2 回目のク リ ッ クが行われる と DoubleClicked が発生し、 マウス ボタンが 2 回目に放される と きに再び Clicked イベン トが発生します)。

リス ト ビュー コン ト ロールに対する ItemActivate イベン トの使用リ ス ト ビュー コン ト ロールには、 DoubleClicked イベン ト の代わ りにItemActivate イベン ト を使用できます (OneClickActivate プロパテ ィ をFALSE に設定)。

リ ス ト ボッ クス と ピクチャ リ ス ト ボッ クスでは、 項目をダブルク リ ックする と、 SelectionChanged イベン ト も起動されます。

例 次の例は、 DoubleClicked イベン ト を使用して、 ダブルク リ ッ ク されたリ ス ト ビュー項目が編集できるよ うにします。

This.EditLabels = TRUE

関連項目 ClickedColumnClickItemActivateItemChangedItemChangingRightClickedRightDoubleClickedSelectionChangedSelectionChanging

構文 2 ツリービュー コン ト ロールに対して

機能 ユーザがコン ト ロールをダブルク リ ッ クする と きに発生します。

イベン ト ID

引数

イベン ト ID オブジェク ト

pbm_tvndoubleclicked ツ リービュー

引数 説明

handle Long 型。 値によって渡されます (ユーザがダブルクリ ッ ク した TreeViewItem のハン ドル)。

228 PowerBuilder

Page 239: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、 ツ リービュー項目をダブルク リ ッ クする と編集が開始できるよ うにします。

TreeViewItem ltvi_currentltvi_current = tv_1.FindItem(CurrentTreeItem!, 0)This.EditLabel(ltvi_current)

関連項目 ClickedRightClickedRightDoubleClickedSelectionChangedSelectionChanging

構文 3 ウィ ンドウに対して

機能 ユーザがウ ィ ン ド ウ上の未使用領域 (表示可能で使用可能なコン トロールの配置されていないエ リ ア) をダブルク リ ッ クする と きに発生します。

イベン ト ID

引数

イベン ト ID オブジェク ト

pbm_lbuttondblclk ウ ィ ンド ウ

引数 説明

flags UnsignedLong 型。 値によって渡されます (押下されたマウス ボタン と修飾キーの値の合計)。

値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 - 〔Shift〕• 8 - 〔Ctrl〕• 16 - 中マウス ボタン

Clicked イベン トで左マウス ボタンが押されない場合、 flags の値に 1 は加算されません。

flags の詳細については、284 ページの 「MouseMove」イベン トの構文 2 を参照して ください。

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

Page 240: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DoubleClicked

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 引数 xpos と ypos は、関数 PointerX と PointerY をウ ィン ド ウに対して呼び出したと きに返す値と同一の値を提供します。

関連項目 ClickedMouseDownMouseMoveMouseUpRButtonDown

構文 4 ほかのコン ト ロールに対して

機能 ユーザがコン ト ロールをダブルク リ ッ クする と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ド ロ ップダウン リ ス ト ボッ ク スに対する DoubleClicked イベン ト は、[ リ ス ト を表示]プロパティがオンになっている と きのみアクテ ィブにな り ます。

xpos Integer 型。 値によって渡されます (ウ ィ ン ド ウの左辺からポインタまでの距離で、 ピ クセル単位の値)。

ypos Integer 型。 値によって渡されます (ウ ィ ン ド ウの上辺からポインタまでの距離で、 ピ クセル単位の値)。

引数 説明

イベン ト ID オブジェク ト

pbm_bndoubleclicked グラフ、OLE、ピクチャ、ピ クチャ ハイパーリ ンク、スタテ ィ ッ ク テキス ト 、スタティ ッ ク ハイパーリ ンク

pbm_cbndblclk ド ロ ップダウン リ ス ト ボッ クス、ド ロ ップダウン ピクチャ リ ス ト ボッ クス

pbm_prndoubleclicked 水平プログレスバー、 垂直プログレスバー

pbm_rendoubleclicked リ ッチテキス ト エディ ッ ト

230 PowerBuilder

Page 241: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

関連項目 ClickedRButtonDown

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

Page 242: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DragDrop

DragDropDragDrop イベン ト は、 オブジェ ク ト によって引数の内容が異な り ます。

データ ウ ィ ン ド ウ コ ン ト ロールの DragDrop イベン ト については、『データウ ィ ンド ウ リ ファ レンス』 マニュアルまたはオンライン ヘルプを参照して ください。

構文 1 リス トボッ クス、 ピクチャ リス トボッ クス、 リス ト ビュー、 タブ コン ト ロールに対して

機能 ユーザがオブジェ ク ト をコン ト ロールの上にド ラ ッグして、 その上でマウス ボタンを放すと きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ド ラ ッグ関連のイベン トにおいて、 DraggedObject 関数を呼び出す必要がな くな り ました。 ド ラ ッグされているオブジェ クト を参照するには、 引数 source を使用して ください。

オブジェ ク ト 構文

リ ス ト ボッ クス、ピクチャ リ ス ト ボック ス、 リ ス ト ボ ッ ク ス、 タブ コ ン トロール

構文 1

ツ リービュー コン ト ロール 構文 2ウ ィ ンド ウやほかのコン ト ロール 構文 3

イベン ト ID オブジェ ク ト

pbm_lbndragdrop リ ス ト ボッ ク ス、 ピクチャ リ ス ト ボッ クス

pbm_lvndragdrop リ ス ト ビュー

pbm_tcndragdrop タブ

引数 説明

source DragObject 型。 値によって渡されます (ド ラ ッグされているコン ト ロールへの参照)。

index Integer 型。 値によって渡されます (ターゲッ ト となる ListViewItem のインデッ クス)。

232 PowerBuilder

Page 243: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

例 リ ス ト ビュー コン ト ロールについては、 BeginDrag イベン トの例を参照して ください。

次の例は、 ド ラ ッグされた リ ス ト ビュー項目を挿入して整列します。

This.AddItem(ilvi_dragged_object)This.Arrange( )

関連項目 BeginDragBeginRightDragDragEnterDragLeaveDragWithin

構文 2 ツリービュー コン ト ロールに対して

機能 ユーザがオブジェ ク ト をコン ト ロールの上にド ラ ッグして、 その上でマウス ボタンを放すと きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ド ラ ッグ関連のイベン ト において、 DraggedObject 関数を呼び出す必要がな く な り ました。 ド ラ ッグされているオブジェ クト を参照するには、 引数 source を使用して ください。

例 次の例は、ド ラ ッグされたオブジェ ク ト を、ド ロ ップしたツ リービュー項目に子と して挿入します。

TreeViewItem ltv_1This.GetItem(handle, ltv_1)This.SetDropHighlight(handle)This.InsertItemFirst(handle, itvi_drag_object)

イベン ト ID オブジェク ト

pbm_tvndragdrop ツ リービュー

引数 説明

source DragObject 型。 値によって渡されます (ド ラ ッグされているコン ト ロールへの参照)。

handle Long 型。 値によって渡されます (ターゲッ ト となるTreeViewItem へのハンドル)。

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

Page 244: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DragDrop

This.ExpandItem(handle)This.SetRedraw(TRUE)

関連項目 DragEnterDragLeaveDragWithin

構文 3 ウィ ンドウとほかのコン ト ロールに対して

機能 ユーザがオブジェ ク ト をコン ト ロールの上にド ラ ッグして、 その上でマウス ボタンを放すと きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 コン ト ロールの DragAuto プロパテ ィが TRUE の場合、ユーザがマウスボタンを押すと ド ラ ッグ操作が開始されます。

イベン ト ID オブジェク ト

pbm_bndragdrop チェ ッ クボッ ク ス、 コマンドボタン、 グラフ、 ピクチャ、 ピ クチャ ハイパーリ ンク、 ピクチャボタン、ラジオボタン

pbm_cbndragdrop ド ロ ップダウン リ ス ト ボッ ク ス、 ド ロ ップダウンピクチャ リ ス ト ボッ クス

pbm_endragdrop シングルライン エディ ッ ト 、エディ ッ ト マス ク、マルチライン エディ ッ ト 、スタテ ィ ッ ク テキス ト 、スタテ ィ ッ ク ハイパーリ ンク

pbm_omndragdrop OLEpbm_prndragdrop 水平プログレスバー、 垂直プログレスバー

pbm_rendragdrop リ ッチテキス ト エディ ッ ト

pbm_sbndragdrop 水平スク ロールバー、 水平ト ラ ッ クバー、 垂直スクロールバー、 垂直ト ラ ッ クバー

pbm_uondragdrop ユーザ オブジェク ト

pbm_dragdrop ウ ィ ン ド ウ

引数 説明

source DragObject 型。 値によって渡されます (ド ラ ッグされているコン ト ロールへの参照)。

234 PowerBuilder

Page 245: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

関数仕様の変更 ド ラ ッグ関連のイベン ト において、 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

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 THEN

li_Choice = MessageBox("削除 ", &" この行を削除しますか ?", Question!, YesNo!, 2)IF li_Choice = 1 THENldw_Source.DeleteRow(ll_RowToDelete)END IF

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

Page 246: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DragDrop

ELSEBeep(1)

END IF

ELSEBeep(1)

END IF

関連項目 DragEnterDragLeaveDragWithin

236 PowerBuilder

Page 247: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

DragEnter機能 ユーザがド ラ ッグしているオブジェ ク トがコン ト ロール内に入る と き

に発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ド ラ ッグ関連のイベン ト において、 DraggedObject 関数を呼び出す必要がな く な り ました。 ド ラ ッグされているオブジェ クト を参照するには、 引数 source を使用して ください。

イベン ト ID オブジェク ト

pbm_bndragenter チェッ クボッ クス、 コマン ドボタン、 グラフ、 ピクチャ、 ピ クチャ ハイパー リ ンク、 ピ クチャボタン、ラジオボタン

pbm_cbndragenter ド ロ ップダウン リ ス ト ボッ ク ス、ド ロ ップダウン ピクチャ リ ス ト ボッ ク ス

pbm_dwndragenter データウ ィン ド ウ

pbm_endragenter シングルライン エディ ッ ト 、 エディ ッ ト マス ク、 マルチライン エディ ッ ト 、スタテ ィ ッ ク テキス ト 、スタテ ィ ッ ク ハイパーリ ンク

pbm_lbndragenter リ ス ト ボッ クス、 ピ クチャ リ ス ト ボッ クス

pbm_lvndragenter リ ス ト ビュー

pbm_omndragenter OLEpbm_prndragenter 水平プログレスバー、 垂直プログレスバー

pbm_rendragenter リ ッチテキス ト エディ ッ ト

pbm_sbndragenter 水平スクロールバー、 水平ト ラ ッ クバー、 垂直スクロールバー、 垂直ト ラ ッ クバー

pbm_tcndragenter タブ

pbm_tvndragenter ツ リービュー

pbm_uondragenter ユーザ オブジェ ク ト

pbm_dragenter ウ ィ ンド ウ

引数 説明

source DragObject 型。 値によって渡されます (ド ラ ッグされているコン ト ロールへの参照)。

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

Page 248: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DragEnter

例 次の例は、 ピクチャ コン ト ロールの DragDrop イベン トのスク リプ トです。 ド ラ ッグされているオブジェク ト がピクチャ コン ト ロールの場合に、 ド ロ ップ側のピクチャ コン ト ロールに枠線を表示します。

IF source.TypeOf() = Picture! THENThis.Border = TRUE

END IF

関連項目 DragDropDragLeaveDragWithin

238 PowerBuilder

Page 249: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

DragLeave機能 ユーザがド ラ ッグしているオブジェ ク トがコン ト ロールを離れる と き

に発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ド ラ ッグ関連のイベン ト において、 DraggedObject 関数を呼び出す必要がな く な り ました。 ド ラ ッグされているオブジェ クト を参照するには、 引数 source を使用して ください。

例 次の例は、 ド ラ ッグされているコン ト ロールの名前をチェ ッ ク し、 それが cb_1 の場合はド ラ ッグ操作を中止します。

イベン ト ID オブジェ ク ト

pbm_bndragleave チェ ッ クボッ クス、 コマン ドボタン、 グラフ、 ピクチャ、 ピ クチャ ハイパーリ ンク、 ピ クチャボタン、ラジオボタン

pbm_cbndragleave ド ロ ップダウン リ ス ト ボッ クス、ド ロ ップダウン ピクチャ リ ス ト ボッ クス

pbm_dwndragleave データウ ィ ンド ウ

pbm_endragleave シングルラ イン エディ ッ ト 、 エディ ッ ト マス ク、 マルチラ イン エディ ッ ト 、 スタテ ィ ッ ク テキス ト 、 スタテ ィ ッ ク ハイパーリ ンク

pbm_lbndragleave リ ス ト ボッ クス、 ピクチャ リ ス ト ボッ クス

pbm_lvndragleave リ ス ト ビュー

pbm_omndragleave OLEpbm_prndragleave 水平プログレスバー、 垂直プログレスバー

pbm_rendragleave リ ッチテキス ト エディ ッ ト

pbm_sbndragleave 水平スク ロールバー、 水平 ト ラ ッ クバー、 垂直スクロールバー、 垂直 ト ラ ッ クバー

pbm_tcndragleave タブ

pbm_tvndragleave ツ リービュー

pbm_uondragleave ユーザ オブジェ ク ト

pbm_dragleave ウ ィ ンド ウ

引数 説明

source DragObject 型。 値によって渡されます (ド ラ ッグされているコン ト ロールへの参照)。

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

Page 250: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DragLeave

IF ClassName(source) = "cb_1" THENcb_1.Drag(Cancel!)

END If

次の例は、 ピクチャ コン ト ロールの DragDrop イベン トのスク リプ トです。 ド ラ ッグされているオブジェク ト がピクチャ コン ト ロールの場合に、 ド ロ ップ側のピクチャ コン ト ロールの境界の外側に出たら、 その枠線を非表示にします。

IF source.TypeOf() = Picture! THENThis.Border = TRUE

END IF

関連項目 DragDropDragEnterDragWithin

240 PowerBuilder

Page 251: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

DragWithinDragWithin イベン トは、 オブジェ ク ト によって引数の内容が異な り ます。

データ ウ ィ ン ド ウ コン ト ロールの DragWithin イベン ト については、『データウ ィン ド ウ リ ファレンス』 マニュアルまたはオンライン ヘルプを参照して ください。

構文 1 リス トボッ クス、 ピクチャ リス トボッ クス、 リス ト ビュー、 タブ コン ト ロールに対して

機能 ユーザがコン ト ロール内でオブジェ ク ト を ド ラ ッグしている と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

オブジェ ク ト 構文

リ ス ト ボッ クス、 ピクチャ リ ス ト ボック ス、 リ ス ト ボ ッ ク ス、 タブ コ ン トロール

構文 1

ツ リービュー コン ト ロール 構文 2ウ ィン ド ウやほかのコン ト ロール 構文 3

イベン ト ID オブジェク ト

pbm_lbndragwithin リ ス ト ボッ クス、 ピ クチャ リ ス ト ボッ クス

pbm_lvndragwithin リ ス ト ビュー

pbm_tcndragwithin タブ

引数 説明

source DragObject 型。 値によって渡されます (ド ラ ッグされているコン ト ロールへの参照)。

index Integer 型。 値によって渡されます (ポインタが位置している、リ ス ト ビュー コン ト ロールの ListViewItemへの参照)。

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

Page 252: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

DragWithin

解説 関数仕様の変更 ド ラ ッグ関連のイベン トにおいて、 DraggedObject 関数を呼び出す必要がな くな り ました。 ド ラ ッグされているオブジェ クト を参照するには、 引数 source を使用して ください。

例 次の例は、 ド ラ ッグされているオブジェ ク トが リ ス ト ビューの境界内に入る と、 リ ス ト ビューの背景色を変更します。

This.BackColor = RGB(128, 0, 128)

関連項目 DragDropDragEnterDragLeave

構文 2 ツリービュー コン ト ロールに対して

機能 ユーザがコン ト ロール内でオブジェ ク ト を ド ラ ッグしている と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ド ラ ッグ関連のイベン トにおいて、 DraggedObject 関数を呼び出す必要がな くな り ました。 ド ラ ッグされているオブジェ クト を参照するには、 引数 source を使用して ください。

例 次の例は、 ド ラ ッグされているオブジェ ク トがツ リービューの境界内に入る と、 ツ リービューの背景色を変更します。

This.BackColor = RGB(128, 0, 128)

関連項目 DragDropDragEnterDragLeave

イベン ト ID オブジェク ト

pbm_tvndragwithin ツ リービュー

引数 説明

source DragObject 型。 値によって渡されます (ド ラ ッグされているコン ト ロールへの参照)。

handle Long 型(ポインタが位置しているツ リービュー コント ロールの TreeViewItem への参照)。

242 PowerBuilder

Page 253: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

構文 3 ウィ ンドウとほかのコン ト ロールに対して

機能 ユーザがコン ト ロール内でオブジェ ク ト を ド ラ ッグしている と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 関数仕様の変更 ド ラ ッグ関連のイベン ト において、 DraggedObject 関数を呼び出す必要がな く な り ました。 ド ラ ッグされているオブジェ クト を参照するには、 引数 source を使用して ください。

関連項目 DragDropDragEnterDragLeave

イベン ト ID オブジェ ク ト

pbm_bndragwithin チェ ッ クボッ クス、 コマンドボタン、グラフ、 ピクチャ、 ピクチャ ハイパーリ ンク、 ピクチャボタン、ラジオボタン

pbm_cbndragwithin ド ロ ップダウン リ ス ト ボッ ク ス、 ド ロ ップダウンピクチャ リ ス ト ボッ クス

pbm_endragwithin シングルラ イン エディ ッ ト、エディ ッ ト マス ク、マルチラ イン エディ ッ ト 、 ス タテ ィ ッ ク テキス ト 、ス タテ ィ ッ ク ハイパーリ ンク

pbm_omndragwithin OLEpbm_prndragwithin 水平プログレスバー、 垂直プログレスバー

pbm_rendragwithin リ ッチテキス ト エディ ッ ト

pbm_sbndragwithin 水平スク ロールバー、水平ト ラ ッ クバー、垂直スクロールバー、 垂直ト ラ ッ クバー

pbm_uondragwithin ユーザ オブジェ ク ト

pbm_dragwithin ウ ィ ンド ウ

引数 説明

source DragObject 型。 値によって渡されます (ド ラ ッグされているコン ト ロールへの参照)。

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

Page 254: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

EndLabelEdit

EndLabelEditEndLabelEdit イベン ト は、 オブジェ ク ト によって引数の内容が異な ります。

構文 1 リス ト ビュー コン ト ロールに対して

機能 ユーザが項目ラベルの編集を終える と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 新しいテキス ト を項目ラベルにします。1 新しいテキス ト を項目ラベルにしません。

解説 ユーザがテキス ト を編集した後で 〔Enter〕 か 〔Tab〕 を押すと、 このイベン トが起動されます。

例 次の例は、 前のラベルと新しいラベルをシングルラインエディ ッ ト上に表示します。

ListViewItem lvi

sle_info.text = "編集終了 " &+ String(lvi.label) &+". Item changed to "+ String(newlabel)

関連項目 BeginLabelEdit

オブジェ ク ト 構文

リ ス ト ビ ュー コン ト ロール

構文 1

ツ リ ービ ュー コン ト ロール

構文 2

イベン ト ID オブジェク ト

pbm_lvnendlabeledit リ ス ト ビュー

引数 説明

index Integer 型。 ラベルを編集している ListViewItem のインデッ クスです。

newlabel String 型。ListViewItem の新しいラベルとなった文字列です。

244 PowerBuilder

Page 255: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

構文 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 型。 ラベルを編集している TreeViewItem のインデッ クスです。

newtext String 型。 TreeViewItem の新しいラベルとなった文字列です。

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

Page 256: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Error

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 型。 値によって渡されます (エラーを起こ したスク リ プ トのラ イン番号)。

246 PowerBuilder

Page 257: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

リ ターン コード なし (RETURN 文を使用しないでください)

解説 データウ ィン ド ウ と OLE オブジェ ク トは動的に参照されます。 これらのオブジェ ク トのデータやプロパテ ィを参照する ド ッ ト (.) 表記を用いた式は、実行時の状況によっては有効かも しれませんが、状況によっては無効かも しれません。 Error イベン トでは、 このよ うな動的な状況に対応できるよ うに、エラー復旧ロジッ クを記述するこ とができます。

また、 Error イベン ト で、 分散アプ リ ケーシ ョ ンのク ラ イアン ト コンポーネン ト の通信エラーに対応する こ とができます。 カスタム接続オブジェ ク トの Error イベン トにおいて、ク ラ イアン ト とサーバ間の通信中にエラーが発生したと きに、 どのよ う なアクシ ョ ンを と るか指示する こ とができます。

action ExceptionAction 型。 参照によって渡されます。

エラー発生後のアプ リ ケーシ ョ ンのアクシ ョ ンを指定する値です。 値は以下のとおりです。

• ExceptionFail! - このスク リプ トが実装されてなかったものと して失敗させます。 エラー状態が、アクテ ィブなイベン ト ハンド ラを起動します。ない場合は、 SystemError イベン ト を起動します。

• ExceptionIgnore! - このエラーを無視して、 何もエラーが起こ らなかったものと して戻り ます (エラーの原因となった状態が別のエラーを起こす可能性があるので、 このオプシ ョ ンは注意して使用しなければな り ません)。

• ExceptionRetry! - OLE サーバの準備ができてなかった場合、 関数を再実行したり、 式を再評価します。 このオプシ ョ ンはデータウ ィン ド ウでは無効です。

• ExceptionSubstituteReturnValue! - OLE サーバやデータウ ィン ド ウで返される値の代わりに、引数returnvalue で指定された値を使用して、 エラー状態を取り消します。

returnvalue Any 型。参照によって渡されます (データ型は、OLEサーバやデータ ウ ィ ン ド ウが返すはずだった値のデータ型になり ます)。 この値は、引数 action が ExceptionSubstituteReturnValue!のと きに使用されます。

引数 説明

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

Page 258: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Error

エラーがアプリ ケーシ ョ ンにと って重大でない場合は、Error イベン トでデフォル ト値を代用する値を指定できます。 Error イベン ト の引数は、 デバッグに役立つ情報も提供します。 たとえば、 データウ ィ ン ドウのデータ式のよ うに実行時に評価される式は、 コンパイ ラでチェ ックできませんが、Error イベン ト引数を使ってデバッグするこ とができます。

戻り値をいつ代用するかExceptionSubstituteReturnValue! アクシ ョ ンは、式の最後の部分でエラーが起こったと きに、 デフォル ト の戻り値を別の値で代用できます。 式の途中でエラーが起きたと きは、ExceptionSubstituteReturnValue! を使用して戻り値を代用しないでください。 代用された戻り値が、 参照されなかったオブジェ ク トのデータ型と一致しないと、 システム エラーが起こ り ます。

ExceptionSubstituteReturnValue! アクシ ョ ンは、データ式のエラー処理に役立ちます。

データウ ィ ン ド ウの場合、 データ式やプロパテ ィ式を評価している ときにエラーが起こる と、 エラーは以下のよ うに処理されます。

1 Error イベン トが発生します。

2 Error イベン ト にス ク リ プ ト が記述されていなかった り、 そのaction 引数に ExceptionFail! が設定されている と、 DWRuntimeErrorまたはその RuntimeError 祖先のアクテ ィブな例外ハンド ラが起動します。

3 例外ハンド ラがないか、 既存の例外ハン ド ラがその例外を処理しない場合、 SystemError イベン トが発生します。

4 SystemError イベン トにスク リプ トが記述されていない場合は、 アプ リ ケーシ ョ ン エラーが発生して、 アプ リ ケーシ ョ ンは中断されます。

分散アプ リ ケーシ ョ ンのク ラ イアン ト コンポーネン ト でのエラーも、データウ ィン ド ウのエラーと同じ処理が行われます。

OLE コン ト ロールでのエラー処理についての詳細は、ExternalExceptionイベン ト を参照して ください。 データウ ィ ン ド ウ オブジェ ク ト のデータ式とプロパテ ィ式についての詳細は、 『データウ ィ ン ド ウ リ フ ァレンス』 マニュアルまたはオンライン ヘルプを参照して ください。

多層アプ リ ケーシ ョ ンでの通信エラーの処理については、『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルの分散アプ リ ケーシ ョ ンの説明を参照して ください。

248 PowerBuilder

Page 259: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

例 次の例は、 発生したエラーに関する情報を表示し、 スク リプ トの実行を継続します。

MessageBox(" エラー番号 " + string(errornumber)&+ "が発生しました ", "Errortext: " + String(errortext))

action = ExceptionIgnore!

関連項目 『データウ ィン ド ウ リ ファレンス』 マニュアルまたはオンライン ヘルプの DBErrorExternalExceptionSystemError

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

Page 260: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ExternalException

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)。

250 PowerBuilder

Page 261: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

リ ターン コード なし (RETURN 文を使用しないでください)

解説 OLE オブジェ ク ト は動的に参照されます。 これらのオブジェ ク ト のデータやプロパテ ィ を参照する式は、 実行時の状況によっては有効かも しれませんが、 状況によっては無効かも しれません。 式がサーバ上で例外処理を起こ した と きは、 ExternalException イベン ト が起動されます。 ExternalException イベン ト を使って、 OLE サーバ上で起こったエラーに関する情報を取得できます。

サーバが何を例外処理と して考慮するかは、 サーバによって定義されます。 データ型の不一致のよ うに、 エラーによっては、 Error イベン トを起動しますが、 例外処理は起こ しません。 場合によっては、 例外処理は起こすもののエラーとは言えないものもあ り ます。 サーバのマニュアルを参照して例外処理の原因を判別して ください。

OLE サーバへの呼び出しによって例外処理が起こる と、 以下のよ うに例外が処理されます。

1 ExternalException イベン トが発生します。

action ExceptionAction 型。 参照によって渡されます。

エラー発生後のアプリ ケーシ ョ ンのアクシ ョ ンを指定する値です。 値は以下のとおりです。

• ExceptionFail! - このスク リプ トが実装されてなかった も の と し て失敗させます。 エ ラー状態がSystemError イベン ト を起動します。

• ExceptionIgnore! - このエラーを無視して、 何もエラーが起こ らなかったものと して戻り ます (エラーの原因となった状態が別のエラーを起こす可能性があるので、 このオプシ ョ ンは注意して使用しなければなり ません)。

• ExceptionRetry! - OLE サーバの準備ができてなかった場合、 関数を再実行したり、 式を再評価します。

• ExceptionSubstituteReturnValue! - OLE サーバやデータ ウ ィ ン ド ウ で 返 さ れ る 値 の代 わ り に、 引数returnvalue で指定された値を使用して、 エラー状態を取り消します。

returnvalue Any 型。 参照によって渡されます。

データ型は、OLE サーバやデータウ ィ ン ド ウが返すはずだった値のデータ型にな り ます。 この値は、 引数 actionの値が ExceptionSubstituteReturnValue! のと きに使用されます。

引数 説明

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

Page 262: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ExternalException

2 ExternalException イベン トにスク リプ トが記述されていなかったり、その action 引数に ExceptionFail! が設定されている と、Error イベン トが発生します。

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

252 PowerBuilder

Page 263: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

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 ファ イル名

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

Page 264: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

GetFocus

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_prnsetfocus 水平プログレスバー、 垂直プログレスバー

pbm_rensetfocus リ ッチテキス ト エディ ッ ト

pbm_sbnsetfocus 水平スク ロールバー、 水平 ト ラ ッ クバー、 垂直ス クロールバー、 垂直 ト ラ ッ クバー

pbm_tcnsetfocus タブ

pbm_tvnsetfocus ツ リービュー

254 PowerBuilder

Page 265: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

例 2 例 1 で、 ユーザが 〔Tab〕 ではな く、 ク リ ッ クによってシングルライン エディ ッ トに移動した場合、 コン ト ロールはフォーカスを得ますが、 テキス トは選択 (ハイ ラ イ ト表示) されません。 テキス ト を選択するユーザ イベン ト を定義して、GetFocus イベン トにそのユーザ イベン ト をポス トする と、 ユーザが 〔Tab〕 で移動しても ク リ ッ ク しても、と もにハイ ライ ト表示されるよ うにな り ます。この場合、次のコードを GetFocus イベン ト に記述します。

This. EVENT POST ue_select( )

また、 次のコードを ue_select ユーザ イベン トに記述しておきます。

This.SelectText(1, Len(This.Text))

関連項目 ClickedLoseFocus

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

Page 266: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Help

Help機能 ユーザが、 タ イ トル バーから疑問符ボタンを任意のメニュー項目やコ

ン ト ロールまでド ラ ッグしてク リ ッ ク したと き、 または任意のコン トロールをク リ ッ ク (フォーカスを移動) してから 〔F1〕 を押したと きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 疑問符ボタンは、レスポンス ウ ィン ド ウのタイ トル バーにのみ表示されます。 このイベン ト を有効にするためには、 ContextHelp プロパテ ィを TRUE に設定する必要があ り ます。

個々の メ ニュー項目と コン ト ロールに対してヘルプ メ ッセージを記述できます。 PowerBuilder によって、 関連付けられた Windows のメ ッセージが、 該当する メニュー項目またはコン ト ロールに割り当てられます。

例 次の例は、 ユーザが疑問符ボタンを ト ラ ッ クバー コン ト ロールの上にド ラ ッグしてク リ ッ ク したと きに、 メ ッセージ ボッ クスを開きます。

MessageBox("文脈ヘルプ メ ッセージ ", &" ト ラ ッ クバー スライダを移動して " & + "~r~n データウィン ドウの大きさを変更します。 ")

関連項目 ShowHelp

イベン ト ID オブジェ ク ト

pbm_help ウ ィ ンド ウ、 メニュー、 DragObject

引数 説明

xpos Integer 型。 値によって渡されます (画面の左辺からヘルプ メ ッセージまでの距離で、 PowerBuilder 単位系の値)。

ypos Integer 型。 値によって渡されます (画面の上辺からヘルプ メ ッセージまでの距離で、 PowerBuilder 単位系の値)。

256 PowerBuilder

Page 267: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Hide機能 ウ ィン ド ウが非表示状態になる直前に発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Hide イベン ト は、 MDI フレーム上のシー ト を閉じ る と きに発生します。 メ イン ウ ィ ンド ウ、 レスポンス ウ ィン ド ウ、ポップアップ ウ ィ ンド ウを閉じ る と きには発生しません。

関連項目 CloseShow

イベン ト ID オブジェ ク ト

pbm_hidewindow ウ ィ ンド ウ

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

Page 268: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

HotLinkAlarm

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)

イベン ト ID オブジェ ク ト

pbm_ddedata ウ ィン ド ウ

258 PowerBuilder

Page 269: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Idle機能 アプ リ ケーシ ョ ン オブジェ ク ト のス ク リプ ト内で Idle 関数 Idle_func

が呼び出され、 マウスまたはキーボードの活動がないまま指定した秒数が経過したと きに発生します。

イベン ト ID

引数 なし

リ ターン コード なし (RETURN 文を使用しないでください)

例 次のステート メ ン トは、 ユーザが 300 秒間何のアクティ ビティ も行わないと、 Idle イベン ト を起動します。

Idle(300)

Idle イベン トでは、たとえば、次のステート メ ン トによってアプ リ ケーシ ョ ンを終了します。

HALT CLOSE

イベン ト ID オブジェク ト

なし アプ リ ケーシ ョ ン

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

Page 270: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

InputFieldSelected

InputFieldSelected機能 リ ッチテキス ト エディ ッ ト コ ン ト ロールにおいて、 ユーザが入力

フ ィールドをダブルク リ ッ クするか 〔Enter〕 を入力して、 フ ィールドのデータを編集しよ う とする と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次のス ク リ プ ト は、 リ ッ チテキ ス ト エデ ィ ッ ト コ ン ト ロールのInputFieldSelected イベン ト に対する ものです。 ユーザが編集しよ う としている入力フ ィールドのデータを取得します。

string ls_fieldvaluels_fieldvalue = This.InputFieldGetData(fieldname)

関連項目 PictureSelected

イベン ト ID オブジェ ク ト

pbm_reninputfieldselected リ ッチテキス ト エディ ッ ト

引数 説明

fieldname String 型。値によって渡されます (選択された入力フ ィールドの名前)。

260 PowerBuilder

Page 271: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

InsertItem機能 リ ス ト ビューに項目を挿入する と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、 挿入された項目のラベルと インデッ クスを表示します。

ListViewItem lviThis.GetItem(index, lvi)sle_info.Text = "Inserted "+ String(lvi.Label) &

+ " into position " &+ String(index)

関連項目 DeleteItem

イベン ト ID オブジェ ク ト

pbm_lvninsertitem リ ス ト ビュー

引数 説明

index Integer 型。 リ ス ト ビューに挿入し よ う とする ListViewItem のインデッ クス

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

Page 272: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ItemActivate

ItemActivate機能 リ ス ト ビュー項目 (ListViewItem) がク リ ッ クまたはダブルク リ ッ ク さ

れたと きに発生します。実際の起動のし くみは、 OneClickActivate プロパティ と TwoClickActivate プロパテ ィの設定に依存します。

イベン ト ID

引数

リ ターン コード 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

イベン ト ID オブジェ ク ト

pbm_lvnitemactivate リ ス ト ビュー

引数 説明

Index Integer 型。 リ ス ト ビ ュ ー に 挿 入 し よ う と す るListViewItem のインデッ ク ス

OneClickActivate TwoClickActivate 起動のし くみ

True True シングル ク リ ッ ク

True False シングル ク リ ッ ク

False True 選択された項目に対するシングル ク リ ッ ク または選択されていない項目に対するダブルク リ ック

False False ダブルク リ ッ ク

262 PowerBuilder

Page 273: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

関連項目 ItemChangedItemChanging

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

Page 274: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ItemChanged

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 変更している ListViewItem のインデッ クスです。

focuschanged Boolean 型 (ListViewItem のフォーカスが変更されたかど うかを示します)。

hasfocus Boolean 型 (ListViewItem のフォーカスがあったかどうかを示します)。

selectionchange Boolean 型 (ListViewItem の選択状態に変更があったかど うかを示します)。

selected Boolean 型 (ListViewItem が選択されているかど うかを示します)。

otherchange Boolean 型 (ListViewItem のフォーカスや選択状態に変更があったかど うかを示します)。

264 PowerBuilder

Page 275: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

ItemChanging機能 リ ス ト ビューが変更される直前に発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 ItemChanged

イベン ト ID オブジェ ク ト

pbm_lvnitemchanging リ ス ト ビュー

引数 説明

index 変更している項目のインデッ クス

focuschange Boolean 型 (ListViewItem のフォーカスが変更されたかど うかを示します)。

hasfocus Boolean 型 (ListViewItem のフォーカスがあったかどうかを示します)。

selectionchange Boolean 型 (ListViewItem の選択状態に変更があったかど うかを示します)。

selected Boolean 型 (ListViewItem が選択されているかど うかを示します)。

otherchange Boolean 型 (ListViewItem のフォーカスや選択状態に変更があったかど うかを示します)。

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

Page 276: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ItemCollapsed

ItemCollapsed機能 ツ リービュー項目のツ リー表示を閉じたと きに発生します。

イベン ト ID

引数

リ ターン コード 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

イベン ト ID オブジェ ク ト

pbm_tvnitemcollapsed ツ リービュー

引数 説明

handle Long 型。 参照によって渡されます (ツ リー表示を閉じた TreeViewItem のハンドル)。

266 PowerBuilder

Page 277: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

ItemCollapsing機能 ツ リービュー項目のツ リー表示を閉じている と きに発生します。

イベン ト ID

引数

リ ターン コード 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

イベン ト ID オブジェ ク ト

pbm_tvnitemcollapsing ツ リービュー

引数 説明

handle Long 型。 参照によって渡されます (ツ リー表示を閉じる TreeViewItem のハンドル)。

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

Page 278: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ItemExpanded

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 型。 参照によ って渡されます (展開されたTreeViewItem のハンドル)。

268 PowerBuilder

Page 279: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

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 型。 参照によ って渡されます (展開されるTreeViewItem のハン ドル)。

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

Page 280: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ItemPopulate

ItemPopulate機能 ツ リービュー項目のツ リー表示が最初に拡張される際、 表示内容を生

成している と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 次の例は、 表示内容を生成しているツ リービュー項目の名前をシングルライン エディ ッ ト に表示します。

TreeViewItem tvi

This.GetItem(handle, tvi)sle_get.Text = "Populating TreeView item " &

+ String(tvi.Label) + " with children"

関連項目 ItemExpanding

イベン ト ID オブジェ ク ト

pbm_tvnitempopulate ツ リービュー

引数 説明

handle Long 型。 参照によって渡されます (表示内容を生成している TreeViewItem のハンドル)。

270 PowerBuilder

Page 281: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Key機能 ユーザがキーを押すと き、 発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。1 キーを処理しません ( リ ッチテキス ト エディ ッ ト コン ト ロールだけに適用されます)。

解説 PowerBuilder コン ト ロールによってはキース ト ロークを取得する ものがあ り ます。 この場合、ウ ィ ンド ウは Key イベン ト を受け取れません。この種のコン ト ロールには、 リ ス ト ビュー、ツ リービュー、 タブ、 リ ッチテキス ト エディ ッ ト コン ト ロール、 データウ ィ ン ド ウ コン ト ロールのエディ ッ ト コン ト ロールがあ り ます。 これらのコン ト ロールにフォーカスがある と きは、 コン ト ロールのイベン トにス ク リプ ト を記述して、 キース ト ロークの内容に対応する こ とができます。 キース トロークに対して、 あらかじめ定義されたイベン ト がない場合は、 pbmコード と対応付けたユーザ イベン ト を定義する こ とができます。

イベン ト ID オブジェ ク ト

pbm_lvnkeydown リ ス ト ビュー

pbm_renkey リ ッチテキス ト エディ ッ ト

pbm_tcnkeydown タブ

pbm_tvnkeydown ツ リービュー

pbm_keydown ウ ィ ンド ウ

引数 説明

key KeyCode 型。 値によって渡されます。 KeyCode カタログ データ型の値は、 KeyA! や KeyF1! のよ うに、 どのキーが押されたかを示します。

keyflags UnsignedLong 型。 値によって渡されます (キーと ともに押された修飾キー)。 値は以下のとおりです。

1 - 〔Shift〕2 - 〔Ctrl〕3 - 〔Shift〕 と 〔Ctrl〕

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

Page 282: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Key

リ ッチテキス ト エディ ッ ト コン ト ロールの場合、 キーを押すこ とによって文書に書式を設定できます。 たとえば、 〔Ctrl〕 + 〔B〕 は選択箇所のフォン ト を太字にします。リ ターン コードに 1 を指定する と、キーに関連付けられた書式設定が行われません。

ユーザが修飾キーを押し、そのキーを押したままほかのキーを押すと、Key イベン トが 2 度発生します。 1 度目は修飾キーが押されたと きで、2 度目は別のキーが押されたと きです。 ユーザが 2 度目のキーを押す前に修飾キーを放すか放さ ないかで、 2 度目のイベン ト 発生時のkeyflags の値が異な り ます。

ユーザがキーを放すと きは、 Key イベン トは発生しません。 このため、ユーザが修飾キーを放しても、 別のキーが押されるまで修飾キーの状況はわかり ません。

例 次の例は、 ユーザが 〔Shift〕 か 〔Ctrl〕 を押さないで 〔F1〕 や 〔F2〕 を押すと、 ビープ音を鳴らします。

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

272 PowerBuilder

Page 283: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

LineDown機能 ユーザが垂直ス ク ロールバーの下向き矢印をク リ ッ クする と きに発生

します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが垂直ス ク ロールバーを ク リ ッ ク しても、 ス ク ロールバーのPosition プロパテ ィを変更するス ク リプ ト を記述しなければ、何も起こり ません。 ス ク ロールバーの矢印の場合は、 LineUp イベン ト とLineDown イベン ト を使用します。ス ク ロールバーの背景でスク ロールボッ クス (つまみ) の上下をク リ ッ クする場合は、 PageUp イベン ト とPageDown イベン ト を使用します。ス ク ロールボッ クス自身を ド ラ ッグする場合は Moved イベン ト を使用します。

例 次の例は LineDown イベン ト のスク リプ ト です。ユーザが垂直スク ロールバーの下矢印をク リ ッ クする と、 ス ク ロールボッ クスを下に移動します。また、スタテ ィ ッ ク テキス ト コン ト ロール st_1 に結果の位置を表示します。

IF This.Position > This.MaxPosition - 1 THENThis.Position = MaxPosition

ELSEThis.Position = This.Position + 1

END IF

st_1.Text = "LineDown " + String(This.Position)

関連項目 LineLeftLineRightLineUpPageDown

イベン ト ID オブジェ ク ト

pbm_sbnlinedown 垂直スク ロールバー、 垂直 ト ラ ッ クバー

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

Page 284: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

LineLeft

LineLeft機能 ユーザが水平ス ク ロールバーの左向き矢印をク リ ッ クする と きに発生

します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが水平ス ク ロールバーを ク リ ッ ク しても、 ス ク ロールバーのPosition プロパテ ィ を変更するスク リプ ト を記述しなければ、何も起こり ません。 ス ク ロールバーの矢印の場合は、 LineLeft イベン ト とLineRight イベン ト を使用します。 スク ロールバーの背景でスク ロールボッ クス (つまみ) の上下をク リ ッ クする場合は、 PageLeft イベン トと PageRight イベン ト を使用します。ス クロールボッ クス自身を ド ラ ッグする場合は Moved イベン ト を使用します。

例 次の例は LineLeft イベン トのス ク リプ トです。 ユーザが水平ス ク ロールバーの左矢印をク リ ッ クする と、 ス ク ロールボッ クスを左に移動します。また、スタティ ッ ク テキス ト コン ト ロール st_1 に結果の位置を表示します。

IF This.Position < This.MinPosition + 1 THENThis.Position = MinPosition

ELSEThis.Position = This.Position - 1

END IF

st_1.Text = "LineLeft " + String(This.Position)

関連項目 LineDownLineRightLineUpPageLeft

イベン ト ID オブジェ ク ト

pbm_sbnlineup 水平スク ロールバー、 水平 ト ラ ッ クバー

274 PowerBuilder

Page 285: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

LineRight機能 ユーザが水平ス ク ロールバーの右向き矢印をク リ ッ クする と きに発生

します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが水平ス ク ロールバーを ク リ ッ ク しても、 ス ク ロールバーのPosition プロパテ ィを変更するス ク リプ ト を記述しなければ、何も起こり ません。 ス ク ロールバーの矢印の場合は、 LineLeft イベン ト とLineRight イベン ト を使用します。 ス ク ロールバーの背景でスク ロールボッ クス (つまみ) の上下をク リ ッ クする場合は、 PageLeft イベン トと PageRight イベン ト を使用します。スク ロールボッ ク ス自身を ド ラ ッグする場合は Moved イベン ト を使用します。

例 次の例は LineRight イベン トのス ク リプ トです。ユーザが水平スク ロールバーの右矢印をク リ ッ クする と、 ス ク ロールボッ クスを右に移動します。また、スタテ ィ ッ ク テキス ト コン ト ロール st_1 に結果の位置を表示します。

IF This.Position > This.MaxPosition - 1 THENThis.Position = MaxPosition

ELSEThis.Position = This.Position + 1

END IF

st_1.Text = "LineRight " + String(This.Position)

関連項目 LineDownLineLeftLineUpPageRight

イベン ト ID オブジェ ク ト

pbm_sbnlinedown 水平スク ロールバー、 水平 ト ラ ッ クバー

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

Page 286: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

LineUp

LineUp機能 ユーザが垂直ス ク ロールバーの下向き矢印をク リ ッ クする と きに発生

します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが垂直ス ク ロールバーを ク リ ッ ク しても、 ス ク ロールバーのPosition プロパテ ィ を変更するスク リプ ト を記述しなければ、何も起こり ません。 ス ク ロールバーの矢印の場合は、 LineUp イベン ト とLineDown イベン ト を使用します。スク ロールバーの背景でスク ロールボッ クス (つまみ) の上下をク リ ッ クする場合は、 PageUp イベン ト とPageDown イベン ト を使用します。スク ロールボッ クス自身を ド ラ ッグする場合は Moved イベン ト を使用します。

例 次の例は LineUp イベン ト のスク リプ ト です。ユーザが垂直スク ロールバーの上矢印をク リ ッ クする と、 ス ク ロールボッ クスを上に移動します。また、スタティ ッ ク テキス ト コン ト ロール st_1 に結果の位置を表示します。

IF This.Position < This.MinPosition + 1 THENThis.Position = MinPosition

ELSEThis.Position = This.Position - 1

END IF

st_1.Text = "LineUp " + String(This.Position)

関連項目 LineDownLineLeftLineRightPageUp

イベン ト ID オブジェ ク ト

pbm_sbnlineup 垂直スク ロールバー、 垂直 ト ラ ッ クバー

276 PowerBuilder

Page 287: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

LoseFocus機能 コン ト ロールがフォーカスを失う直前 (アクテ ィブでな く なる前) に

発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが別のコン ト ロールにフォーカスを移動する と きに何か処理を行いたい場合に、 コン ト ロールの LoseFocus イベン ト にス ク リプ ト を記述します。

コン ト ロール内に編集可能なテキス トがあれば、 フォーカスが失われる こ とによって Modified イベン トが発生します。

リ ッチテキス ト エディ ッ ト コン ト ロールでは、ユーザが リ ッチテキスト エデ ィ ッ ト コ ン ト ロールのツールバーを ク リ ッ クする と、LoseFocus イベン ト が発生します。 しかし、 コン ト ロールは実際にはフォーカスを失いません。

イベン ト ID 説明

pbm_controltypekillfocus UserObject (標準ビジュアル ユーザ オブジェ ク トのみ)

pbm_bnkillfocus チェ ッ ク ボ ッ ク ス、 コマン ド ボタ ン、 グ ラ フ、OLE、 ピ クチャ、 ピクチャ ハイパーリ ンク、 ピクチャボタン、 ラジオボタン、スタテ ィ ッ ク テキスト 、 スタテ ィ ッ ク ハイパーリ ンク

pbm_cbnkillfocus ド ロ ップダウン リ ス ト ボッ クス、ド ロ ップダウンピクチャ リ ス ト ボッ クス

pbm_dwnkillfocus データウ ィ ンド ウ

pbm_enkillfocus シングルライン エディ ッ ト、 エディ ッ ト マス ク、マルチライン エディ ッ ト

pbm_lbnkillfocus リ ス ト ボッ クス、 ピクチャ リ ス ト ボッ クス

pbm_lvnkillfocus リ ス ト ビュー

pbm_prnkillfocus 水平プログレスバー、 垂直プログレスバー

pbm_renkillfocus リ ッチテキス ト エディ ッ ト

pbm_sbnkillfocus 水平スク ロールバー、 水平ト ラ ッ クバー、 垂直スク ロールバー、 垂直ト ラ ッ クバー

pbm_tcnkillfocus タブ

pbm_tvnkillfocus ツ リービュー

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

Page 288: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

LoseFocus

MessageBox 関数はフォーカスを取得してしま うので、 LoseFocus イベン ト のよ うにフォーカスが変更される と きに、 MessageBox 関数を使用すべきではあ り ません。 その代わりに、 ウ ィ ン ド ウのタイ トルまたはマルチラ イン エディ ッ ト コン ト ロールにメ ッセージを表示する こ とができます。

例 例 1 次のス ク リ プ ト は、 シン グル ラ イ ン エデ ィ ッ ト sle_town のLoseFocus イベン トのものです。テキス ト ボッ クスを空のままにしておく と、 ユーザに情報を入力するよ うに通知します。

IF sle_town.Text = "" THEN

st_status.Text = "町の名前が指定されていません。 "END IF

例 2 次のス ク リ プ トは、 データウ ィ ン ド ウ コン ト ロール dw_emp のLoseFocus イベン トのものです。 ス ク リプ ト を記述したユーザ イベント を起動する こ とによ り、 ユーザが入力した最後の項目が入力条件則に則っているかど うか調べます。

次のステー ト メ ン トによってユーザ イベン ト ue_accept が起動されます。

dw_emp.EVENT ue_accept( )

ユーザ イベン ト ue_accept の次のステート メ ン トは、 AcceptText 関数を呼び出します。

dw_emp.AcceptText( )

次のス ク リ プ ト は、 リ ッ チテキ ス ト エデ ィ ッ ト コ ン ト ロールの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

278 PowerBuilder

Page 289: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Modified機能 コン ト ロールのテキス トが変更されたと きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 単純なテキス ト コン ト ロールの場合、 ユーザが 〔Enter〕 を押した り 、〔Tab〕 を押して別のコン ト ロールへ移動して、 編集を終えたこ と を示したと きに、 Modified イベン トが発生します。

リ ッチテキス ト エディ ッ ト コン ト ロールの場合、Modified プロパテ ィの値によって Modified イベン トが発生する状況が変わり ます。 プロパテ ィが FALSE の場合、 リ ッチテキス ト エディ ッ ト コン ト ロール上の文書が最初に変更される と きに、 Modified イベン ト が発生します。 この変更によってプロパティの値は TRUE に設定され、 文書を変更しても Modified イベン トが起こ らな くな り ます。 プロパティ を FALSE に戻すと、 最初の状態と同じにな り、 次の変更に対しては Modified イベントが発生します。

リ ッチテキス ト エディ ッ ト コン ト ロールに文書を挿入した後などでModified プロパテ ィ を FALSE に再設定する と、挿入したその文書に変更が加えられる と Modified イベン ト を起動する こ とができます。 ユーザが文書を変更したかど うか判別するためには、 文書を開く スク リプトで Modified プロパティ を FALSE に設定します。 ユーザが編集を開始する と、 プロパテ ィは TRUE に再設定され、 Modified イベン ト が発生します。

Modified イベン トは、 LoseFocus イベン トの前に発生します。

イベン ト ID オブジェ ク ト

pbm_cbnmodified ド ロ ップダウン リ ス ト ボッ クス、ド ロ ップダウン ピクチャ リ ス ト ボッ クス

pbm_enmodified シングルラ イン エディ ッ ト、 エディ ッ ト マス ク、 マルチラ イン エディ ッ ト

pbm_renmodified リ ッチテキス ト エディ ッ ト

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

Page 290: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Modified

例 次の例は、 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

これは現実的な例ではあ り ません。 選択肢が 3 つの場合はリ ス ト ボック スやラジオボタンの方が適しています。

関連項目 LoseFocus

280 PowerBuilder

Page 291: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

MouseDownMouseDown イベン トは、オブジェ ク トによって引数の内容が異な り ます。

構文 1 リ ッチテキス ト エディ ッ ト コン ト ロールに対して

機能 ユーザが リ ッチテキス ト エディ ッ ト コン ト ロール上で左マウス ボタンを押すと きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 左マウス ボタンを押すと、 リ ッチテキス ト エディ ッ ト コン ト ロールの MouseDown イベン ト は、 テキス ト をシングルラ イン エディ ッ トsle_1 に割り当てます。

sle_1.text = "Mouse Down"

関連項目 ClickedMouseMoveMouseUp

構文 2 ウィ ンドウに対して

機能 ウ ィ ン ド ウ上の未使用領域 (表示可能で使用可能なオブジェ ク ト が存在していない領域) でユーザが左マウス ボタンを押すと きに発生します。

オブジェク ト 構文

リ ッ チテキス ト エデ ィ ッ ト コ ン トロール

構文 1

ウ ィン ド ウ 構文 2

イベン ト ID オブジェ ク ト

pbm_renlbuttondown リ ッチテキス ト エディ ッ ト

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

Page 292: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

MouseDown

イベン ト 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

sle_mkey.Text = "No modifier keys pressed"CASE 5

sle_mkey.Text = "SHIFT key pressed"CASE 9

sle_mkey.Text = "CONTROL key pressed"

イベン ト ID オブジェ ク ト

pbm_lbuttondown ウ ィ ンド ウ

引数 説明

flags UnsignedLong 型。 値によって渡されます (押下されたマウス ボタン と修飾キーの値の合計)。 値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 - 〔Shift〕• 8 - 〔Ctrl〕• 16 - 中マウス ボタン

MouseDown イベン トで左マウス ボタンが押下されない場合、 flags の値に 1 は加算されません。 flags の詳細については、 284 ページの 「MouseMove」 イベン トの構文 2を参照して ください。

xpos Integer 型。 値によって渡されます (ウ ィ ンド ウの左辺からポインタまでの距離で、 ピ クセル単位の値)。

ypos Integer 型。 値によって渡されます (ウ ィ ンド ウの上辺からポインタまでの距離で、 ピ クセル単位の値)。

282 PowerBuilder

Page 293: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

CASE 13sle_mkey.Text = "SHIFT and CONTROL keys pressed"

END CHOOSE

関連項目 ClickedMouseMoveMouseUp

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

Page 294: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

MouseMove

MouseMoveMouseMove イベン トは、オブジェ ク トによって引数の内容が異な り ます。

構文 1 リ ッチテキスト エディ ッ ト コン ト ロールに対して

機能 リ ッチテキス ト エディ ッ ト コン ト ロール上でマウス ポインタが動かされる と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 ClickedMouseDownMouseUp

構文 2 ウィ ンドウに対して

機能 ウ ィン ド ウ上でマウス ポインタが動かされる と きに発生します。

イベン ト ID

オブジェ ク ト 構文

リ ッ チテキ ス ト エデ ィ ッ ト コ ン トロール

構文 1

ウ ィ ンド ウ 構文 2

イベン ト ID オブジェ ク ト

pbm_renmousemove リ ッチテキス ト エディ ッ ト

イベン ト ID オブジェ ク ト

pbm_mousemove ウ ィン ド ウ

284 PowerBuilder

Page 295: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

引数

リ ターン コード 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_keyinteger li_flags

li_flags = flags IF li_flags 15 THEN

// マウスの中ボタンが押されましたlb_middle_button = TRUEli_flags = li_flags - 16

END IF

引数 説明

flags UnsignedLong 型。 値によって渡されます (押下されたマウス ボタン と修飾キーの値の合計)。 値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 - 〔Shift〕• 8 - 〔Ctrl〕• 16 - 中マウス ボタン

Flags は、 押下されたすべてのマウス ボタン とキーの合計値とな り ます。

xpos Integer 型。 値によって渡されます (ウ ィ ンド ウの左辺からポインタまでの距離で、 ピ クセル単位の値)。

ypos Integer 型。 値によって渡されます (ウ ィ ンド ウの上辺からポインタまでの距離で、 ピ クセル単位の値)。

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

Page 296: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

MouseMove

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() )

次のコードは uf_setmonitor はウ ィ ン ド ウ関数を定義する ものです。 このウ ィ ン ド ウ関数は、ゲージ OCX のサイズをウ ィン ド ウ上の OLE 2.0コン ト ロールのサイズに調整します。 引数は 3 つあ り、 マウス ポインタの垂直位置、 OLECustomControl への参照、 メータの表示に対応するマウス ポインタの値の領域です。

double ld_gaugemax, ld_gaugemindouble ld_gaugerange, ld_value

286 PowerBuilder

Page 297: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

// モニタ型のコン ト ロールの表示範囲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

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

Page 298: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

MouseUp

MouseUpMouseUp イベン ト の引数はオブジェ ク トによって異な り ます。

構文 1 リ ッチテキスト エディ ッ ト コン ト ロールに対して

機能 ユーザが リ ッチテキス ト エディ ッ ト コン ト ロール上で左マウス ボタンを放すと きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 マウス ボタンを放すと きに Clicked イベン ト も発生します。

例 次のコードは リ ッチテキス ト エディ ッ ト コン ト ロールの MouseUp イベン トに対するものです。ユーザがマウスの左ボタンを押したと きに、シングルライン エディ ッ ト sle_1 にテキス ト を表示します。

sle_1.Text = "Mouse Up"

関連項目 ClickedMouseDownMouseMove

構文 2 ウィ ンドウに対して

機能 ウ ィン ド ウに対して ウ ィ ン ド ウ上の未使用領域 (表示可能で使用可能なオブジェ ク トが存在していない領域) でユーザが左マウス ボタンを放すと きに発生します。

オブジェ ク ト 構文

リ ッ チテキ ス ト エデ ィ ッ ト コ ン トロール

構文 1

ウ ィ ンド ウ 構文 2

イベン ト ID オブジェ ク ト

pbm_renlbuttonup リ ッチテキス ト エディ ッ ト

288 PowerBuilder

Page 299: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

イベン ト ID

引数

リ ターン コード 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"

イベン ト ID オブジェ ク ト

pbm_lbuttonup ウ ィ ンド ウ

引数 説明

flags UnsignedLong 型。 値によって渡されます (押下されたマウス ボタン と修飾キーの値の合計)。 値は以下のとおりです。

• 1 - 左マウス ボタン

• 2 - 右マウス ボタン

• 4 - 〔Shift〕• 8 - 〔Ctrl〕• 16 - 中マウス ボタン

MouseUp イベン ト で左マウス ボタンが押下されない場合、 flags の値に 1 は加算されません。 flags の詳細については、 284 ページの 「MouseMove」 イベン トの構文 2 を参照して ください。

xpos Integer 型。 値によって渡されます (ウ ィ ンド ウの左辺からポインタまでの距離で、 ピ クセル単位の値)。

ypos Integer 型。 値によって渡されます (ウ ィ ンド ウの上辺からポインタまでの距離で、 ピ クセル単位の値)。

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

Page 300: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

MouseUp

CASE 4sle_mkey.Text = "SHIFT key pressed"

CASE 8sle_mkey.Text = "CONTROL key pressed"

CASE 12sle_mkey.Text = "SHIFT and CONTROL keys pressed"

END CHOOSE

関連項目 ClickedMouseDownMouseMove

290 PowerBuilder

Page 301: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Moved機能 ユーザが矢印をク リ ッ ク した り スク ロールボッ クス (つまみ)を ド ラ ッ

グして、 ス クロールボッ クスを移動する と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Moved イベン ト によって、 スク ロールバーの Position プロパテ ィが引数 scrollpos の値で更新されます。

例 Moved イベン トの次のステー ト メ ン トは、スタテ ィ ッ ク テキス ト コント ロールにスク ロール ボッ クスの新しい位置を表示します。

st_1.Text = "Moved " + String(scrollpos)

関連項目 LineDownLineLeftLineRightLineUpPageDownPageLeftPageRightPageUp

イベン ト ID オブジェ ク ト

pbm_sbnthumbtrack 水平スク ロールバー、 水平ト ラ ッ クバー、 垂直スクロールバー、 垂直 ト ラ ッ クバー

引数 説明

scrollpos Integer 型。 値によって渡されます (ス ク ロール ボック スの位置を示す値 MinPosition プロパテ ィ とMaxPosition プロパテ ィ で指定し た領域内の値です)。

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

Page 302: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Open

OpenOpen イベン トは、 オブジェ ク トによって引数の内容が異な り ます。

構文 1 アプリケーシ ョ ン オブジェク トに対して

機能 ユーザがアプリ ケーシ ョ ンを起動する と きに発生します。

イベン ト ID

引数

リ ターン コード なし (RETURN 文を使用しないでください)

解説 アプ リ ケーシ ョ ンの Open イベン ト は、 データベース接続パラ メータを設定し、 アプ リ ケーシ ョ ンのメ イン ウ ィン ド ウを開くのに使用します。

Windows の場合[スター ト ] メニューの [フ ァ イル名を指定して実行] メニューを使用する と きに、コマンド ラ インに引数を指定する こ とができます。また、アプ リ ケーシ ョ ンのシ ョー ト カッ ト を定義する と きに リ ン ク先の実行ファ イルと と もに引数も指定するこ とができます。

開発環境でアプ リ ケーシ ョ ンをテス ト実行する と きに、 コマンド ラ インに引数を指定するこ とはできません。

ほかのイベン トや関数では、CommandParm 関数 CommandParm_func を呼び出して、 コマンド ラ インの引数を取得する こ とができます。

引数 commandline で取得されるコマンド ラ インの引数文字列の例については、 425 ページの「 CommandParm」 を参照して ください。

オブジェ ク ト 構文

アプリ ケーシ ョ ン 構文 1ウ ィ ンド ウ 構文 2

イベン ト ID オブジェ ク ト

なし アプ リ ケーシ ョ ン

引数 説明

commandline String 型。 値によって渡されます。 実行プログラムに渡す付加的なパラ メータ

292 PowerBuilder

Page 303: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

例 次の例では、 アプ リ ケーシ ョ ンの初期設定フ ァ イルの設定に基づきSQLCA グローバル変数を設定し、データベース と接続し、メ イン ウ ィン ド ウを開きます。

/* Populate SQLCA from current myapp.ini settings */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 THEN

MessageBox("データベースに接続できません ", &SQLCA.SQLErrText)

RETURNEND IF

/* MDI フレーム ウィン ドウを開く */Open(w_genapp_frame)

関連項目 Close

構文 2 ウィ ンドウに対して

機能 ウ ィ ン ド ウを開く関数によってウ ィ ン ド ウが開かれる と きに発生します。Open イベン トはウ ィ ン ド ウが開かれてから表示されるまでに発生します。

イベン ト IDイベン ト ID オブジェク ト

pbm_open ウ ィ ン ド ウ

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

Page 304: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Open

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Open イベン ト を起動する関数は次のとおりです。

OpenOpenWithParmOpenSheetOpenSheetWithParm

Open イベン ト が発生する段階で、ウ ィン ド ウ上のコン ト ロールはすでに存在しています (コン ト ロールの Constructor イベン ト の方が先に発生します)。 Open イベン トのス ク リプ トで、 ウ ィン ド ウ上のオブジェク ト を参照し、 それらのオブジェ ク トの表示や動作形態を設定できます。 た とえば、 ボタンを使用不可にした り、 データウ ィ ン ド ウにデータを検索するこ とができます。

すべてのコン ト ロールが存在していたと しても、 アクシ ョ ンによっては Open イベン ト で使用すべきでないものがあ り ます。 たとえば、ウ ィン ド ウ自体はまだ表示されていないので、 コ ン ト ロールに対し てSetRedraw 関数を呼び出すと、 失敗します。

WindowState プロパテ ィの変更シー ト と して開く ウ ィ ン ド ウの Open イベン ト の WindowState プロパテ ィは変更しないでください。 タ イ トル バーのコン ト ロールが重複してしまいます。 ウ ィ ン ド ウが開いたら、 別のス ク リプ トのプロパテ ィを変更できます。

ウ ィ ン ド ウが開かれる と きは、 ウ ィ ン ド ウ上の各コ ン ト ロールのConstructor イベン ト 、 ウ ィ ン ド ウの Activate イベン ト と Show イベント 、 ウ ィ ン ド ウのタブ順序の最初のコン ト ロールの GetFocus イベン トなど、 ほかのイベン ト も発生します。

MDI フレーム上でシートが開かれる と きは、 シートの Show イベン トと Activate イベン ト 、 フレームの Activate イベン ト など、 ほかのイベン ト も発生します。

例 ウ ィ ン ド ウにデータウ ィ ン ド ウ コン ト ロールがある場合、 Open イベン ト でそのデータウ ィ ン ド ウ コン ト ロールにデータを検索させ表示する こ とができます。 次の例では、 ト ランザクシ ョ ン オブジェ ク トSQLCA の値がすでに設定されています。

dw_1.SetTransObject(SQLCA)dw_1.Retrieve( )

294 PowerBuilder

Page 305: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

関連項目 ActivateConstructorShow

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

Page 306: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Other

Other機能 PowerBuilder のイベン トではない Windows メ ッセージが発生する と き

に発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 開発者は自分自身のユーザ イベン ト を自由に定義できるので、Other イベン ト は有効な手段 と は言え ません。 Other イベン ト はすべてのWindows メ ッセージを調べるので、 パフォーマンスが劣下します。 使用は避けるよ うによ うにして ください。

イベン ト ID オブジェ ク ト

pbm_other ウ ィ ン ド ウやウ ィ ン ド ウ上に配置されるコン ト ロール

引数 説明

wparam UnsignedLong 型。 値によって渡されます。

lparam Long 型。 値によって渡されます。

296 PowerBuilder

Page 307: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

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

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 + 10

イベン ト ID オブジェク ト

pbm_sbnpagedown 垂直スクロールバー、 垂直ト ラ ッ クバー

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

Page 308: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PageDown

dw_1.ScrollToRow(ll_nextrow)dw_1.SetRow(ll_nextrow)

関連項目 LineDownPageLeftPageRightPageUp

298 PowerBuilder

Page 309: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

PageLeft機能 スク ロール ボッ クス (つまみ) の左側のシャフ ト部分がク リ ッ ク され

る と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが水平ス ク ロールバーを ク リ ッ ク しても、 ス ク ロールバーのPosition プロパテ ィを変更するス ク リプ ト を記述しなければ、何も起こり ません。 ス ク ロールバーの矢印の場合は、 LineLeft イベン ト とLineRight イベン ト を使用します。 ス ク ロールバーの背景でスク ロールボッ クス (つまみ) の上下をク リ ッ クする場合は、 PageLeft イベン トと PageRight イベン ト を使用します。スク ロールボッ ク ス自身を ド ラ ッグする場合は Moved イベン ト を使用します。

例 以下の例は、水平スク ロール バーの PageLeft イベン トのスク リプ トです。 ユーザが水平スク ロール バーの左矢印をク リ ッ クする と、 インスタンス変数 ii_pagesize に保持されたページ サイズの値を使用して、 スク ロール ボッ クスの位置を変更します。

IF This.Position < &This.MinPosition + ii_pagesize THEN

This.Position = MinPositionELSE

This.Position = This.Position - ii_pagesizeEND IF

関連項目 LineLeftPageDownPageRightPageUp

イベン ト ID オブジェク ト

pbm_sbnpageup 水平スク ロールバー、 水平ト ラ ッ クバー

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

Page 310: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PageRight

PageRight機能 スク ロール ボッ クス (つまみ) の右側のシャフ ト部分がク リ ッ ク され

る と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが水平ス ク ロールバーを ク リ ッ ク しても、 ス ク ロールバーのPosition プロパテ ィ を変更するスク リプ ト を記述しなければ、何も起こり ません。

• スク ロールバーの矢印の場合は、 LineLeft イベン ト と LineRight イベン ト を使用します。

• ス ク ロールバーの背景でス ク ロールボッ ク ス (つまみ) の上下をク リ ッ クする場合は、 PageLeft イベン ト と PageRight イベン ト を使用します。

• スク ロールボッ クス自身をド ラ ッグする場合は、 Moved イベン トを使用します。

例 以下の例は、 水平スク ロール バーの PageRight イベン トのスク リプ トです。 ユーザが水平スク ロール バーの右矢印をク リ ッ クする と、 インスタンス変数 ii_pagesize に保持されたページ サイズの値を使用して、スク ロール ボッ クスの位置を変更します。

IF This.Position > &This.MaxPosition - ii_pagesize THEN

This.Position = MaxPositionELSE

This.Position = This.Position + ii_pagesizeEND IF

関連項目 LineRightPageDownPageLeftPageUp

イベン ト ID オブジェ ク ト

pbm_sbnpagedown 水平スク ロールバー、 水平ト ラ ッ クバー

300 PowerBuilder

Page 311: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

PageUp機能 スク ロール ボッ クス (つまみ) の上側のシャフ ト部分がク リ ッ ク され

る と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ユーザが垂直ス ク ロールバーを ク リ ッ ク しても、 ス ク ロールバーのPosition プロパテ ィを変更するス ク リプ ト を記述しなければ、何も起こり ません。

• スク ロールバーの矢印の場合は、 LineUp イベン ト と LineDown イベン ト を使用します。

• ス ク ロールバーの背景でス ク ロールボッ クス (つまみ) の上下をク リ ッ クする場合は、 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_pagesize

イベン ト ID オブジェク ト

pbm_sbnpageup 垂直スク ロールバー、 垂直ト ラ ッ クバー

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

Page 312: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PageUp

ll_currow = dw_1.GetRow( )ll_prevrow = ll_currow - 10dw_1.ScrollToRow(ll_prevrow)dw_1.SetRow(ll_prevrow)

関連項目 LineUpPageDownPageLeftPageRight

302 PowerBuilder

Page 313: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

PictureSelected機能 ユーザが リ ッチテキス ト エディ ッ ト コン ト ロール上のビ ッ ト マップ

をダブルク リ ッ ク した り、 ク リ ッ ク した後で 〔Enter〕 を押すこ とによって選択する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード 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

イベン ト ID オブジェ ク ト

pbm_renpictureselected リ ッチテキス ト エディ ッ ト

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

Page 314: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PipeEnd

PipeEnd機能 パイプラ イン処理が完了する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 PipeEnd イベン トはパイプラ イン処理のステータスを調べるのに有効です。

パイプラ イン処理は Start 関数や Repair 関数によって起動します。

パイプラ イン オブジェ ク ト の使い方の詳細については、 『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルを参照して ください。

例 以下のスク リプ トはパイプラ イン ユーザ オブジェ ク トの PipeEnd イベン ト の例です。 パイプラ イン処理のステータスをスタティ ッ ク テキスト コン ト ロールに表示します。

ist_status.Text = "パイプライン処理を終了しています ..."

関連項目 PipeMeterPipeStart

イベン ト ID オブジェ ク ト

pbm_pipeend パイプライン

304 PowerBuilder

Page 315: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

PipeMeter機能 パイプライン処理の際、 行を読み込んだり書き込んだ りする後で行ブ

ロ ッ クご とに発生します。 ブロ ッ クのサイズは、 データ パイプラ インペインタでパイプラ インの [コ ミ ッ ト単位] ボッ クスで指定します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 パイプライン処理は Start 関数や Repair 関数によって起動します。

データ パイプラ イン ペインタの [コ ミ ッ ト単位] ボッ クスを指定するこ とによって、 データベースにコ ミ ッ ト処理をする前に何行転送するか指定する こ とができ ます。 PipeMeter イベン ト は [コ ミ ッ ト 単位]ボッ クスで指定した数の行ブロ ッ クご とに発生します。

パイプラ イン オブジェ ク ト の使い方の詳細については、 『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルを参照して ください。

例 以下のコードは、 パイプラ イン ユーザ オブジェ ク トの PipeMeter イベン ト に対するものです。 転送先データベースに転送されたデータの行数を表示します。

ist_status.Text = String(This.RowsWritten) &

+ " 行が転送先のデータベースに書き込まれました。 "

関連項目 PipeEndPipeStart

イベン ト ID オブジェク ト

pbm_pipemeter パイプライン

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

Page 316: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PipeStart

PipeStart機能 パイプラ イン処理が開始される と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 PipeStart イベン トはパイプラ イン処理のステータスを調べるのに有効です。

パイプラ イン処理は Start 関数や Repair 関数によって起動します。

パイプラ イン オブジェ ク ト の使い方の詳細については、 『アプ リ ケーシ ョ ン テクニッ ク』 マニュアルを参照して ください。

例 以下のス ク リプ ト はパイプラ イン ユーザ オブジェ ク ト の PipeStart イベン トの例です。 パイプライン処理のステータスをスタテ ィ ッ ク テキス ト コン ト ロールに表示します。

ist_status.Text = "パイプライン処理の実行を開始しました ..."

関連項目 PipeEndPipeMeter

イベン ト ID オブジェ ク ト

pbm_pipestart パイプライン

306 PowerBuilder

Page 317: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

PrintFooter機能 リ ッチテキス ト エディ ッ ト コン ト ロール上の文書のフ ッ タが印刷さ

れよ う と している と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。1 現行ページのヘッダを印刷しません。

解説 PrintHeader イベン ト と PrintFooter イベン トにおいて、 ページ数の印刷用に挿入した入力フ ィールドの値を設定するこ とによって、 ページ数表示を変更する こ とができます。

リ ッチテキス ト エディ ッ ト コン ト ロールがデータウ ィ ン ド ウ コン トロールとデータを共有している場合、 データウ ィン ド ウの行ごとに文書インスタンスが作成されます。 文書インスタンスは、 対応する行の内容を入力フ ィールドに割り当てたデータを使用します。

リ ッチテキス ト エディ ッ ト コン ト ロールとデータウ ィ ン ド ウ コン トロール間のデータ共有についての詳細は、 『データウ ィ ン ド ウ リ フ ァレンス』 マニュアルまたはオンライン ヘルプの 「ShareData」 を参照して ください。

イベン ト ID オブジェク ト

pbm_renprintfooter リ ッチテキス ト エディ ッ ト

引数 説明

currentpage Long 型。 値によって渡されます (印刷されているページ番号)。

totalpages Long 型。 値によって渡されます (その文書のページ総数)。

リ ッチテキス ト エディ ッ ト コン ト ロールがデータウ ィン ド ウ とデータを共有している場合、 totalpagesの値は文書インスタンスのページ総数とな り ます。

currentrow Long 型。 値によって渡されます。

リ ッチテキス ト エディ ッ ト コン ト ロールがデータウ ィ ン ド ウ とデータを共有している場合、 currentrowは現在印刷されている文書インスタンスの行数となり ます。

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

Page 318: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PrintFooter

例 以下のス ク リ プ ト は リ ッチテキ ス ト エデ ィ ッ ト コ ン ト ロールのPrintFooter イベン トの例です。 スタテ ィ ッ ク テキス ト st_1 に印刷ジ ョブの進行状況を表示します。

st_1.Text = "ページのフ ッ タを印刷 " &+ String(currentpage) + " / " &

+ String(totalpages) + " ページ ...."

関連項目 PrintHeader

308 PowerBuilder

Page 319: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

PrintHeader機能 リ ッチテキス ト エディ ッ ト コン ト ロール上の文書のヘッダが印刷さ

れよ う と している と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。1 現行ページのヘッダを印刷しません。

解説 PrintHeader イベン ト と PrintFooter イベン トにおいて、 ページ数の印刷用に挿入した入力フ ィールドの値を設定するこ とによって、 ページ数表示を変更する こ とができます。

リ ッチテキス ト エディ ッ ト コン ト ロールがデータウ ィ ン ド ウ コン トロールとデータを共有している場合、 データウ ィン ド ウの行ごとに文書インスタンスが作成されます。 文書インスタンスは、 対応する行の内容を入力フ ィールドに割り当てたデータを使用します。

リ ッチテキス ト エディ ッ ト コン ト ロールとデータウ ィ ン ド ウ コン トロール間のデータ共有についての詳細は、 『データウ ィ ン ド ウ リ フ ァレンス』 マニュアルまたはオンライン ヘルプの 「ShareData」 を参照して ください。

イベン ト ID オブジェ ク ト

pbm_renprintheader リ ッチテキス ト エディ ッ ト

引数 説明

currentpage Long 型。 値によって渡されます (印刷されているページ番号)。

totalpages Long 型。 値によって渡されます (その文書のページ総数)。 リ ッチテキス ト エディ ッ ト コン ト ロールがデータウ ィン ド ウ とデータを共有している場合、 totalpagesの値は文書インスタンスのページ総数とな り ます。

currentrow Long 型。 値によって渡されます。

リ ッチテキス ト エディ ッ ト コン ト ロールがデータウ ィ ン ド ウ とデータを共有している場合、 currentrowは現在印刷されている文書インスタンスの行数となり ます。

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

Page 320: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PrintHeader

例 以下のス ク リ プ ト は リ ッチテキ ス ト エデ ィ ッ ト コ ン ト ロールのPrintHeader イベン ト の例です。スタテ ィ ッ ク テキス ト st_1 に印刷ジ ョブの進行状況を表示します。

st_1.Text = "ページのヘッダを印刷 " &+ String(currentpage) + " / " &

+ String(totalpages) + " ページ ...."

関連項目 PrintFooter

310 PowerBuilder

Page 321: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

PropertyChanged機能 OLE サーバが OLE オブジェ ク ト のプロパテ ィの値を変更した後で発

生します。

イベン ト ID

引数

リ ターン コード なし (RETURN 文を使用しないでください)

解説 プロパテ ィの変更通知はすべての OLE サーバでサポー ト されているわけではあ り ません。 PropertyRequestEdit イベン ト と PropertyChangedイベン トは、 OLE サーバがプロパティの変更通知をサポー ト していると きにしか発生しません。

オブジェ ク ト が作成されている と きやロード されている と きは、 プロパテ ィの変更通知は送信されません。 変更通知は、 バイン ド可能なプロパテ ィが変更されたと きに、 送信されます。 この場合、 プロパテ ィがどのよ うに変更されたかは関係あ り ません。

PropertyChanged イベン トは、 プロパテ ィの値が変更された後に発生します。 この際、 OLE オート メーシ ョ ン インタフェースを介して、 プロパティの新しい値を取得する こ とができます。 PropertyChanged イベントでは、 値の変更を取り消すこ とはできません。 変更を取り消す処理は、 PropertyRequestEdit イベン ト でスク リプ ト を記述します。

関連項目 DataChangePropertyRequestEditRenameViewChange

イベン ト ID オブジェク ト

なし OLE

引数 説明

propertyname 値が変更されたプロパテ ィ の名前。 複数のプロパティが変更されるなど、 数多くの変更が行われた場合、 propertyname は空白文字列とな り ます。

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

Page 322: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

PropertyRequestEdit

PropertyRequestEdit機能 OLE サーバが OLE コン ト ロール上のオブジェ ク ト のプロパテ ィの値

を変更しよ う とする と きに発生します。

イベン ト ID

引数

リ ターン コード なし (RETURN 文を使用しないでください)

解説 プロパテ ィの変更通知はすべての OLE サーバでサポー ト されているわけではあ り ません。 PropertyRequestEdit イベン ト と PropertyChangedイベン トは、 OLE サーバがプロパテ ィの変更通知をサポート していると きにしか発生しません。

オブジェ ク ト が作成されている と きやロード されている と きは、 プロパテ ィの変更通知は送信されません。 変更通知は、 バイン ド可能なプロパテ ィが変更されたと きに、 送信されます。 この場合、 プロパテ ィがどのよ うに変更されたかは関係あ り ません。

PropertyRequestEdit イベン ト では、 OLE オー ト メ ーシ ョ ン イ ン タフェースを使用して、 プロパテ ィの前の値にアクセスし、 それを保持できます。 値の変更を取り消す場合は、引数 cancelchange に TRUE を設定します。

関連項目 DataChangePropertyChangedRenameViewChange

イベン ト ID オブジェ ク ト

なし OLE

引数 説明

propertyname String 型。 値によって渡されます (値が変更されたプロパティの名前)。

複数のプロパティが変更されるなど、 数多くの変更が行われた場合、 propertyname は空白文字列とな ります。

cancelchange Boolean 型。参照によって渡されます。変更がキャンセルされるかど うかを示します。 値は以下のとおりです。

• FALSE - (デフォル ト ) 変更されます。

• TRUE - 変更はキャンセルされます。

312 PowerBuilder

Page 323: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

RButtonDownRButtonDown イベン トは、 オブジェ ク トによって引数の内容が異な ります。

構文 1 リ ッチテキス ト エディ ッ ト コン ト ロール以外のコン ト ロールやウィ ンドウに対して

機能 ウ ィ ン ド ウに対しては、 ウ ィン ド ウの未使用領域 (表示可能で使用可能なオブジェ ク トが配置されない領域) で、 右マウス ボタンが押される と きに発生します。 ウ ィン ド ウの RButtonDown イベン トは、 カーソルが表示可能で使用可能なコン ト ロール上にないと きに発生します。

コン ト ロールに対しては、 コン ト ロール上で右マウス ボタンが押される と きに発生します。

イベン ト ID

オブジェク ト 構文

リ ッ チテキス ト エデ ィ ッ ト コ ン トロール以外のコン ト ロールやウ ィ ン ドウ

構文 1

リ ッ チテキス ト エデ ィ ッ ト コ ン トロール

構文 2

イベン ト ID オブジェク ト

pbm_rbuttondown ウ ィ ン ド ウや、 ウ ィ ンド ウ上に配置できる リ ッチテキス ト エディ ッ ト以外のコン ト ロール

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

Page 324: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

RButtonDown

引数

リ ターン コード 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 の詳細については、284 ページの 「MouseMove」イベン トの構文 2 を参照して ください。

xpos Integer 型。 値によって渡されます (ウ ィ ン ド ウの左辺からポインタまでの距離で、 ピクセル単位の値)。

ypos Integer 型。 値によって渡されます (ウ ィ ン ド ウの上辺からポインタまでの距離で、 ピクセル単位の値)。

314 PowerBuilder

Page 325: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

構文 2 リ ッチテキス ト エディ ッ ト コン ト ロールに対して

機能 リ ッチテキス ト エディ ッ ト コン ト ロールの PopMenu プロパティの値が FALSE に設定されている と きに、ユーザが リ ッチテキス ト エディ ット コン ト ロール上で右マウス ボタンを押すと きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 リ ッチテキス ト エディ ッ ト コン ト ロールの PopMenu プロパテ ィ がTRUE のと きは、 リ ッチテキス ト エディ ッ ト の標準ポップアップ メニューが表示され、 RButtonDown イベン トは発生しません。

RButtonDown イベン ト を使用する こ と によ って、 ポ ッ プア ッ プ メニューをカスタマイズするこ とができます。

関連項目 ClickedRButtonDown

イベン ト ID オブジェク ト

pbm_renrbuttondown リ ッチテキス ト エディ ッ ト

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

Page 326: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

RButtonUp

RButtonUp機能 右マウス ボタンが放される と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。1 処理を行いません。

関連項目 RButtonDown

イベン ト ID オブジェ ク ト

pbm_renrbuttonup リ ッチテキス ト エディ ッ ト

316 PowerBuilder

Page 327: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

RemoteExec機能 DDE ク ラ イアン ト アプ リ ケーシ ョ ンがコマンド を送ったと きに発生

します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 RemoteRequestRemoteSend

イベン ト ID オブジェ ク ト

pbm_ddeexecute ウ ィ ンド ウ

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

Page 328: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

RemoteHotLinkStart

RemoteHotLinkStart機能 DDE ク ラ イアン ト アプ リ ケーシ ョ ンがホッ ト リ ン クを開始しよ う と

する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 DDE ク ラ イアン ト と DDE サーバが両方と も PowerBuilder アプ リ ケーシ ョ ンの場合、 ク ラ イアン ト アプ リ ケーシ ョ ンのス ク リプ トにある以下のコー ド に よ って、 サーバ アプ リ ケーシ ョ ン ウ ィ ン ド ウのRemoteHotLinkStart イベン ト を起動します。

StartHotLink("mysle","pb_dde_server","mytest")

また、サーバ アプリ ケーシ ョ ンの RemoteHotLinkStart イベン トで、ホット リ ンクが開始されたこ と を示す Boolean 型のインスタンス変数を設定します。

ib_hotlink = TRUE

関連項目 HotLinkAlarmRemoteHotLinkStopSetDataDDEStartServerDDEStopServerDDE

イベン ト ID オブジェ ク ト

pbm_ddeadvise ウ ィ ンド ウ

318 PowerBuilder

Page 329: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

RemoteHotLinkStop機能 DDE ク ラ イアン ト アプ リ ケーシ ョ ンがホッ ト リ ン クを終了しよ う と

する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 DDE ク ラ イアン ト と DDE サーバが両方と も PowerBuilder アプ リ ケーシ ョ ンの場合、 ク ラ イアン ト アプ リ ケーシ ョ ンのスク リプ トにある以下のコー ド によ って、 サーバ アプ リ ケーシ ョ ン ウ ィ ン ド ウのRemoteHotLinkStop イベン ト を起動します。

StopHotLink("mysle","pb_dde_server","mytest")

また、サーバ アプ リ ケーシ ョ ンの RemoteHotLinkStop イベン ト で、ホット リ ンクが終了されたこ と を示す Boolean 型のインスタンス変数を設定します。

ib_hotlink = FALSE

関連項目 HotLinkAlarmRemoteHotLinkStartSetDataDDEStartServerDDEStopServerDDE

イベン ト ID オブジェク ト

pbm_ddeunadvise ウ ィ ン ド ウ

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

Page 330: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

RemoteRequest

RemoteRequest機能 DDE ク ラ イアン ト アプ リ ケーシ ョ ンがデータを要求する と きに発生

します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 RemoteExecRemoteSend

イベン ト ID オブジェ ク ト

pbm_dderequest ウ ィ ンド ウ

320 PowerBuilder

Page 331: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

RemoteSend機能 DDE ク ラ イアン ト アプ リ ケーシ ョ ンがデータを送ったと きに発生し

ます。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 RemoteExecRemoteRequest

イベン ト ID オブジェ ク ト

pbm_ddepoke ウ ィ ンド ウ

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

Page 332: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Rename

Rename機能 サーバ アプ リ ケーシ ョ ンが、 コン ト ロールにオブジェ ク トの名前が変

更されたこ とを通知する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型の リ ターン コード。 無視されます。

解説 このイベン トの処理中に、OLE コン ト ロールの ObjectData Blob 値を取得したい場合は、 このコン ト ロールに対してユーザ イベン ト をポス トしないと、 実行時エラーが発生します。

関連項目 DataChangePropertyRequestEditPropertyChangedViewChange

イベン ト ID オブジェ ク ト

pbm_omnrename OLE

322 PowerBuilder

Page 333: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

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 単位系)。

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

Page 334: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

RightClicked

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(), &

オブジェ ク ト 構文

リ ス ト ビュー コン ト ロール、タブ コント ロール

構文 1

ツ リービュー コン ト ロール 構文 2プログレスバー コン ト ロール 構文 3

イベン ト ID オブジェ ク ト

pbm_lvnrclicked リ ス ト ビュー

pbm_tcnrclicked タブ

引数 説明

index Integer 型。 値によって渡されます (ユーザがク リ ック した ListViewItem やタブ ページのインデッ クス)。

324 PowerBuilder

Page 335: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Parent.PointerY())

関連項目 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 型。 値によって渡されます (ユーザがク リ ッ クした TreeViewItem のハンドル)。

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

Page 336: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

RightClicked

構文 3 プログレスバー コン ト ロールに対して

機能 ユーザがプログレスバー コン ト ロール上で右マウス ボタンをク リ ックする と発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

関連項目 Clicked

イベン ト ID オブジェク ト

pbm_prnrclicked 水平プログレスバー、 垂直プログレスバー

326 PowerBuilder

Page 337: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

RightDoubleClickedRightDoubleClicked イベン トは、オブジェ ク トによって引数の内容が異な り ます。

構文 1 リス ト ビュー コン ト ロールと タブ コン ト ロールに対して

機能 ユーザが リ ス ト ビュー コン ト ロール上や、タブ コン ト ロールのタブ部分で右マウス ボタンをダブルク リ ッ クする と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 以下の例は、 ユーザが リ ス ト ビュー項目を右マウス ボタンでダブルクリ ッ クする と、 その項目を リ ス ト ビューから削除します。 また、 残った リ ス ト ビュー項目を整列します。

integer li_rtn

// 項目を削除します。li_rtn = This.DeleteItem(index)

IF li_rtn = 1 THENThis.Arrange( )

ELSE

MessageBox(" エラー ", " 削除に失敗しました。 ") END IF

オブジェク ト 構文

リ ス ト ビュー コン ト ロール、タブ コント ロール

構文 1

ツ リービュー コン ト ロール 構文 2

イベン ト ID オブジェク ト

pbm_lvnrdoubleclicked リ ス ト ビュー

pbm_tcnrdoubleclicked タブ

引数 説明

index Integer 型。 値によって渡されます (ユーザがダブルク リ ッ クした ListViewItem やタブ ページのインデッ クス)。

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

Page 338: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

RightDoubleClicked

関連項目 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 型。 値によって渡されます (ユーザがダブルク リ ッ ク した TreeViewItem のハン ドル)。

328 PowerBuilder

Page 339: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Save機能 サーバ アプ リ ケーシ ョ ンが、 データが保存されたこ と をコン ト ロール

に通知する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型のリ ターン コード。 無視されます。

解説 このイベン トの処理中に、OLE コン ト ロールの ObjectData Blob 値を取得したい場合は、 このコン ト ロールに対してユーザ イベン ト をポス トしないと、 実行時エラーが発生します。

例 以下の例では、データベースのテーブルに OLE オブジェ ク トの変更履歴を残します。 ユーザが OLE 2.0 コン ト ロールに 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( )

ELSE

MessageBox("検索 ", "データ行が見つかりません。 ") END IF

関連項目 CloseSaveObject

イベン ト ID オブジェク ト

pbm_omnsave OLE

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

Page 340: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

SaveObject

SaveObject機能 サーバ アプ リ ケーシ ョ ンがコン ト ロール内のオブジェ ク ト を保存す

る と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型の リ ターン コード。 無視されます。

解説 サーバが、埋め込みオブジェク ト のデータを保存するのに OLE コン トロールの ObjectData blob 値を取得したい場合に、 SaveObject イベン トを使用する と効果的です。Save イベン トや Close イベン ト とは違って、SaveObject イベン ト は、 実行時エラーを回避するためにこのコ ン トロールにユーザ イベン ト をポス トする必要があ り ません。

個々のサーバの振る舞いに違いがある こ とから、 このイベン トはすべてのサーバ アプ リ ケーシ ョ ン間で一貫して発生するわけではあ り ません。 Microsoft Word 97 や Microsoft Excel 97 を使用し ている場合、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

330 PowerBuilder

Page 341: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

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 オブジェ ク ト

なし メニュー

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

Page 342: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

SelectionChanged

SelectionChangedSelectionChanged イベン トは、オブジェ ク ト によって引数の内容が異なり ます。

構文 1 リス トボッ クスを表示するコン ト ロールに対して

機能 コン ト ロール内のある項目が選択される と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ダウンによって表示される リ ス ト ボッ クスでは、SelectionChanged イベン トはド ロ ップダウン部分の項目選択に適用されます。 エディ ッ ト部分には適用されません。

SelectionChanged イベン トは、ユーザがリ ス ト上の項目をク リ ッ クすると きに発生します。 現行の選択項目に対する ク リ ッ ク も同様です。 項目がマ ウ スに よ って選択さ れる場合は、 Clicked イベン ト ない しDoubleClicked イベン ト が SelectionChanged イベン ト の後に発生し ます。

オブジェ ク ト 構文

リ ス ト ボッ ク スを表示するコン ト ロール (ド ロ ップダウン リ ス ト ボッ ク ス、ド ロ ップダウン ピ クチャ リ ス ト ボックス、 リ ス ト ボッ クス、 ピクチャ リ スト ボッ クス)

構文 1

タブ コン ト ロール 構文 2ツ リービュー コン ト ロール 構文 3

イベン ト ID オブジェ ク ト

pbm_cbnselchange ド ロ ップダウン リ ス ト ボッ クス、ド ロ ップダウン ピクチャ リ ス ト ボッ クス

pbm_lbnselchange リ ス ト ボッ ク ス、 ピクチャ リ ス ト ボッ クス

引数 説明

index Integer 型。 値によって渡されます (新たに選択された項目のインデッ クス)。

332 PowerBuilder

Page 343: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

例 以下の例は、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 型。 値によって渡されます (新たに選択されたタブ ページのインデッ クス)。

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

Page 344: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

SelectionChanged

リ ターン コード 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 " &+ String(l_tvinew.Label)

イベン ト ID オブジェ ク ト

pbm_tvnselchanged ツ リービュー

引数 説明

oldhandle Long 型。 値によって渡されます (今まで選択されていた TreeViewItem のハン ドル)。

newhandle Long 型。 値によって渡されます (今まで選択されていた TreeViewItem のハン ドル)。

334 PowerBuilder

Page 345: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

関連項目 ClickedSelectionChanging

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

Page 346: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

SelectionChanging

SelectionChangingSelectionChanging イベン トは、 オブジェ ク ト によって引数の内容が異な り ます。

構文 1 タブ コン ト ロールに対して

機能 別のタブ ページが選択されよ う と している と きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 項目の選択が行われます。1 項目の選択が行われません。

解説 SelectionChanging イベン トは、 選択項目の変更を無効にした り、 新たに選択されたタブ ベージが表示される前にそのタブ ベージに対する特別な処理を行 う ために使用します。 CreateOnDemand プロパテ ィがTRUE で、 そのタブ ページが選択されたのが初めてだった場合、 タブページ上のコン ト ロールはまだ存在しておらず SelectionChanging イベン ト で参照するこ とはできません。

例 以下のコードは、 ユーザがタブを選択する と、 そのタブ ページ上のデータウ ィン ド ウ コン ト ロールのサイズを、別のデータウ ィン ド ウ コン ト ロールのサイズに合わせます。 このサイズの変更は、 タブ ページが表示される前に行われます。 この例は、 PowerBuilder Code Examplesの w_phone_dir ウ ィン ド ウにある tab_uo タブのものです。

オブジェ ク ト 構文

タブ コン ト ロール 構文 1ツ リービュー コン ト ロール 構文 2

イベン ト ID オブジェ ク ト

pbm_tcnselchanging タブ

引数 説明

oldindex Integer 型。 値によって渡されます。 今まで選択されていたタブ ページのインデッ クス。

newindex Integer 型。 値によって渡されます。 新たに選択されたタブ ページのインデッ クス。

336 PowerBuilder

Page 347: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

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)

// ツリービュー項目の現行の選択を取得します。This.GetItem(newhandle, l_tvinew)

//2 つの項目のラベルを表示します。sle_status.Text = "Selection changed from " &

イベン ト ID オブジェ ク ト

pbm_tvnselchanging ツ リービュー

引数 説明

oldhandle Long 型。 値によって渡されます (今まで選択されていた TreeViewItem のハンドル)。

newhandle Long 型。 値によって渡されます (新たに選択されたTreeViewItem のハンドル)。

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

Page 348: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

SelectionChanging

+ String(l_tviold.Label) + " to " &+ String(l_tvinew.Label)

関連項目 ClickedSelectionChanged

338 PowerBuilder

Page 349: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Show機能 ウ ィン ド ウが表示される直前に発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 Show イベン トはウ ィ ン ド ウが開かれる と きに発生します。

関連項目 ActivateHideOpen

イベン ト ID オブジェク ト

pbm_showwindow ウ ィ ン ド ウ

引数 説明

show Boolean 型。値によって渡されます (ウ ィ ン ド ウが表示されよ う と し ているかど う かを示し、 値は常にTRUE とな り ます)。

status Long 型。 値によって渡されます (ウ ィ ン ド ウのステータス)。

値は以下のとおりです。

• 0 - 現行ウ ィ ン ド ウだけに影響があ り ます。

• 1 - 親ウ ィ ンド ウが最小化されよ う と しています。またはポップアップ ウ ィ ン ド ウが非表示になろ う と しています。

• 3 - 親ウ ィ ン ド ウが表示または最大化されよ う としています。またはポップアップ ウ ィ ン ド ウが表示されよ う と しています。

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

Page 350: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Sort

SortSort イベン トは、 オブジェ ク トによって引数の内容が異な り ます。

構文 1 リス ト ビュー コン ト ロールに対して

機能 リ ス ト ビューがソー ト されている と きに、 ListViewItem ど う しを比較するたびに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

-1 index1 は index2 よ り小さい。0 index1 と index2 は等しい。1 index1 は index2 よ り大きい。

解説 Sort イベン ト によってソー ト されている項目の順序を細か く制御できます。 各項目のプロパティ を調べ適切な リ ターン コードを返すこ とによって、 項目間のソート順序を指示します。

Sort イベン トは、 ListViewItem を複数の条件 (PictureIndex や Label など) でソート したいと きなどに有効です。

Sort イベン トは、Sort イベン ト を呼び出して発生させるか、Sort 関数でUserDefinedSort! 引数を用いて発生させるこ とができます。

オブジェ ク ト 構文

リ ス ト ビュー コン ト ロール 構文 1ツ リービュー コン ト ロール 構文 2

イベン ト ID オブジェ ク ト

pbm_lvnsort リ ス ト ビュー

引数 説明

index1 Integer 型。 値によって渡されます (ソート処理の際に比較されよ う と している 1 番目の ListViewItem のインデッ クス)。

index2 Integer 型。 値によって渡されます (比較されよ う としている 2 番目の ListViewItem のインデッ クス)。

column Integer 型。 値によって渡されます (ソートの対象となっているカラムの番号)。

340 PowerBuilder

Page 351: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

例 以下のス ク リプ トは、 リ ス ト ビュー項目を 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 ツリービュー コン ト ロールに対して

機能 ツ リービューがソート されている と きに、 TreeViewItem ど う しを比較するたびに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

-1 handle1 は handle2 よ り小さい。0 handle1 と handle2 は等しい。1 handle1 は handle2 よ り大きい。

イベン ト ID オブジェク ト

pbm_tvnsort ツ リービュー

引数 説明

handle1 Long 型。 値によって渡されます (ソート処理の際に比較されよ う と している 1 番目の TreeViewItem のハン ドル)。

handle2 Long 型。 値によって渡されます (比較されよ う と している 2 番目の TreeViewItem のハン ドル)。

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

Page 352: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Sort

解説 Sort イベン ト によってソー ト されている項目の順序を細か く制御できます。 各項目のプロパティ を調べ適切な リ ターン コードを返すこ とによって、 項目間のソート順序を指示します。

Sort イベン トは、 TreeViewItem を複数の条件 (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

342 PowerBuilder

Page 353: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

SystemError機能 実行時に、 try-catch ブロ ッ クで処理されていない重大なエラー (存在

しないウ ィン ド ウを開こ う と したなど) が起こ る と きに発生します。

イベン ト ID

引数 なし

リ ターン コード なし (RETURN 文を使用しないでください)

解説 SystemError イベン ト に対する ス ク リ プ ト が記述されていない場合、メ ッセージ ボッ クスに PowerBuilder のエラー番号とエラー メ ッセージが表示されます。エラー メ ッセージの詳細については『PowerBuilderユーザーズ ガイ ド』 マニュアルを参照して ください。

外部定義オブジェ ク トやデータウ ィ ン ド ウに関するエラーが起こった場合、 ExternalException イベン トや Error イベン ト でエラーを処理するこ とによって、 SystemError イベン ト の発生を回避する こ とができます。 ExternalException イベン ト と Error イベン トは、 旧バージ ョ ン との互換性用に使用可能になっています。

SystemError イベン トは、エラーを try-catch ブロッ ク内で処理するこ とによ り発生を回避できます。 精密な例外処理コードを使用すれば、 エラー状態から回復して、 ユーザはそのままアプ リ ケーシ ョ ンを実行し続けるこ とができます。例外処理についての詳細は、『アプ リ ケーシ ョン テクニッ ク』 マニュアルを参照して ください。

SystemError イベン ト が発生する と、 現行のスク リプ トは終了し、 システムは不安定な状態にな り ます。 SystemError イベン トが発生したと きは、 アプ リ ケーシ ョ ンを実行し続けないよ うにして ください。 イベント スク リプ ト を使ってク リーンアップし、 DBMS から切断後、 アプ リケーシ ョ ンを終了させて ください。

例 以下のコードは SystemError イベン ト スク リプ ト の例です。アプ リ ケーシ ョ ンをただちに中断します。

HALT CLOSE

関連項目 ErrorExternalExceptionTRY...CATCH...FINALLY...END TRY

イベン ト ID オブジェク ト

なし アプ リ ケーシ ョ ン

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

Page 354: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

SystemKey

SystemKey機能 挿入ポイン トがライン エディ ッ ト にない状況で、ユーザが 〔Alt〕 また

は 〔Alt〕 と と もに別のキーを押すと きに発生します。

イベン ト ID

引数

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 〔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

イベン ト ID オブジェ ク ト

pbm_syskeydown ウ ィン ド ウ

引数 説明

key KeyCode 型。 値によって渡されます。 KeyCode カタログ データ型の値は、 KeyA! や KeyF1! のよ うに、 どのキーが押されたかを示します。

keyflags UnsignedLong 型。 値によって渡されます (キーと と もに押された修飾キー)。 〔Shift〕 キー以外の修飾キーが渡される こ とはあ り ません。

344 PowerBuilder

Page 355: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

Timer機能 Start 関数または Timer 関数が呼び出された後、 指定した秒数が経過す

る と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

例 以下の例は、 タ イ ミ ング オブジェ ク トの Timer イベン ト と ウ ィン ド ウの Timer イベン ト の使い方を示します。

タイ ミ ング オブジェ ク トの使い方 以下のス ク リプ ト は、 タ イ ミ ング オブジェ ク ト を使って、 指定した間隔でデータベースから取り出されたカスタマ リ ス ト を更新します。 アプリ ケーシ ョ ンのメ イン ウ ィン ド ウw_main 内のデータウ ィ ン ド ウ コン ト ロールには、 カスタマの リ ス トと、 Start Timer と Retrieve の 2 つのボタンが表示されます。 また、 ウ ィン ド ウの Open イベン トはデータベースに接続します。

CONNECT using SQLCA;

IF sqlca.sqlcode <> 0 THEN

MessageBox("データベースに接続 ", & 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

イベン ト ID オブジェク ト

pbm_timer タイ ミ ングまたはウ ィ ン ド ウ

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

Page 356: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

Timer

タ イ ミ ング オブジェ ク ト の 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)

ウィ ンドウ オブジェ ク トの使い方 次の例は、現在の時刻をウ ィ ン ド ウのスタテ ィ ッ ク テキス ト コン ト ロールに表示させます。 ウ ィ ン ド ウのOpen イベン ト に対する ス ク リ プ ト で Timer 関数を呼び出すと タ イマーが開始します。 Timer イベン トに対するス ク リ プ ト は、 表示される時刻を リ フレッシュします。

ウ ィ ン ド ウの Open イベン トのス ク リ プ ト に、 以下のコードが記述されています。 このコードは、 初期状態の時間を表示しタイマーを開始します。

st_time.Text = String(Now(), "hh:mm")Timer(60)

次のステー ト メ ン ト は、 1 分ごとに起動するウ ィ ン ド ウ Timer イベント に対する ス ク リ プ ト の中に記述されています。 現在の時刻をス タテ ィ ッ ク テキス ト コン ト ロール st_time に表示します。

st_time.Text = String(Now(), "hh:mm")

346 PowerBuilder

Page 357: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

第 9 章 PowerScript のイベン ト

ToolbarMoved機能 MDI フレーム ウ ィ ン ド ウにおいて、ユーザがフレームバーまたはシー

トバーを移動する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型。リ ターン コードの値とその意味は以下のとおりです(RETURN文によって指定します)。

0 処理を続行します。

解説 ToolbarMoved イベン トは MDI シー ト ウ ィン ド ウに対しては起動できません。

ツールバーの位置に関する情報を取得するには、 GetToolbar 関数やGetToolbarPos 関数を呼び出して ください。

SetToolbarPos 関数によってツールバーの位置が変更される と、 このイベン トが発生します。

イベン ト ID オブジェク ト

pbm_tbnmoved ウ ィ ン ド ウ

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

Page 358: PowerScript® リファレンス ボリューム 1 · Powersoft Portfolio ... Replication Server, Replication Server Manager, Replication Toolkit, Res ource ... PowerScript リファレンス

ViewChange

ViewChange機能 OLE サーバ アプリ ケーシ ョ ンが、ユーザに対する表示が変更されたこ

と を、 コン ト ロールに通知する と きに発生します。

イベン ト ID

引数 なし

リ ターン コード Long 型の リ ターン コード。 無視されます。

解説 このイベン トの処理中に、OLE コン ト ロールの ObjectData Blob 値を取得したい場合は、 このコン ト ロールに対してユーザ イベン ト をポス トしないと、 実行時エラーが発生します。

関連項目 DataChangePropertyRequestEditPropertyChangedRename

イベン ト ID オブジェ ク ト

pbm_omnviewchange OLE

348 PowerBuilder