수색…


소개

예제는 Progress 설정과 함께 제공된 데모 데이터베이스 인 Sports 2000 의 사본을 기반으로합니다.

진행중인 쿼리로 작업 할 때 다음을 수행해야합니다.

DEFINE 질의를하고 (테이블) 버퍼링이에 대해 작동 필드 것을 설정합니다.

OPEN 특정와 쿼리 레코드를 검색하는 방법을 정의 -clause합니다. WHERE 가능하면 정렬 ( BY / BREAK BY )

GET 수 있습니다 - 실제 데이터 FIRST , NEXT , PREV (이전) 또는 LAST 일치하는 레코드를.

통사론

  • DEFINE QUERY query-name FOR 버퍼 이름. // 하나의 버퍼에 대한 일반적인 쿼리 정의
  • DEFINE QUERY query-name FOR 버퍼 이름 1, 버퍼 이름 2. // 두 개의 버퍼 조인
  • DEFINE QUERY query-name FOR 버퍼 이름 FIELDS (field1 field2). // 필드 1과 필드 2 만 검색합니다.
  • DEFINE QUERY query-name 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의 세 번째 화면) :

여기에 이미지 설명을 입력하십시오.

다중 테이블 쿼리

이 쿼리는 Customer, Order 및 Orderline의 세 테이블을 조인합니다.

의 사용 OF 에서와 같이 문 childtable OF parenttable 인덱스가 특정 방식으로 구성되어 있다고 가정합니다. 그것은 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