同僚と私を数日間困惑させたので、誰かがこの問題に遭遇したことがあるといいのですが。
プロジェクトを PowerBuilder 12 Classic から PowerBuilder.NET に正常に変換し、正常に動作していますが、PowerBuilder.NET がデータウィンドウから SQL 構文を読み取る方法に問題が発生しています。
データウィンドウを開き、構文をコピーして SQL Server 2008 R2 に貼り付けたところ、すべて取得されました。SQL は次のとおりです (スペースを節約するために一部のフィールドが削除されていることに注意してください)。
SELECT hl7_in.intf_app_parm_id,
hl7_in.sending_app,
hl7_in.msg_typ,
hl7_in.process_ind,
hl7_in.hl7_in_seq_no,
hl7_in.msg_evnt_typ,
hl7_in.wrng_msg_cnt,
pt.pt_middle_name,
hl7_in.resolved_ind,
hl7_in.pt_id,
hl7_in.hl7_msg_cntl_id,
hl7_in.msg_txt,
intf_app_parm.app_parm_desc,
intf_engine.engine_name
FROM {oj hl7_in LEFT OUTER JOIN pt ON hl7_in.pt_id = pt.pt_id}, {oj intf_app_parm LEFT OUTER JOIN intf_engine ON intf_app_parm.intf_engine_id = intf_engine.intf_engine_id}
WHERE ( hl7_in.intf_app_parm_id = intf_app_parm.intf_app_parm_id ) and
( ( intf_app_parm.direction_ind = 'I' ) )
しかし、実行時にコードが実行されると、SQL エラーが発生します (SQL は機能しますが)。
SQLSTATE = 42000
Microsoft SQL Native Client
The multi-part identifier "intf_app_parm.intf_engine_id" could not be found
エラーの原因を突き止めようとした後 (上記の SQL の両方の結合が正常に機能するため)、デバッガーを使用してデータウィンドウをチェックアウトする必要があると判断しました。それが私たちが行ったことであり、その理由を突き止めました (以下の SQL を参照してください)。
SELECT hl7_in.intf_app_parm_id,
hl7_in.sending_app,
hl7_in.msg_typ,
hl7_in.process_ind,
hl7_in.hl7_in_seq_no,
hl7_in.msg_evnt_typ,
hl7_in.wrng_msg_cnt,
pt.pt_middle_name,
hl7_in.resolved_ind,
hl7_in.pt_id,
hl7_in.hl7_msg_cntl_id,
hl7_in.msg_txt,
intf_app_parm.app_parm_desc,
intf_engine.engine_name
FROM hl7_in LEFT OUTER JOIN pt ON hl7_in.pt_id = pt.pt_id
LEFT OUTER JOIN intf_engine ON intf_app_parm.intf_engine_id = intf_engine.intf_engine_id
WHERE ( hl7_in.intf_app_parm_id = intf_app_parm.intf_app_parm_id ) and
( ( intf_app_parm.direction_ind = 'I' ) )
FROM ステートメントを見ると、PowerBuilder が pt.pt_id の後のカンマ (,) と 2 番目の結合 (intf_app_parm) の開始部分を削除することによって、そのステートメントを変更することを決定したことがわかります。元の PB12 Classic コードをチェックして、そこにも問題があるかどうかを確認することにしましたが、この奇妙なことはそこでは発生しません (retrieve ステートメントは正しく読み取られます)。
データウィンドウ自体は、アプリケーションのどの時点でも変更されず、SQL ステートメントも変更されません。PowerBuilder.NET の経験がある人は、これが起こるのを見たことがありますか? その場合、問題を解決するために何をしましたか (これは複数のデータ ウィンドウで発生しています)。
お時間をいただきありがとうございます!