サーチ…
前書き
この例は、Progressのセットアップで提供されたデモデータベースのSports 2000
コピーに基づいています。
進捗状況でクエリを操作するときは、次のことが必要です。
クエリをDEFINE
、どのバッファ(テーブル)とそれが動作するかを設定します。
レコードを取得する方法を定義するWHERE
句を指定してクエリをOPEN
します。おそらくソート( BY
/ BREAK BY
)
GET
であることができる-実際のデータFIRST
、 NEXT
、 PREV
(前)または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、およびOrderlineの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