私は最近、ある会社で新しい仕事を始めました。私の最初の仕事は、かなり古いソフトウェアを更新することです。
大きな裏話がありますが、基本的にソフトウェアは PB8 (1997 年頃) で書かれており、社内の誰も (私を含めて) PowerBuilder の経験がありません。代替品は承認されており、開発可能です。
PowerBuilder 12.5 のライセンスを持っているので、PB12.5 Classic を使用してすべてを実行しています。元の開発者にサポートを求めることができず、ドキュメントもありません。
私が理解しようとしていることの 1 つは、将来的に大きな助けになることですが、関数が定義されている場所と変数が値を取得する場所を決定する方法です。
現在取り組んでいる例は、次のシナリオです。タブ付きのデータ ウィンドウがあり、tab_detail
各タブには、ツリー リストにある小さなオレンジ色の男性がさまざまに表示されます。
これらの 1 つが呼び出されdw_detail
、データの貼り付けが可能になります。他のタブではデータの貼り付けが許可されていませんが、許可したいと思います。次のコードをdw_detail
含むイベントがあります。rbuttondown()
Window w_parentwin
If ib_add_mode Or ib_chg_mode Then
w_parentwin = Parent.GetParent().GetParent()
m_dwpaste m_pop_paste
m_pop_paste = CREATE m_dwpaste
m_pop_paste.idw_data = This
If ii_agent_code > 0 And Not IsNull(id_period) And Clipboard() <> "" Then
m_pop_paste.m_popup.m_paste.Enabled = TRUE
Else
m_pop_paste.m_popup.m_paste.Enabled = FALSE
End If
m_pop_paste.m_popup.PopMenu(w_parentwin.PointerX(), w_parentwin.PointerY())
DESTROY(m_pop_paste)
End If
rbuttondown()
そのコードをタブ番号 2 ( )のイベントに追加すると、データ ウィンドウdw_adjustment
内で右クリックするとタブ 2 で貼り付けが可能になりますが、データはタブのフィールドではなくタブ内のフィールドに貼り付けられます。dw_adjustment
dw_detail
dw_adjustment
コードのデバッグとステップ実行を試みましたが、変数ウィンドウに何千もの値があり、検索する機能がないと、上記で使用されている変数とその値が見つからないか、データがdw_detail
タブではなくタブにdw_adjustment
貼り付けられる理由を見つけることができませんタブに貼り付けdw_adjustment
ます。
基本的に、どこを見ればいいのか、上記が何をしているのか、クリックしたタブではなくすべてがタブ1に貼り付けられる理由について、役立つヒントを探しています。
別の場所のコードからさらに詳細が必要な場合、またはより多くの情報が必要な場合は、喜んで提供します。
関が示唆したm_popup
ように、ダブルクリックするとwf_pastereturn()
次のように表示されました。
Integer li_idx, li_rows, li_dwrows, li_comm, li_seqno
String ls_approval_type
If tab_detail.tabpage_details.dw_detail.RowCount() > 0 Then
li_idx = 1
li_dwrows = tab_detail.tabpage_details.dw_detail.RowCount()
Do Until li_idx > li_dwrows
ls_approval_type = tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx]
If IsNull(ls_approval_type) or ls_approval_type = "" Then
tab_detail.tabpage_details.dw_detail.DeleteRow(li_idx)
Else
li_idx++
End If
li_dwrows = tab_detail.tabpage_details.dw_detail.RowCount()
Loop
End If
If li_dwrows > 0 Then
li_seqno = Long(tab_detail.tabpage_details.dw_detail.Object.seq_no [li_dwrows])
End If
li_seqno += 10
If Clipboard() <> "" Then
If tab_detail.tabpage_details.dw_detail.ImportClipboard(1, li_rows, 1, 4, 3) <= 0 Then
MessageBox("Invalid Data", "Unable to paste!", StopSign!)
Return -1
End If
li_rows = tab_detail.tabpage_details.dw_detail.RowCount()
li_dwrows++
For li_idx = li_dwrows To li_rows
tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx] = trim(tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx])
tab_detail.tabpage_details.dw_detail.Object.approval_no [li_idx] = trim(tab_detail.tabpage_details.dw_detail.Object.approval_no [li_idx])
tab_detail.tabpage_details.dw_detail.Object.agent_code [li_idx] = ii_agent_code
tab_detail.tabpage_details.dw_detail.Object.period [li_idx] = id_period
li_comm = f_new_commission(Long(tab_detail.tabpage_details.dw_detail.Object.value_of_work[li_idx]), id_period)
tab_detail.tabpage_details.dw_detail.Object.levy_payable[li_idx]= &
inv_rate.of_CalculateLevyPayable (Long(tab_detail.tabpage_details.dw_detail.Object.value_of_work[li_idx]), id_period)
tab_detail.tabpage_details.dw_detail.Object.comm_deductable [li_idx] = li_comm
tab_detail.tabpage_details.dw_detail.Object.commission [li_idx] = li_comm
tab_detail.tabpage_details.dw_detail.Object.seq_no [li_idx] = li_seqno
li_seqno += 10
tab_detail.tabpage_details.dw_detail.Object.agent_return_detail_create_date[li_idx] = Today()
tab_detail.tabpage_details.dw_detail.Object.agent_return_detail_create_user[li_idx] = SQLCA.Logid
Next
Clipboard("")
Return 0
Else
Return -1
End If
windowsSelectedTab
プロパティを使用するように関数を変更しました。データはタブに貼り付けられるようになりましたが、間違った入力フィールドに貼り付けられます。さらに調べたところ、ImportClipboard
関数のデータ列が並んでいません。
選択したデータベース列の順序を変更する最良の方法は?
これがタブの意味のスクリーンショットです。
したがって、メイン プログラム ウィンドウ内には上記のタブがあり、各タブ (入力フィールドがある場所) 内には、dw_
プレフィックスでラベル付けされたデータ ウィンドウがあります。
助けてくれてありがとう。