J'espère que quelqu'un a déjà rencontré ce problème, car il a bloqué un collègue et moi pendant quelques jours.PowerBuilder.NET ne lit pas la syntaxe SQL de Datawindow correctement
Nous avons converti avec succès notre projet de PowerBuilder 12 Classic à PowerBuilder.NET et les choses tournent décemment, mais nous éprouvons un problème avec la façon dont PowerBuilder.NET lit la syntaxe SQL à partir d'une Datawindow.
En ouvrant la fenêtre de données, j'ai copié la syntaxe et l'ai collée dans SQL Server 2008 R2, et tout a été récupéré. Le SQL est inférieur (notez que certains champs sont supprimés pour économiser l'espace)
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'))
Mais, lorsque le code est exécuté lors de l'exécution, je reçois une erreur SQL (même si le SQL fonctionne)
SQLSTATE = 42000
Microsoft SQL Native Client
The multi-part identifier "intf_app_parm.intf_engine_id" could not be found
Après avoir essayé de comprendre ce qui causait l'erreur (puisque les deux jointures sur le SQL ci-dessus fonctionnent bien), j'ai décidé que nous devions extraire la fenêtre de données via le débogueur. Eh bien, c'est ce que nous avons fait, et nous avons compris pourquoi (S'il vous plaît voir le ci-dessous 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'))
Si vous jetez un oeil à la FROM, vous verrez que PowerBuilder a décidé de modifier cette déclaration en supprimant la virgule (,) après pt.pt_id ainsi que la partie début de la seconde jointure (intf_app_parm). Nous avons décidé de vérifier le code original PB12 Classic pour voir si c'était un problème là aussi, mais cette chose étrange ne se produit pas là (l'instruction retrieve est lue correctement).
La fenêtre de données elle-même n'est modifiée à aucun moment de l'application, et l'instruction SQL n'est pas non plus modifiée. Quelqu'un qui a déjà eu l'expérience avec PowerBuilder.NET verra-t-il cela arriver? Si oui, qu'avez-vous fait pour résoudre le problème (cela se produit sur plus d'une fenêtre de données).
Nous vous remercions de votre temps!
Nous utilisons également PowerBuilder 12.1 Construire 6639 –
Le DataWindow en utilisant un choix graphique? Sinon c'est la première chose que j'essaierais. –
Oui, nous sommes. J'ai essayé de convertir la fenêtre de données à Syntax Design, et quand il a été configuré comme ça, ça marche, mais presque toutes les colonnes de la fenêtre de données sont manquantes. –