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