Надеюсь, кто-то сталкивался с этим вопросом раньше, так как он поставил в тупик коллегу и меня на несколько дней.
Мы успешно преобразовали наш проект из 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, а также начальную часть второго соединения (intf_app_parm). Мы решили проверить исходный код PB12 Classic, чтобы увидеть, может быть, это тоже было проблемой, но этого странного не происходит (оператор получения считывается правильно).
Само окно данных не изменяется ни в одной точке приложения, а также не изменяется оператор SQL. Кто-нибудь, кто имел опыт работы с PowerBuilder.NET, когда-либо видел это? Если да, что вы сделали, чтобы решить проблему (это происходит в нескольких окнах данных).
Спасибо, что уделили время!