2016-04-18 10 views
0

私は、主目的のテンポラリテーブルを中心にしたクラスを持っています。私は入力として同じテンポラリテーブルを取るコンストラクタを作成したい。静的テンポラリテーブルを入力として取得するコンストラクタ(プログレスABL)

これまでのところ、コンパイラは、一時テーブルを入力パラメータとして渡す試みで、チョークします。代わりにテーブルハンドルを使用すると動作します。しかし、私はむしろ動的なテーブルから静的なテーブルにコピーしたくないでしょう。

進捗状況では、テーブルがコンパイル時に一致することが必要ですが、同じであることはわかります.iファイルに定義されています。

テーブルを整列する簡単な方法はありますか、それとも一度に1つのフィールドを解析することができますか?

+0

あなたは.iを変更しました。コンパイラのキャッシュは、呼び出し元のプログラムとクラスの2つの異なるバージョンを使用しています。そのため、コンパイルエラーが発生します。 –

+0

いくつかのコードを投稿できますか?あなたのアイデアはかなり実現可能なようです。彼らが同じであると知っているということはどういう意味ですか?静的な場合は、常に同じです。あるいは私は何かを誤解していますか? – bupereira

答えて

0

私の魅力のように動作します。あなたはまたにより-REF一時テーブルを渡すことができ

ROUTINE-LEVEL ON ERROR UNDO, THROW. 

USING Test.TTOO.* FROM PROPATH. 

DEFINE VARIABLE oWrapper AS TempTableWrapper NO-UNDO . 

{Test/TTOO/ttCustomer.i} 

/* *************************** Main Block *************************** */ 

CREATE ttCustomer. 
ASSIGN ttCustomer.CustNum = 42 
     ttCustomer.Name = "It works" . 

oWrapper = NEW TempTableWrapper(TABLE ttCustomer) . 

CLASS Test.TTOO.TempTableWrapper: 

    {Test/TTOO/ttCustomer.i} 

    CONSTRUCTOR PUBLIC TempTableWrapper (TABLE ttCustomer): 

     FOR EACH ttCustomer: 
      DISPLAY ttCustomer.CustNum ttCustomer.Name . 
     END. 

    END CONSTRUCTOR. 
END CLASS. 

と、発信者

oWrapper = NEW TempTableWrapper(TABLE ttCustomer BY-REFERENCE) . 

をしかし、その後、一時テーブルのデータは、中availalbeですBY-REFERENCEとしてのコンストラクタは、呼び出しの間だけ呼び出し先のtemp-tableを「オーバーラップ」します。

永続的な「BY-REFERENCE」の場合は、呼び出しとパラメータにBINDキーワードを使用します。この場合、呼び出し先は一時表をREFERENCE-ONLYとして定義する必要があります。

メモ:インクルードファイル内に一時テーブルを定義する必要はありません(少なくとも私は推奨しますが)。実行時およびコンパイル時に、スキーマは一致する必要があります。

コンパイラが呼び出しを気に入らない場合は、クラスr-codeを削除して再コンパイルします。

+0

ここでのトリックは、入力テーブルを内部の一時テーブルにコピーする必要があることです。私は "不明またはあいまいなテーブル"エラー –

+0

を続けているので、これはBY-VALUE(BY-REFERENCEの反対)です。上のコードサンプルの最初の2つのブロックはまったく同じです。このプロシージャはttCustomerの新しいインスタンスを作成し、そのクラスはその専用コピーを保持します。いくつかのコードを共有していますか? –

+0

待って、それは本当に簡単ですか?私はこれからテーブルをコピーする必要はありません:テーブル:テーブル?それはちょうど自動的に起こる?ドキュメントのどこにもその事実が見つかりませんでした。 –

関連する問題