home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a084 / 2.ddi / CKSAMPLE / BQUERY.SPR < prev    next >
Encoding:
Text File  |  1993-05-25  |  35.9 KB  |  1,198 lines

  1. *       *********************************************************
  2. *       *                                                         
  3. *       * 05/24/93             BQUERY.SPR                08:49:22 
  4. *       *                                                         
  5. *       *********************************************************
  6. *       *                                                         
  7. *       * Steven Hsu, Wayne Lampel                                
  8. *       *                                                         
  9. *       * Copyright (c) 1993 Microsoft                            
  10. *       * One Microsoft Way                                       
  11. *       * Redmond, WA  98052                                      
  12. *       *                                                         
  13. *       * Description:                                            
  14. *       * This program was automatically generated by GENSCRN.    
  15. *       *                                                         
  16. *       *********************************************************
  17.  
  18. DO CASE
  19. CASE _WINDOWS
  20.  
  21.     
  22.     #REGION 0
  23.     REGIONAL m.currarea, m.talkstat, m.compstat
  24.     
  25.     IF SET("TALK") = "ON"
  26.         SET TALK OFF
  27.         m.talkstat = "ON"
  28.     ELSE
  29.         m.talkstat = "OFF"
  30.     ENDIF
  31.     m.compstat = SET("COMPATIBLE")
  32.     SET COMPATIBLE FOXPLUS
  33.     
  34.     m.rborder = SET("READBORDER")
  35.     SET READBORDER ON
  36.     
  37.     *       *********************************************************
  38.     *       *                                                         
  39.     *       *               Windows Window definitions                
  40.     *       *                                                         
  41.     *       *********************************************************
  42.     *
  43.     
  44.     IF NOT WEXIST("buildquery") ;
  45.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.PJX" ;
  46.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.SCX" ;
  47.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.MNX" ;
  48.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.PRG" ;
  49.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.FRX" ;
  50.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.QPR"
  51.         DEFINE WINDOW buildquery ;
  52.             AT  0.000, 0.000  ;
  53.             SIZE 21.462,73.667 ;
  54.             TITLE " Build Query " ;
  55.             FONT "MS Sans Serif", 8 ;
  56.             STYLE "B" ;
  57.             FLOAT ;
  58.             NOCLOSE ;
  59.             SHADOW ;
  60.             NOMINIMIZE ;
  61.             DOUBLE
  62.         MOVE WINDOW buildquery CENTER
  63.     ENDIF
  64.     
  65.     
  66.     *       *********************************************************
  67.     *       *                                                         
  68.     *       *          BQUERY/Windows Setup Code - SECTION 2          
  69.     *       *                                                         
  70.     *       *********************************************************
  71.     *
  72.     
  73.     #REGION 1
  74.     DO buildtlist
  75.     
  76.     IF (ALEN(tablelist) < 2)
  77.         ?? CHR(7)
  78.         WAIT WINDOW "No tables in database"
  79.         RETURN
  80.     ENDIF
  81.     
  82.     DEFINE POPUP bqselectpop SCROLL MARGIN MARK " " MOVER
  83.     DEFINE POPUP bqfrompop   SCROLL MARGIN MARK " "
  84.     
  85.     DO buildfpop
  86.     DO buildspop
  87.     
  88.     
  89.     *       *********************************************************
  90.     *       *                                                         
  91.     *       *              BQUERY/Windows Screen Layout               
  92.     *       *                                                         
  93.     *       *********************************************************
  94.     *
  95.     
  96.     #REGION 1
  97.     IF WVISIBLE("buildquery")
  98.         ACTIVATE WINDOW buildquery SAME
  99.     ELSE
  100.         ACTIVATE WINDOW buildquery NOSHOW
  101.     ENDIF
  102.     @ 1.231,54.333 GET ExitAction ;
  103.         PICTURE "@*VT \! E\<xecute ;\<Edit...;C\<lear;\?Close" ;
  104.         SIZE 1.769,16.667,0.769 ;
  105.         DEFAULT 1 ;
  106.         FONT "MS Sans Serif", 8 ;
  107.         STYLE "B"
  108.     @ 0.462,1.500 GET FromButton ;
  109.         PICTURE "@*VN \<From..." ;
  110.         SIZE 1.769,8.000,1.000 ;
  111.         DEFAULT 1 ;
  112.         FONT "MS Sans Serif", 8 ;
  113.         STYLE "B" ;
  114.         VALID _qg30iwsfz()
  115.     @ 2.615,1.667 GET FromPop ;
  116.          PICTURE "@&N" ;
  117.         POPUP BQFromPop ;
  118.         SIZE 6.923,20.800 ;
  119.         DEFAULT " " ;
  120.         FONT "MS Sans Serif", 8 ;
  121.         STYLE ""
  122.     @ 2.615,21.167 GET SelectPop ;
  123.          PICTURE "@&N" ;
  124.         POPUP BQSelectPo ;
  125.         SIZE 6.923,35.200 ;
  126.         DEFAULT " " ;
  127.         FONT "MS Sans Serif", 8 ;
  128.         STYLE "" ;
  129.         VALID _qg30iwstg()
  130.     @ 0.462,21.000 GET SelectButton ;
  131.         PICTURE "@*VN \<Select..." ;
  132.         SIZE 1.769,10.000,0.000 ;
  133.         DEFAULT 1 ;
  134.         FONT "MS Sans Serif", 8 ;
  135.         STYLE "B" ;
  136.         VALID _qg30iwsxh()
  137.     @ 10.308,1.667 GET Dummy ;
  138.         PICTURE "@*VN \<Join..." ;
  139.         SIZE 1.769,10.000,1.000 ;
  140.         DEFAULT 1 ;
  141.         FONT "MS Sans Serif", 8 ;
  142.         STYLE "B" ;
  143.         VALID _qg30iwt2e()
  144.     @ 10.308,14.167 GET wherebut ;
  145.         PICTURE "@*VN \<Where..." ;
  146.         SIZE 1.769,10.000,1.000 ;
  147.         DEFAULT 1 ;
  148.         FONT "MS Sans Serif", 8 ;
  149.         STYLE "B" ;
  150.         VALID _qg30iwt6y()
  151.     @ 12.615,1.833 GET EditWhere ;
  152.          PICTURE "@&N" ;
  153.         FROM WhereList ;
  154.         RANGE 1, ALEN(WhereList) - 1 ;
  155.         SIZE 8.077,83.800 ;
  156.         DEFAULT 1 ;
  157.         FONT "MS Sans Serif", 8 ;
  158.         VALID _qg30iwtbd()
  159.     
  160.     IF NOT WVISIBLE("buildquery")
  161.         ACTIVATE WINDOW buildquery
  162.     ENDIF
  163.     
  164.     READ CYCLE MODAL ;
  165.         VALID _qg30iwth1() ;
  166.         ACTIVATE _qg30iwth6() ;
  167.         WITH View
  168.     
  169.     RELEASE WINDOW buildquery
  170.     
  171.     #REGION 0
  172.     
  173.     SET READBORDER &rborder
  174.     
  175.     IF m.talkstat = "ON"
  176.         SET TALK ON
  177.     ENDIF
  178.     IF m.compstat = "ON"
  179.         SET COMPATIBLE ON
  180.     ENDIF
  181.     
  182.     
  183.     *       *********************************************************
  184.     *       *                                                         
  185.     *       *               BQUERY/Windows Cleanup Code               
  186.     *       *                                                         
  187.     *       *********************************************************
  188.     *
  189.     
  190.     #REGION 1
  191.     RELEASE POPUP bqselectpop
  192.     RELEASE POPUP bqfrompop
  193.     RETURN
  194.     
  195.     
  196.  
  197. CASE _DOS
  198.  
  199.     
  200.     #REGION 0
  201.     REGIONAL m.currarea, m.talkstat, m.compstat
  202.     
  203.     IF SET("TALK") = "ON"
  204.         SET TALK OFF
  205.         m.talkstat = "ON"
  206.     ELSE
  207.         m.talkstat = "OFF"
  208.     ENDIF
  209.     m.compstat = SET("COMPATIBLE")
  210.     SET COMPATIBLE FOXPLUS
  211.     
  212.     *       *********************************************************
  213.     *       *                                                         
  214.     *       *                MS-DOS Window definitions                
  215.     *       *                                                         
  216.     *       *********************************************************
  217.     *
  218.     
  219.     IF NOT WEXIST("buildquery") ;
  220.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.PJX" ;
  221.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.SCX" ;
  222.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.MNX" ;
  223.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.PRG" ;
  224.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.FRX" ;
  225.         OR UPPER(WTITLE("BUILDQUERY")) == "BUILDQUERY.QPR"
  226.         DEFINE WINDOW buildquery ;
  227.             FROM INT((SROW()-20)/2),INT((SCOL()-78)/2) ;
  228.             TO INT((SROW()-20)/2)+19,INT((SCOL()-78)/2)+77 ;
  229.             TITLE " Build Query " ;
  230.             FLOAT ;
  231.             NOCLOSE ;
  232.             SHADOW ;
  233.             NOMINIMIZE ;
  234.             DOUBLE ;
  235.             COLOR SCHEME 1
  236.     ENDIF
  237.     
  238.     
  239.     *       *********************************************************
  240.     *       *                                                         
  241.     *       *          BQUERY/MS-DOS Setup Code - SECTION 2           
  242.     *       *                                                         
  243.     *       *********************************************************
  244.     *
  245.     
  246.     #REGION 1
  247.     DO buildtlist
  248.     
  249.     IF (ALEN(tablelist) < 2)
  250.         ?? CHR(7)
  251.         WAIT WINDOW "No tables in database"
  252.         RETURN
  253.     ENDIF
  254.     
  255.     DEFINE POPUP bqselectpop SCROLL MARGIN MARK " " MOVER
  256.     DEFINE POPUP bqfrompop   SCROLL MARGIN MARK " "
  257.     
  258.     DO buildfpop
  259.     DO buildspop
  260.     
  261.     
  262.     *       *********************************************************
  263.     *       *                                                         
  264.     *       *               BQUERY/MS-DOS Screen Layout               
  265.     *       *                                                         
  266.     *       *********************************************************
  267.     *
  268.     
  269.     #REGION 1
  270.     IF WVISIBLE("buildquery")
  271.         ACTIVATE WINDOW buildquery SAME
  272.     ELSE
  273.         ACTIVATE WINDOW buildquery NOSHOW
  274.     ENDIF
  275.     @ 2,59 GET ExitAction ;
  276.         PICTURE "@*VT \! E\<xecute ;\<Edit...;C\<lear;\?Close" ;
  277.         SIZE 1,16,1 ;
  278.         DEFAULT 1
  279.     @ 0,1 GET FromButton ;
  280.         PICTURE "@*VN \<From..." ;
  281.         SIZE 1,9,1 ;
  282.         DEFAULT 1 ;
  283.         VALID _qg30iwuuc()
  284.     @ 1,1 GET FromPop ;
  285.          PICTURE "@&N" ;
  286.         POPUP BQFromPop ;
  287.         SIZE 8,24 ;
  288.         DEFAULT " " ;
  289.         COLOR SCHEME 2
  290.     @ 1,26 GET SelectPop ;
  291.          PICTURE "@&N" ;
  292.         POPUP BQSelectPo ;
  293.         SIZE 8,31 ;
  294.         DEFAULT " " ;
  295.         VALID _qg30iwv7u() ;
  296.         COLOR SCHEME 2
  297.     @ 0,26 GET SelectButton ;
  298.         PICTURE "@*VN \<Select..." ;
  299.         SIZE 1,11,0 ;
  300.         DEFAULT 1 ;
  301.         VALID _qg30iwvc6()
  302.     @ 10,1 GET Dummy ;
  303.         PICTURE "@*VN \<Join..." ;
  304.         SIZE 1,10,1 ;
  305.         DEFAULT 1 ;
  306.         VALID _qg30iwvgi()
  307.     @ 10,14 GET wherebut ;
  308.         PICTURE "@*VN \<Where..." ;
  309.         SIZE 1,10,1 ;
  310.         DEFAULT 1 ;
  311.         VALID _qg30iwvk7()
  312.     @ 11,1 GET EditWhere ;
  313.          PICTURE "@&N" ;
  314.         FROM WhereList ;
  315.         RANGE 1, ALEN(WhereList) - 1 ;
  316.         SIZE 7,74 ;
  317.         DEFAULT 1 ;
  318.         VALID _qg30iwvou() ;
  319.         COLOR SCHEME 2
  320.     
  321.     IF NOT WVISIBLE("buildquery")
  322.         ACTIVATE WINDOW buildquery
  323.     ENDIF
  324.     
  325.     READ CYCLE MODAL ;
  326.         VALID _qg30iwvth() ;
  327.         ACTIVATE _qg30iwvtm() ;
  328.         WITH View
  329.     
  330.     RELEASE WINDOW buildquery
  331.     
  332.     #REGION 0
  333.     IF m.talkstat = "ON"
  334.         SET TALK ON
  335.     ENDIF
  336.     IF m.compstat = "ON"
  337.         SET COMPATIBLE ON
  338.     ENDIF
  339.     
  340.     
  341.     *       *********************************************************
  342.     *       *                                                         
  343.     *       *               BQUERY/MS-DOS Cleanup Code                
  344.     *       *                                                         
  345.     *       *********************************************************
  346.     *
  347.     
  348.     #REGION 1
  349.     RELEASE POPUP bqselectpop
  350.     RELEASE POPUP bqfrompop
  351.     RETURN
  352.     
  353.     
  354.  
  355. ENDCASE
  356.  
  357.  
  358. *       *********************************************************
  359. *       *                                                         
  360. *       * _QG30IWSFZ           FromButton VALID                   
  361. *       *                                                         
  362. *       * Function Origin:                                        
  363. *       *                                                         
  364. *       * From Platform:       Windows                            
  365. *       * From Screen:         BQUERY,     Record Number:    3    
  366. *       * Variable:            FromButton                         
  367. *       * Called By:           VALID Clause                       
  368. *       * Snippet Number:      1                                  
  369. *       *                                                         
  370. *       *********************************************************
  371. *
  372. FUNCTION _qg30iwsfz     &&  FromButton VALID
  373. #REGION 1
  374. PRIVATE i, tablename, COUNT, INLIST
  375.  
  376. DO from.spr
  377. DO buildfpop
  378.  
  379. DO buildslist
  380. DO buildspop
  381.  
  382. DO buildclist
  383. *
  384. *    Rebuild WHERE list. Must do this, because the removal of a
  385. *    table could mean some of these columns can no longer be
  386. *    SELECTed.
  387. *
  388. i = 1 && account for deletes from array which moves everything up
  389. DO WHILE (i < ALEN(wherelist))
  390.     *
  391.     *        Extract table names from WHERE condition
  392.     *
  393.     restofwhere = wherelist[i]
  394.     DIMENSION tablename[1]
  395.     DO WHILE .T.
  396.         endsep = AT(".", restofwhere)
  397.         IF (endsep > 0)
  398.             begsep = RAT(" ", SUBSTR(restofwhere, 1, endsep - 1))
  399.             INLIST = ALEN(tablename)
  400.             DIMENSION tablename[INLIST + 1]
  401.             tablename[INLIST] = SUBSTR(restofwhere, begsep + 1,;
  402.                 endsep - begsep - 1)
  403.             restofwhere = SUBSTR(restofwhere, endsep + 1)
  404.         ELSE
  405.             EXIT
  406.         ENDIF
  407.     ENDDO
  408.  
  409.     deleteflag = .F.
  410.     INLIST = ALEN(tablename) - 1
  411.     FOR j = 1 TO INLIST
  412.  
  413.         IF ( .NOT. infromlist(tablename[j]))
  414.             DO delwhere WITH i
  415.             deleteflag = .T.
  416.             EXIT
  417.         ENDIF
  418.  
  419.     ENDFOR
  420.  
  421.     IF ( .NOT. deleteflag)
  422.         i = i + 1
  423.     ENDIF
  424.  
  425. ENDDO
  426. SHOW GET editwhere
  427.  
  428. RETURN .T.
  429.  
  430.  
  431. *       *********************************************************
  432. *       *                                                         
  433. *       * _QG30IWSTG           SelectPop VALID                    
  434. *       *                                                         
  435. *       * Function Origin:                                        
  436. *       *                                                         
  437. *       * From Platform:       Windows                            
  438. *       * From Screen:         BQUERY,     Record Number:    5    
  439. *       * Variable:            SelectPop                          
  440. *       * Called By:           VALID Clause                       
  441. *       * Snippet Number:      2                                  
  442. *       *                                                         
  443. *       *********************************************************
  444. *
  445. FUNCTION _qg30iwstg     &&  SelectPop VALID
  446. #REGION 1
  447. DO buildslist
  448. DO buildspop
  449.  
  450. RETURN .T.
  451.  
  452.  
  453. *       *********************************************************
  454. *       *                                                         
  455. *       * _QG30IWSXH           SelectButton VALID                 
  456. *       *                                                         
  457. *       * Function Origin:                                        
  458. *       *                                                         
  459. *       * From Platform:       Windows                            
  460. *       * From Screen:         BQUERY,     Record Number:    6    
  461. *       * Variable:            SelectButton                       
  462. *       * Called By:           VALID Clause                       
  463. *       * Snippet Number:      3                                  
  464. *       *                                                         
  465. *       *********************************************************
  466. *
  467. FUNCTION _qg30iwsxh     &&  SelectButton VALID
  468. #REGION 1
  469. DO buildslist
  470. DO select.spr
  471. DO buildspop
  472.  
  473. RETURN .T.
  474.  
  475.  
  476. *       *********************************************************
  477. *       *                                                         
  478. *       * _QG30IWT2E           Dummy VALID                        
  479. *       *                                                         
  480. *       * Function Origin:                                        
  481. *       *                                                         
  482. *       * From Platform:       Windows                            
  483. *       * From Screen:         BQUERY,     Record Number:    7    
  484. *       * Variable:            Dummy                              
  485. *       * Called By:           VALID Clause                       
  486. *       * Snippet Number:      4                                  
  487. *       *                                                         
  488. *       *********************************************************
  489. *
  490. FUNCTION _qg30iwt2e     &&  Dummy VALID
  491. #REGION 1
  492. DO join.spr
  493. SHOW GET editwhere
  494. RETURN .T.
  495.  
  496.  
  497. *       *********************************************************
  498. *       *                                                         
  499. *       * _QG30IWT6Y           wherebut VALID                     
  500. *       *                                                         
  501. *       * Function Origin:                                        
  502. *       *                                                         
  503. *       * From Platform:       Windows                            
  504. *       * From Screen:         BQUERY,     Record Number:    8    
  505. *       * Variable:            wherebut                           
  506. *       * Called By:           VALID Clause                       
  507. *       * Snippet Number:      5                                  
  508. *       *                                                         
  509. *       *********************************************************
  510. *
  511. FUNCTION _qg30iwt6y     &&  wherebut VALID
  512. #REGION 1
  513. DO where.spr
  514. SHOW GET editwhere
  515. RETURN .T.
  516.  
  517.  
  518. *       *********************************************************
  519. *       *                                                         
  520. *       * _QG30IWTBD           EditWhere VALID                    
  521. *       *                                                         
  522. *       * Function Origin:                                        
  523. *       *                                                         
  524. *       * From Platform:       Windows                            
  525. *       * From Screen:         BQUERY,     Record Number:    9    
  526. *       * Variable:            EditWhere                          
  527. *       * Called By:           VALID Clause                       
  528. *       * Snippet Number:      6                                  
  529. *       *                                                         
  530. *       *********************************************************
  531. *
  532. FUNCTION _qg30iwtbd     &&  EditWhere VALID
  533. #REGION 1
  534. DO editwher.spr
  535.  
  536. IF (EMPTY(wherelist[EditWhere]))
  537.     DO delwhere WITH editwhere
  538. ENDIF
  539.  
  540. SHOW GET editwhere
  541.  
  542. RETURN .T.
  543.  
  544.  
  545. *       *********************************************************
  546. *       *                                                         
  547. *       * _QG30IWTH1           Read Level Valid                   
  548. *       *                                                         
  549. *       * Function Origin:                                        
  550. *       *                                                         
  551. *       *                                                         
  552. *       * From Platform:       Windows                            
  553. *       * From Screen:         BQUERY                             
  554. *       * Called By:           READ Statement                     
  555. *       * Snippet Number:      7                                  
  556. *       *                                                         
  557. *       *********************************************************
  558. *
  559. FUNCTION _qg30iwth1     && Read Level Valid
  560. *
  561. * Valid Code from screen: BQUERY
  562. *
  563. #REGION 1
  564. DO buildslist
  565. DO buildspop
  566.  
  567. sqlselect = buildsql()
  568.  
  569. IF (exitaction == 1)
  570.     DO xquery WITH sqlselect
  571.     RETURN .F.
  572. ELSE
  573.     IF (exitaction == 2)
  574.         HIDE WINDOW buildquery
  575.         DO editquer.spr
  576.         RETURN .T.
  577.     ELSE
  578.         IF (exitaction == 3)
  579.             DIMENSION fromlist[1]
  580.             DIMENSION selectlist[1]
  581.             DIMENSION wherelist[1]
  582.             DO buildfpop
  583.             DO buildspop
  584.             SHOW GET editwhere
  585.             RETURN .F.
  586.         ELSE
  587.             RETURN .T.
  588.         ENDIF
  589.     ENDIF
  590. ENDIF
  591.  
  592.  
  593. *       *********************************************************
  594. *       *                                                         
  595. *       * _QG30IWTH6           Read Level Activate                
  596. *       *                                                         
  597. *       * Function Origin:                                        
  598. *       *                                                         
  599. *       *                                                         
  600. *       * From Platform:       Windows                            
  601. *       * From Screen:         BQUERY                             
  602. *       * Called By:           READ Statement                     
  603. *       * Snippet Number:      8                                  
  604. *       *                                                         
  605. *       *********************************************************
  606. *
  607. FUNCTION _qg30iwth6     && Read Level Activate
  608. *
  609. * Activate Code from screen: BQUERY
  610. *
  611. #REGION 1
  612. if alen(fromlist) < 3
  613.     show get dummy disabled
  614. else
  615.     show get dummy enabled
  616. endif
  617. if alen(fromlist) < 2
  618.     show get wherebut disabled
  619. else
  620.     show get wherebut enabled
  621. endif
  622.  
  623. *       *********************************************************
  624. *       *                                                         
  625. *       * _QG30IWUUC           FromButton VALID                   
  626. *       *                                                         
  627. *       * Function Origin:                                        
  628. *       *                                                         
  629. *       * From Platform:       MS-DOS                             
  630. *       * From Screen:         BQUERY,     Record Number:   14    
  631. *       * Variable:            FromButton                         
  632. *       * Called By:           VALID Clause                       
  633. *       * Snippet Number:      9                                  
  634. *       *                                                         
  635. *       *********************************************************
  636. *
  637. FUNCTION _qg30iwuuc     &&  FromButton VALID
  638. #REGION 1
  639. PRIVATE i, tableName, count, inList
  640.  
  641. DO From.SPR
  642. DO BuildFPop
  643.  
  644. DO BuildSList
  645. DO BuildSPop
  646.  
  647. DO BuildCList
  648. *
  649. *    Rebuild WHERE list. Must do this, because the removal of a
  650. *    table could mean some of these columns can no longer be
  651. *    SELECTed.
  652. *
  653. i = 1 && account for deletes from array which moves everything up
  654. DO WHILE (i < ALEN(WhereList))
  655. *
  656. *        Extract table names from WHERE condition
  657. *    
  658.     restOfWhere = WhereList[i]
  659.     DIMENSION tableName[1]
  660.     DO WHILE .T.
  661.         endSep = AT(".", restOfWhere)
  662.         IF (endSep > 0)
  663.             begSep = RAT(" ", SUBSTR(restOfWhere, 1, endSep - 1))
  664.             inList = ALEN(tableName)
  665.             DIMENSION tableName[inList + 1]
  666.             tableName[inList] = SUBSTR(restOfWhere, begSep + 1,;
  667.                 endSep - begSep - 1)
  668.             restOfWhere = SUBSTR(restOfWhere, endSep + 1)
  669.         ELSE
  670.             EXIT
  671.         ENDIF
  672.     ENDDO
  673.  
  674.     deleteFlag = .F.
  675.     inList = ALEN(tableName) - 1
  676.     FOR j = 1 TO inList
  677.  
  678.         IF (.NOT. InFromList(tableName[j]))
  679.             DO DelWhere WITH i
  680.             deleteFlag = .T.
  681.             EXIT
  682.         ENDIF
  683.  
  684.     ENDFOR
  685.  
  686.     IF (.NOT. deleteFlag)
  687.         i = i + 1
  688.     ENDIF        
  689.  
  690. ENDDO
  691. SHOW GET EditWhere
  692.  
  693. RETURN .T.
  694.  
  695.  
  696. *       *********************************************************
  697. *       *                                                         
  698. *       * _QG30IWV7U           SelectPop VALID                    
  699. *       *                                                         
  700. *       * Function Origin:                                        
  701. *       *                                                         
  702. *       * From Platform:       MS-DOS                             
  703. *       * From Screen:         BQUERY,     Record Number:   16    
  704. *       * Variable:            SelectPop                          
  705. *       * Called By:           VALID Clause                       
  706. *       * Snippet Number:      10                                 
  707. *       *                                                         
  708. *       *********************************************************
  709. *
  710. FUNCTION _qg30iwv7u     &&  SelectPop VALID
  711. #REGION 1
  712. DO BuildSList
  713. DO BuildSPop
  714.  
  715. RETURN .T.
  716.  
  717. *       *********************************************************
  718. *       *                                                         
  719. *       * _QG30IWVC6           SelectButton VALID                 
  720. *       *                                                         
  721. *       * Function Origin:                                        
  722. *       *                                                         
  723. *       * From Platform:       MS-DOS                             
  724. *       * From Screen:         BQUERY,     Record Number:   17    
  725. *       * Variable:            SelectButton                       
  726. *       * Called By:           VALID Clause                       
  727. *       * Snippet Number:      11                                 
  728. *       *                                                         
  729. *       *********************************************************
  730. *
  731. FUNCTION _qg30iwvc6     &&  SelectButton VALID
  732. #REGION 1
  733. DO BuildSList
  734. DO Select.SPR
  735. DO BuildSPop
  736.  
  737. RETURN .T.
  738.  
  739. *       *********************************************************
  740. *       *                                                         
  741. *       * _QG30IWVGI           Dummy VALID                        
  742. *       *                                                         
  743. *       * Function Origin:                                        
  744. *       *                                                         
  745. *       * From Platform:       MS-DOS                             
  746. *       * From Screen:         BQUERY,     Record Number:   18    
  747. *       * Variable:            Dummy                              
  748. *       * Called By:           VALID Clause                       
  749. *       * Snippet Number:      12                                 
  750. *       *                                                         
  751. *       *********************************************************
  752. *
  753. FUNCTION _qg30iwvgi     &&  Dummy VALID
  754. #REGION 1
  755. DO Join.SPR
  756. SHOW GET EditWhere
  757. RETURN .T.
  758.  
  759. *       *********************************************************
  760. *       *                                                         
  761. *       * _QG30IWVK7           wherebut VALID                     
  762. *       *                                                         
  763. *       * Function Origin:                                        
  764. *       *                                                         
  765. *       * From Platform:       MS-DOS                             
  766. *       * From Screen:         BQUERY,     Record Number:   19    
  767. *       * Variable:            wherebut                           
  768. *       * Called By:           VALID Clause                       
  769. *       * Snippet Number:      13                                 
  770. *       *                                                         
  771. *       *********************************************************
  772. *
  773. FUNCTION _qg30iwvk7     &&  wherebut VALID
  774. #REGION 1
  775. DO Where.SPR
  776. SHOW GET EditWhere
  777. RETURN .T.
  778.  
  779. *       *********************************************************
  780. *       *                                                         
  781. *       * _QG30IWVOU           EditWhere VALID                    
  782. *       *                                                         
  783. *       * Function Origin:                                        
  784. *       *                                                         
  785. *       * From Platform:       MS-DOS                             
  786. *       * From Screen:         BQUERY,     Record Number:   20    
  787. *       * Variable:            EditWhere                          
  788. *       * Called By:           VALID Clause                       
  789. *       * Snippet Number:      14                                 
  790. *       *                                                         
  791. *       *********************************************************
  792. *
  793. FUNCTION _qg30iwvou     &&  EditWhere VALID
  794. #REGION 1
  795. DO EditWher.SPR
  796.  
  797. IF (EMPTY(WhereList[EditWhere]))
  798.     DO DelWhere WITH EditWhere
  799. ENDIF
  800.  
  801. SHOW GET EditWhere
  802.  
  803. RETURN .T.
  804.  
  805.  
  806. *       *********************************************************
  807. *       *                                                         
  808. *       * _QG30IWVTH           Read Level Valid                   
  809. *       *                                                         
  810. *       * Function Origin:                                        
  811. *       *                                                         
  812. *       *                                                         
  813. *       * From Platform:       MS-DOS                             
  814. *       * From Screen:         BQUERY                             
  815. *       * Called By:           READ Statement                     
  816. *       * Snippet Number:      15                                 
  817. *       *                                                         
  818. *       *********************************************************
  819. *
  820. FUNCTION _qg30iwvth     && Read Level Valid
  821. *
  822. * Valid Code from screen: BQUERY
  823. *
  824. #REGION 1
  825. DO buildslist
  826. DO buildspop
  827.  
  828. sqlselect = buildsql()
  829.  
  830. IF (exitaction == 1)
  831.     DO xquery WITH sqlselect
  832.     RETURN .F.
  833. ELSE
  834.     IF (exitaction == 2)
  835.         HIDE WINDOW buildquery
  836.         DO editquer.spr
  837.         RETURN .T.
  838.     ELSE
  839.         IF (exitaction == 3)
  840.             DIMENSION fromlist[1]
  841.             DIMENSION selectlist[1]
  842.             DIMENSION wherelist[1]
  843.             DO buildfpop
  844.             DO buildspop
  845.             SHOW GET editwhere
  846.             RETURN .F.
  847.         ELSE
  848.             RETURN .T.
  849.         ENDIF
  850.     ENDIF
  851. ENDIF
  852.  
  853.  
  854. *       *********************************************************
  855. *       *                                                         
  856. *       * _QG30IWVTM           Read Level Activate                
  857. *       *                                                         
  858. *       * Function Origin:                                        
  859. *       *                                                         
  860. *       *                                                         
  861. *       * From Platform:       MS-DOS                             
  862. *       * From Screen:         BQUERY                             
  863. *       * Called By:           READ Statement                     
  864. *       * Snippet Number:      16                                 
  865. *       *                                                         
  866. *       *********************************************************
  867. *
  868. FUNCTION _qg30iwvtm     && Read Level Activate
  869. *
  870. * Activate Code from screen: BQUERY
  871. *
  872. #REGION 1
  873. if alen(fromlist) < 3
  874.     show get dummy disabled
  875. else
  876.     show get dummy enabled
  877. endif
  878. if alen(fromlist) < 2
  879.     show get wherebut disabled
  880. else
  881.     show get wherebut enabled
  882. endif
  883.  
  884.  
  885. *       *********************************************************
  886. *       *                                                         
  887. *       *   BQUERY/MS-DOS Supporting Procedures and Functions     
  888. *       *                                                         
  889. *       *********************************************************
  890. *
  891.  
  892. #REGION 1
  893.  
  894. *       *********************************************************
  895. *       *                                                         
  896. *       *               BQUERY Function INFROMLIST                
  897. *       *                                                         
  898. *       *********************************************************
  899. *
  900.  
  901.  
  902. PROCEDURE INFROMLIST
  903. PARAMETERS TABLENAME
  904. DO CASE
  905. CASE _DOS
  906.     PRIVATE nfroms, i
  907.     nfroms = ALEN(fromlist)
  908.     FOR i = 1 TO nfroms - 1
  909.         IF (tablename == fromlist[i])
  910.             RETURN .T.
  911.         ENDIF
  912.     ENDFOR
  913.     RETURN .F.
  914.     
  915. CASE _WINDOWS
  916.     PRIVATE nfroms, i
  917.     nfroms = ALEN(fromlist)
  918.     FOR i = 1 TO nfroms - 1
  919.         IF (tablename == fromlist[i])
  920.             RETURN .T.
  921.         ENDIF
  922.     ENDFOR
  923.     RETURN .F.
  924.     
  925. ENDCASE
  926.  
  927. *       *********************************************************
  928. *       *                                                         
  929. *       *                BQUERY Procedure DELWHERE                
  930. *       *                                                         
  931. *       *********************************************************
  932. *
  933.  
  934.  
  935. PROCEDURE DELWHERE
  936. PARAMETERS I
  937. DO CASE
  938. CASE _DOS
  939.     PRIVATE lenlist
  940.     = ADEL(wherelist, i)
  941.     lenlist = ALEN(wherelist)
  942.     IF (i != 1)
  943.         = ADEL(wherelist, i - 1)
  944.         lenlist = lenlist - 1
  945.     ELSE              && i == 1, so logical connector follows
  946.         IF (lenlist > 1)  && if there is one
  947.             = ADEL(wherelist, i)
  948.             lenlist = lenlist - 1
  949.         ENDIF
  950.     ENDIF
  951.     DIMENSION wherelist[MAX(lenList - 1, 1)]
  952.     RETURN
  953.     
  954. CASE _WINDOWS
  955.     PRIVATE lenlist
  956.     = ADEL(wherelist, i)
  957.     lenlist = ALEN(wherelist)
  958.     IF (i != 1)
  959.         = ADEL(wherelist, i - 1)
  960.         lenlist = lenlist - 1
  961.     ELSE              && i == 1, so logical connector follows
  962.         IF (lenlist > 1)  && if there is one
  963.             = ADEL(wherelist, i)
  964.             lenlist = lenlist - 1
  965.         ENDIF
  966.     ENDIF
  967.     DIMENSION wherelist[MAX(lenList - 1, 1)]
  968.     RETURN
  969.     
  970. ENDCASE
  971.  
  972. *       *********************************************************
  973. *       *                                                         
  974. *       *               BQUERY Procedure BUILDSLIST               
  975. *       *                                                         
  976. *       *********************************************************
  977. *
  978.  
  979.  
  980. PROCEDURE BUILDSLIST
  981. DO CASE
  982. CASE _DOS
  983.     PRIVATE lenlist, i, COUNT, neworder, tablename
  984.     *
  985.     *    Get current order on popup
  986.     *
  987.     lenlist = ALEN(selectlist) - 1
  988.     DIMENSION neworder[lenList + 1]
  989.     FOR i = 1 TO lenlist
  990.         neworder[i] = selectlist[GETBAR("BQSelectPo", i)]
  991.     ENDFOR
  992.     FOR i = 1 TO lenlist
  993.         selectlist[i] = neworder[i]
  994.     ENDFOR
  995.     *
  996.     *    Check against FROM list
  997.     *
  998.     i = 1 && account for deletes from array SelectList which moves everything up
  999.     FOR COUNT = 1 TO lenlist
  1000.         *
  1001.         *        Extract table name from column name
  1002.         *
  1003.         tablename = SUBSTR(selectlist[i], 1, AT(".", selectlist[i]) - 1)
  1004.         IF ( .NOT. infromlist(tablename))
  1005.             = ADEL(selectlist, i)
  1006.         ELSE
  1007.             i = i + 1
  1008.         ENDIF
  1009.     ENDFOR
  1010.     DIMENSION selectlist[i]
  1011.     RETURN  && PROCEDURE BuildSList
  1012.     
  1013.     
  1014. CASE _WINDOWS
  1015.     PRIVATE lenlist, i, COUNT, neworder, tablename
  1016.     *
  1017.     *    Get current order on popup
  1018.     *
  1019.     lenlist = ALEN(selectlist) - 1
  1020.     DIMENSION neworder[lenList + 1]
  1021.     FOR i = 1 TO lenlist
  1022.         neworder[i] = selectlist[GETBAR("BQSelectPo", i)]
  1023.     ENDFOR
  1024.     FOR i = 1 TO lenlist
  1025.         selectlist[i] = neworder[i]
  1026.     ENDFOR
  1027.     *
  1028.     *    Check against FROM list
  1029.     *
  1030.     i = 1 && account for deletes from array SelectList which moves everything up
  1031.     FOR COUNT = 1 TO lenlist
  1032.         *
  1033.         *        Extract table name from column name
  1034.         *
  1035.         tablename = SUBSTR(selectlist[i], 1, AT(".", selectlist[i]) - 1)
  1036.         IF ( .NOT. infromlist(tablename))
  1037.             = ADEL(selectlist, i)
  1038.         ELSE
  1039.             i = i + 1
  1040.         ENDIF
  1041.     ENDFOR
  1042.     DIMENSION selectlist[i]
  1043.     RETURN  && PROCEDURE BuildSList
  1044.     
  1045.     
  1046. ENDCASE
  1047.  
  1048. *       *********************************************************
  1049. *       *                                                         
  1050. *       *               BQUERY Procedure BUILDSPOP                
  1051. *       *                                                         
  1052. *       *********************************************************
  1053. *
  1054.  
  1055.  
  1056. PROCEDURE BUILDSPOP
  1057. DO CASE
  1058. CASE _DOS
  1059.     PRIVATE lenlist, i
  1060.     RELEASE BAR ALL OF bqselectpop
  1061.     lenlist = ALEN(selectlist) - 1
  1062.     FOR i = 1 TO lenlist
  1063.         DEFINE BAR (i) OF bqselectpop PROMPT selectlist[i]
  1064.     ENDFOR
  1065.     SHOW GET selectpop
  1066.     RETURN
  1067.     
  1068.     
  1069. CASE _WINDOWS
  1070.     PRIVATE lenlist, i
  1071.     RELEASE BAR ALL OF bqselectpop
  1072.     lenlist = ALEN(selectlist) - 1
  1073.     FOR i = 1 TO lenlist
  1074.         DEFINE BAR (i) OF bqselectpop PROMPT selectlist[i]
  1075.     ENDFOR
  1076.     SHOW GET selectpop
  1077.     RETURN
  1078.     
  1079.     
  1080. ENDCASE
  1081.  
  1082. *       *********************************************************
  1083. *       *                                                         
  1084. *       *               BQUERY Procedure BUILDFPOP                
  1085. *       *                                                         
  1086. *       *********************************************************
  1087. *
  1088.  
  1089.  
  1090. PROCEDURE BUILDFPOP
  1091. DO CASE
  1092. CASE _DOS
  1093.     PRIVATE lenlist
  1094.     RELEASE BAR ALL OF bqfrompop
  1095.     lenlist = ALEN(fromlist) - 1
  1096.     FOR i = 1 TO lenlist
  1097.         DEFINE BAR (i) OF bqfrompop PROMPT fromlist[i]
  1098.     ENDFOR
  1099.     SHOW GET fpopdummy
  1100.     RETURN
  1101.     
  1102.     
  1103. CASE _WINDOWS
  1104.     PRIVATE lenlist
  1105.     RELEASE BAR ALL OF bqfrompop
  1106.     lenlist = ALEN(fromlist) - 1
  1107.     FOR i = 1 TO lenlist
  1108.         DEFINE BAR (i) OF bqfrompop PROMPT fromlist[i]
  1109.     ENDFOR
  1110.     SHOW GET fpopdummy
  1111.     RETURN
  1112.     
  1113.     
  1114. ENDCASE
  1115.  
  1116. *       *********************************************************
  1117. *       *                                                         
  1118. *       *               BQUERY Procedure BUILDCLIST               
  1119. *       *                                                         
  1120. *       *********************************************************
  1121. *
  1122.  
  1123.  
  1124. PROCEDURE BUILDCLIST
  1125. DO CASE
  1126. CASE _DOS
  1127.     DIMENSION columnlist[1]
  1128.     nfrom = ALEN(fromlist)
  1129.     FOR i = 1 TO nfrom - 1
  1130.         DO addcolumns WITH fromlist[i]
  1131.     ENDFOR
  1132.     RETURN
  1133.     
  1134.     
  1135. CASE _WINDOWS
  1136.     DIMENSION columnlist[1]
  1137.     nfrom = ALEN(fromlist)
  1138.     FOR i = 1 TO nfrom - 1
  1139.         DO addcolumns WITH fromlist[i]
  1140.     ENDFOR
  1141.     RETURN
  1142.     
  1143.     
  1144. ENDCASE
  1145.  
  1146. *       *********************************************************
  1147. *       *                                                         
  1148. *       *               BQUERY Procedure ADDCOLUMNS               
  1149. *       *                                                         
  1150. *       *********************************************************
  1151. *
  1152.  
  1153.  
  1154. PROCEDURE ADDCOLUMNS
  1155. PARAMETERS TABLENAME
  1156. DO CASE
  1157. CASE _DOS
  1158.     PRIVATE lenlist
  1159.     IF (ckhandle == 0)
  1160.         SELECT 0
  1161.         USE columns
  1162.     ELSE
  1163.         = dbcols(ckhandle, tablename, "FoxPro")
  1164.     ENDIF
  1165.     lenlist = ALEN(columnlist)
  1166.     DIMENSION columnlist[lenList + RECCO()]
  1167.     SCAN
  1168.         columnlist[lenList] = tablename + "." + LOWER(ALLTRIM(field_name))
  1169.         lenlist = lenlist + 1
  1170.     ENDSCAN
  1171.     USE
  1172.     RETURN
  1173.     
  1174. CASE _WINDOWS
  1175.     PRIVATE lenlist
  1176.     IF (ckhandle == 0)
  1177.         SELECT 0
  1178.         USE columns
  1179.     ELSE
  1180.         IF (m.asynch == 1) && Asynch
  1181.             retcode = 0
  1182.             DO WHILE (retcode == 0)
  1183.                 retcode = dbcols(ckhandle, tablename, "Native")
  1184.             ENDDO
  1185.         ELSE
  1186.             retcode =  dbcols(ckhandle, tablename, "Native")
  1187.         ENDIF
  1188.     ENDIF
  1189.     lenlist = ALEN(columnlist)
  1190.     DIMENSION columnlist[lenList + RECCO()]
  1191.     SCAN
  1192.         columnlist[lenList] = tablename + "." + ALLTRIM(column_nam)
  1193.         lenlist = lenlist + 1
  1194.     ENDSCAN
  1195.     USE
  1196.     RETURN
  1197.     
  1198. ENDCASE