2011-07-11 14 views
2

これまでに、同僚と私を数日間悩ませてしまったので、PowerBuilder.NETがDatawindowのSQL構文を正しく読んでいない

私たちのプロジェクトを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'))  

である。しかし、コードが実行時に実行されたとき、私は

SQLSTATE = 42000 
Microsoft SQL Native Client 
The multi-part identifier "intf_app_parm.intf_engine_id" could not be found 
(SQLが動作するにもかかわらず)SQLエラーを取得します

上記の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クラシックコードで問題があったかどうかを確認することにしましたが、この奇妙なことは起こりません(リトリーブ文は正しく読み込まれます)。

データウィンドウ自体はアプリケーション中のどの時点でも変更されず、SQL文も変更されません。 PowerBuilder.NETの経験がある人なら誰でもこれが起こるでしょうか?その場合は、問題を解決するために何をしましたか(これは複数のデータウィンドウで発生しています)。

ありがとうございました!

+0

我々はまた、PowerBuilderの12.1ビルド6639 –

+0

を使用していることはデータウィンドウですグラフィカルな選択を使用して?それが最初のことでなければ、私は試してみるだろう。 –

+0

はい、あります。 データウィンドウをシンタックスデザインに変換しようとしましたが、それがうまく動作するように設定されていても、データウィンドウのほとんどすべてのカラムがありません。 –

答えて

1

おそらく、ODBC仕様に準拠するように構築された構文です。中カッコはODBCエスケープシーケンスです。開発中にODBC接続(DBプロファイル)を使用し、アプリケーションでネイティブドライバを使用してデータベースに接続している可能性がありますか、またはその逆ですか?

SQL Server ODBCドライバは、SQL Serverデータベースエンジンで直接サポートされていない場合、すべてのODBC構文をT-SQLに変換します。

また、SQLの相違点は、where節の部分を囲む中括弧が1つではなく、他の部分ではないことです。 :)

*この後、長年の編集私はちょうどPB12.5がアップSQL Server 2008のをサポートしていないことを学びましたが、2000 & 2005をサポートしていますが、私のPowerBuilderの2017は、2014のSQL Server 2008、2002への接続をサポートしています、2016はヘルプファイルから直接取得したものです。 PB 11.5は、新しいプロバイダを使用している限り、SQL Server 2008をサポートしています。 1つの検索引数しか入れられないという問題がありました。私は自分のキャリアでは見たことのない2列目に無効な構文を与え、PB 3のすべてのバージョンを上から使用しました。

あなたはここでより多くの情報を得ることができます。

のMicrosoft ODBCプログラマーズリファレンス:ODBC SQL文法のための http://msdn.microsoft.com/en-us/library/....

、具体的に: http://msdn.microsoft.com/en-us/library/....

関連する問題