サーチ…


前書き

この例は、Progressのセットアップで提供されたデモデータベースのSports 2000コピーに基づいています。

進捗状況でクエリを操作するときは、次のことが必要です。

クエリをDEFINE 、どのバッファ(テーブル)とそれが動作するかを設定します。

レコードを取得する方法を定義するWHERE句を指定してクエリをOPENします。おそらくソート( BY / BREAK BY

GETであることができる-実際のデータFIRSTNEXTPREV (前)またはLAST一致するレコードを。

構文

  • DEFINE QUERY照会名FORバッファー名。 // 1つのバッファの一般的なクエリ定義
  • DEFINE QUERY照会名FORバッファー名1、バッファー名2。 // 2つのバッファに結合する
  • DEFINE QUERY照会名FORバッファー名FIELDS(field1 field2)。 //フィールド1とフィールド2のみを検索する
  • DEFINE QUERY照会名FORバッファー名EXCEPT(field3)。 // field3以外のすべてのフィールドを取得します。

基本クエリ

/* Define a query named q1 for the Customer table */
DEFINE QUERY q1 FOR Customer.
/* Open the query for all Customer records where the state is "tx" */
OPEN QUERY q1 FOR EACH Customer WHERE Customer.state ='TX'.                                                                                                                                                                               
/* Get the first result of query q1 */
GET FIRST q1.                                                                                                                                                                                                                   

/* Repeat as long as query q1 has a result */
DO WHILE NOT QUERY-OFF-END('q1'):          
    /* Display Customer.Name in a frame called frame1 with 10 rows */
    DISPLAY Customer.Name WITH FRAME frame1 10 DOWN.
    /* Move down the target line where to display the next record */
    DOWN WITH FRAME frame1.
    /* Get the next result of query q1 */
    GET NEXT q1.
END.
/* Display how many results query q1 had. */
DISPLAY NUM-RESULTS('q1') LABEL "Number of records".

/* Close the query */
CLOSE QUERY q1.                                              

出力(Windows GUIの3番目の画面):

ここに画像の説明を入力

マルチテーブルクエリ

このクエリは、Customer、Order、およびOrde​​rlineの3つのテーブルを結合します。

childtable OF parenttableようなOFステートメントの使用は、インデックスが特定の方法で構築されていることを前提としています。それはsports2000-データベースのケースです。

DEFINE QUERY q1 FOR Customer, Order, Orderline.

OPEN QUERY q1 FOR EACH Customer WHERE Customer.state = 'TX'
    , EACH Order OF customer WHERE order.custnum < 1000
    , EACH orderline OF order.

GET FIRST q1.
DO WHILE NOT QUERY-OFF-END('q1'):
    DISPLAY Customer.Name Order.OrderNum OrderLine.LineNum 
        WITH FRAME frameA 20 DOWN.
    DOWN WITH FRAME frameA.
    GET NEXT q1.
END.

CLOSE QUERY q1.

結果:Windows GUIの場合:

ここに画像の説明を入力

次、最初、前と最後を使用してクエリを移動する

DEFINE QUERY q1 FOR Customer.

OPEN QUERY q1 FOR EACH Customer.

GET FIRST q1.

loop:
REPEAT:
    IF AVAILABLE Customer THEN DO:
        DISPLAY Customer.NAME CustNum WITH FRAME frClient TITLE "Client data".
        
        DISPLAY
            "(P)revious" SKIP 
            "(N)ext" SKIP
            "(F)irst" SKIP
            "(L)ast" SKIP
            "(Q)uit" SKIP
            WITH FRAME frInstr
                TITLE "Instructions".
    END.
    
    READKEY.

    IF LASTKEY = ASC("q") THEN LEAVE loop.
    ELSE IF LASTKEY = ASC("n") THEN
        GET NEXT q1.
    ELSE IF LASTKEY = ASC("p") THEN
        GET PREV q1.
    ELSE IF LASTKEY = ASC("l") THEN
        GET LAST q1.
    ELSE IF LASTKEY = ASC("f") THEN
        GET FIRST q1.

END.

MESSAGE "Bye" VIEW-AS ALERT-BOX.


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow