0

誰かがこのABLステートメントを理解するかもしれません...

FOR EACH <table> BREAK BY <field as breakgroup>: 
   ....
   IF FIRST-OF(<breakgroup>) THEN DO:
       ....
   END.
   ....
   IF LAST-OF(<breakgroup>) THEN DO:
       ....
   END.
   ....
END.

上記のコードは、基本的にテーブル内の個々のレコードをループし、実行の特定の部分でいくつかのコード (....) を実行します。注目すべき興味深いのは、FIRST-OF ステートメントと LAST-OF ステートメントで、<breakgroup>値が変化し、データ集計に役立ちます。

おそらくいくつかのVBAでもSQLを使用して同じロジックを実装/複製する方法を誰かが知っていますか?

4

1 に答える 1

2

まず、OpenEdge ABL とは異なり、SQL は 4GL ではないことに注意してください。それ自体は「コードを実行する」ことを想定していないため、別のプログラミング言語を使用してデータベースに対して SQL ステートメントを実行し、選択したレコードを取得してから、使用している言語で操作する必要があります。

ABL FIRST-OF または LAST-OF ステートメントに相当するものを取得するには、SQL FIRST() および LAST() 関数が役立ちます ( First()およびLast()で説明されています)。

基本的に、これは、必要なすべてのテーブル エントリを選択するために、少なくとも 3 つの異なる SQL Select ステートメントを実行する必要があることを意味します。特定の基準を満たすエントリのサブセレクションのみ) と、そのようなグループの最後のエントリを選択するものです。例えば

SELECT LAST(CustomerType) WHERE CustomerType = "ValuedCustomer"

VBA をプログラミング言語として使用する場合は、たとえば次のようなコマンドを使用して SQL ステートメントを実行できます。

DoCmd.RunSQL "SELECT LAST(CustomerType) WHERE CustomerType = 'ValuedCustomer'"

そのコマンドの MSDN エントリは次のとおりです

それが役に立ったことを願っています!

于 2013-03-25T12:24:23.077 に答える