【メモ】PowerBuilder6.5の覚書

開発ざれごと

powerbuilder_code_analyzer-9398-1

PowerBuilderのメモが出てきたので、使い道がなさそうだが、公開します。

ははは・・・バージョン6ですけどね。


PowerBuilder Tips(V6)

※以下、オブジェクト名等は読み替える事
※とってもAccessに類似。Access+αな感じ。
※VBに似ているが、演算構文などは、Cに類似
※小粋な関数が少ないので、初期手間がかかる
※どうしても、生産性が高いとは思えない
※定数系は、語句の最後に!が付いたもの。HourGlass!、keyEnter!など
※中途途上なオブジェクト指向、PHPに似ている
※IDEにて、ショートカットキーが活用できない。設定もできない
なので、マウスオペレーションが中心になる
※ツールバー操作が必須。これは許せない
※なぜかTAB=3が標準
※スコープがウィンドウのウィンドウ関数があります
親ソースを開いて、「宣言」「ウィンドウ関数」
※変数名に日本語が利用可能
※落ちまくる。対策は無い。こまめにセーブ
※デバッガがまるで、使えない

≪≪≪構文系≫≫≫
●自分はThis、他はParent、Super
●エスケープは~(チルダ)
●命令の区切りは、Cと同様で;で区切れる
●演算子の両端は必ず空白を入れる
変数名に"-"が利用できるため、名前になってしまう
●NULL=DBNULLのようで、""や0とは違う扱い
●文字列の連結は、"+"で行う。
●IF文
If IsNull(ls_pass) = True Or ls_pass = "" Then
Return
Else
End If

●変数型など
Char型
String型(Max60000バイト)
Int型(16bit)
UnsignedInt型(16bit)
Long型(32bit)
UnsignedLong型(32bit)
Real型(浮動小数)
Double型(15桁)
Decimal型(18桁)
Date型
Time型
DateTime型
true/false

●NULL関係
If IsNull(li_cd) = True Then
SetNull(ls_Sort)
これは間違い、IF a = NULL THEN

≪≪≪データベースアクセス関係≫≫≫
※DW=データウィンドウ

●SQL編集モードにはAccessと同じく2種類有り
グラフィックモードと、SQLエディタモードを切り替える。
ただし、複雑なSQLの場合、グラフィックに戻れなくなる場合有り
この辺は、Accessと同様。

●編集モード時の上部の項目並び
データレコードの並びとなっているので、プログラムから
Getitem*などで読み込む場合は、この順番となる。
dw_mei.GetitemString(dw_mei.GetRow(),1)
名前でアクセスできた方がベストなのかもしれない。

●DWの選択行を取得する※行番号
IF dw_mei.GetRow() > 0 THEN
lstr_para.s_tok_code = dw_mei.GetitemString(dw_mei.GetRow(),1)
lstr_para.s_tok_name = dw_mei.GetitemString(dw_mei.GetRow(),2)
END IF

●DWの選択行を設定する※行番号
dw_bum_list.SetRow(1)

●DWのカラムを選択する(カーソル移動?)
dw_bum_list.SetColumn("df_list")
※行スクロールはしない

●DWからデータを入手する
li_cd = dw_mei.GetItemNumber(ll_row,"cd")

●SQL実行と取得方法
直接SQL文が記述できる。行最後には;が必要
SELECT TANTO_NAME
INTO :ls_name
FROM TANTO_MST
WHERE TANTO_CODE = :li_cd;

DELETE "NYUKIN_DATA"  
  WHERE "NYUKIN_DATA"."NYU_DENNO" = :ld_番号 ;

INSERT INTO "NYUKIN_DATA" 
     ( "NYU_DENNO",   "NYU_LNO",      "TOKUI_CODE",   "NYUKIN_DATE",    "SYUBETU_CODE",  
     "GINKO_CODE",  "NYUKIN_GAKU",  "TESURYO",      "TEKIYOU",        "SHIME_FLAG", "BUSYO_CODE" ) 
  VALUES ( :ld_番号,      :ld_count,      :ls_仕入,   :lda_入金日,      :ls_入金,
     :ls_銀行,    :ld_入金,   :ld_手数料,     :ls_摘要,         ' ' ,    :ls_部門);

UPDATE MIBARAI_DATA
   SET TENKI_FLAG = '0’
WHERE (MIBARAI_KBN IN ('4′,’5′,’6′,’7’)) AND
       (TENKI_FLAG = '1’) AND
         (DEN_DATE = :lda_date);

●SQL実行結果
If Sqlca.Sqlcode <> 0 Thenでエラー

●DWとTransactionを関係付ける
dw_midasi.SetTransObject(sqlca)

●DW件数取得
FOR ld_count = 1 TO dw_meisai.rowcount()

●ロールバックとコミット
rollback;
COMMIT;

≪≪≪ユーザーインターフェース関係≫≫≫
●ウィンドウを開くと落ちる
SQL文がおかしい場合がある。DWにて正常なSQLとして編集する

●ポインターを変更する
SetPointer(Arrow!)
他には、HourGlass!など

●引き数を返し、ウィンドウを閉じる
CloseWithReturn(Parent,lstr_para)

●メッセージボックス
MessageBox("エラー","職員コードを入力して下さい。",Exclamation!)

●イベントを直ちに発生させる
TriggerEvent(cb_clear,Clicked!)

●SendMessage
Send(il_handle,256,9,Long(0,0))

●プリンタの印刷設定画面
PrintSetup()
//印刷ジョブを開始し、改ページします。
Job = PrintOpen()
dw_print.Print() ※DWの場合

開発ざれごと

Posted by nabe