home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 06 / dtp / filter.prg < prev    next >
Text File  |  1989-01-05  |  9KB  |  286 lines

  1. * Programm.: FILTER.PRG
  2. * Autor....: Jörg Rohde
  3. * Datum....: 03.01.1989
  4. * Notiz....: Copyright (c) 1989, Jörg Rohde, Alle Rechte vorbehalten
  5.  
  6. CLEAR all
  7.  
  8. * Initialisierung der DBASE - Systemvariablen
  9.  
  10. SET SAFETY OFF
  11. SET SCOREBOARD OFF
  12. SET TALK OFF
  13. SET BELL OFF
  14. SET STATUS ON
  15. SET ESCAPE OFF
  16. SET CONFIRM ON
  17. SET DELETED OFF
  18.  
  19. * Grundzustand der geöffneten Dateien einrichten
  20.  
  21. USE datei INDEX datei                 && Für datei kann eine beliebige
  22. SET FORMAT TO datei                   && DBASE-Datei angegeben werden
  23.  
  24. * Initialisierung der Programmvariablen
  25.  
  26. Bedingung = ''
  27. statzeile = ' alle Daten'
  28. status  =  ''
  29. status1 =  ''
  30. status2 =  ''
  31. status3 =  ''
  32. status4 =  ''
  33. status5 =  ''
  34. Beding1 =  ''
  35. Beding2 =  ''
  36. Beding3 =  ''
  37. Beding4 =  ''
  38. Beding5 =  ''
  39.  
  40. **********************************************************************
  41.  
  42. * Hauptprogramm-Schleife : Das Hauptmenü wird bis zum Programmende
  43. *                          aufgerufen
  44.  
  45. DO WHILE .T.
  46.  
  47.    CLEAR TYPEAHEAD                && Tastaturpuffer leeren
  48.  
  49.    SET FILTER TO &Bedingung       && Nur auf bestimmte Daten zugreifen
  50.  
  51.    * --- Zentrierte Anzeige der Menüauswahl auf dem Bildschirm,
  52.    *     Rahmen zeichnen und Überschrift ausgeben.
  53.    CLEAR
  54.    CLEAR GETS
  55.    @ 2,0 TO 20,79 DOUBLE
  56.    @ 3,22 SAY [E I G E N E - D A T E I]
  57.    @ 4,1 TO 4,78 DOUBLE
  58.    @ 3,1 SAY [Datum : ]+DTOC(DATE())
  59.    * --- Anzeige der Menü-Punkte
  60.    @  6,21 SAY [1. Neue Datensätze anhängen]
  61.    @  7,21 SAY [2. Vorhandene Datensätze ändern]
  62.    @  8,21 SAY [3. Gelöschte Datensätze entfernen]
  63.    @  9,21 SAY [4. Filter setzen]
  64.    @ 10,21 SAY [5. Report ausdrucken]
  65.    @ 11,21 SAY [6. ]
  66.    @ 12,21 SAY [7. ]
  67.    @ 13,21 SAY [8. ]
  68.    @ 14,21 SAY [9. ]
  69.    @ 16,21 SAY [0. Ende]
  70.    @ 17, 1 SAY [Im Zugriff : ]
  71.    @ 19, 1 SAY statzeile
  72.    @ 17,45 SAY [ Auswahl :]
  73.    @ 17,56 SAY [0]
  74.    @ 16,18 SAY [->]
  75.  
  76.    * Anzeigen der Zeit im Hauptmenü mit Tastatur-Abfrage
  77.  
  78.    selectnum = 0
  79.    zeichen = INKEY()
  80.    DO WHILE zeichen <> 13          && Bei Eingabe von RETURN wird die
  81.       @ 3,64 SAY [Zeit : ]+TIME()  && Schleife verlassen und die
  82.       zeichen = zeichen - 48       && Eingabe bearbeitet
  83.       DO CASE
  84.          CASE zeichen = 0          && Umsetzen der Tastatur-Eingaben
  85.               @ 5+selectnum,18 SAY [  ]
  86.               selectnum = 0
  87.               @ 16,18 SAY [->]
  88.               @ 17,56 SAY [0]
  89.          CASE (zeichen>0) .AND. (zeichen<6)  && nur 6 Menü-Punkte ...
  90.               IF selectnum = 0               && auf 10 erweiterbar !
  91.                  @ 16,18 SAY [  ]
  92.                ELSE
  93.                  @ 5+selectnum,18 SAY [  ]
  94.               ENDIF
  95.               selectnum = zeichen
  96.               @ 5+selectnum,18 SAY [->]
  97.               @ 17,56 SAY STR(selectnum,1,0)
  98.       ENDCASE
  99.       zeichen = INKEY()
  100.    ENDDO
  101.  
  102. **********************************************************************
  103.  
  104.    DO CASE
  105.       CASE selectnum = 0
  106.            * Programmende
  107.            CLEAR ALL
  108.            QUIT
  109.  
  110. **********************************************************************
  111.  
  112.       CASE selectnum = 1
  113.            * Neue Datensätze anhängen
  114.            APPEND
  115.  
  116. **********************************************************************
  117.  
  118.       CASE selectnum = 2
  119.            * Vorhandene Datensätze ändern
  120.            EDIT
  121.  
  122. **********************************************************************
  123.       CASE selectnum = 3
  124.            * Gelöschte Datensätze entfernen
  125.            SET FORMAT TO
  126.            CLEAR
  127.            ?
  128.            ? 'ALLE GELÖSCHTEN DATENSÄTZE  WERDEN ENTFERNT'
  129.            ?
  130.            SET TALK ON
  131.            PACK
  132.            SET TALK OFF
  133.            SET FORMAT TO datei
  134.  
  135. **********************************************************************
  136.  
  137.       CASE selectnum = 4
  138.           * Filter setzen
  139.  
  140.       SET FORMAT TO
  141.       SET STATUS OFF
  142.       CLEAR
  143.       ?"    Aktuelle Filter :"
  144.       x = 1
  145.       DO WHILE x < 6                && Filter-Bedingungen auflisten
  146.          filtbed = "status" + STR(x,1)
  147.          @ 2+2*x,4 SAY STR(x,1,0) + " ... " + &filtbed
  148.          x = x + 1
  149.       ENDDO
  150.  
  151.       auswahl = 0
  152.       @ 16,4 SAY "Welchen Filter auswechseln : " GET auswahl;
  153.              PICTURE "9" RANGE 1,5
  154.       READ
  155.       IF auswahl > 0
  156.          IF statzeile <> " alle Daten"  && falls noch keine Bedingung
  157.                                         && existiert, Abfrage sinnlos
  158.             eing = " "
  159.             DO WHILE eing<>"O" .AND. eing<>"U" .AND. auswahl > 0
  160.    @ 18,4 SAY "Bedingungen mit  U nd  oder mit  O der  verknüpfen ? ";
  161.                                 GET eing PICTURE "!"
  162.                READ
  163.             ENDDO
  164.             IF eing = "O"
  165.                zeilen    = ".OR. "
  166.                statzeile = [Oder:]
  167.              ELSE
  168.                zeilen    = ".AND."
  169.                statzeile = [Und :]
  170.             ENDIF
  171.           ELSE
  172.             zeilen    = "-----"
  173.             statzeile = [--- :]
  174.          ENDIF
  175.  
  176.          IF auswahl > 0
  177.             CLEAR
  178.             TEXT
  179.      Welchen Filter setzen :
  180.  
  181.  
  182.      1 ... Vertriebsbereich herausfiltern
  183.  
  184.      2 ... Letzten Kontakt als Filter benutzen
  185.  
  186.      3 ... Filter zurücksetzen
  187.             ENDTEXT
  188.             frage = 0
  189.             @ 23,5 SAY "Auswahl : " GET frage PICTURE "9" RANGE 1,3
  190.             READ
  191.             DO CASE
  192.                CASE frage = 1
  193.                                      && D- ist Vorgabe für Deutschland
  194.                     eing = "D-    "
  195.                     @ 21,50 SAY "PLZ - Anfang : " GET eing;
  196.                                                   PICTURE "XXXXXX"
  197.                     READ
  198.                     eing = TRIM(eing)
  199.                     status = "PLZ : " + eing
  200.          Bedingung = [SUBSTR(plz,1,]+STR(LEN(eing),1,0)+[)="]+eing+["]
  201.  
  202.                CASE frage = 2
  203.  
  204.                     speicher = -11111
  205.                     anzahl = 0
  206.                     DO WHILE .T.
  207.                       @ 21,50 SAY "Anzahl der Tage : " GET anzahl;
  208.                                                        PICTURE "99999"
  209.                       READ
  210.                       @ 22,69 SAY DATE() - anzahl
  211.                       IF speicher = anzahl && Abbruch der Schleife bei
  212.                          EXIT              && Eingabe von zweimal
  213.                       ENDIF                && demselben Datum
  214.                       speicher = anzahl
  215.                     ENDDO
  216.                     @ 22,69 SAY "         "
  217.                     eing = " "
  218.                     DO WHILE eing<>"A" .AND. eing<>"V" .AND. eing<>"N"
  219.                        @ 21,45 SAY "V or, A m oder N ach "+DTOC;
  220.                             (DATE()-anzahl)+" : " GET eing PICTURE "!"
  221.                        READ
  222.                     ENDDO
  223.                     DO CASE
  224.                        CASE eing = "V"
  225.                             status = "Vor " + DTOC(DATE()-anzahl)
  226.          Bedingung = [le_kontakt <= DATE()-] + STR(anzahl,5)
  227.                        CASE eing = "N"
  228.                             status = "Nach " + DTOC(DATE()-anzahl)
  229.          Bedingung = [le_kontakt >= DATE()-] + STR(anzahl,5)
  230.                        CASE eing = "A"
  231.                             status = "Am " + DTOC(DATE()-anzahl)
  232.          Bedingung = [le_kontakt  = DATE()-] + STR(anzahl,5)
  233.                     ENDCASE
  234.  
  235.                CASE frage = 3
  236.                     status    = []
  237.                     Bedingung = ''
  238.             ENDCASE
  239.  
  240.             && filtbed ist eine Hilfs-Variable, um den jeweils
  241.             && angewählten Filter zu auszutauschen
  242.  
  243.             filtbed  = "status" + STR(auswahl,1)
  244.             &filtbed = status
  245.             filtbed  = "Beding" + STR(auswahl,1)
  246.             &filtbed = Bedingung
  247.  
  248.             * Neue Filterbedingung und neue Statuszeile erzeugen
  249.  
  250.             x = 1
  251.             Bedingung = []
  252.             DO WHILE x < 6
  253.                filtbed = "status" + STR(x,1)
  254.                statzeile = statzeile + "  " + &filtbed
  255.                filtbed = "Beding" + STR(x,1)
  256.                IF LEN(TRIM(&filtbed)) > 0
  257.                   Bedingung = Bedingung + zeilen + &filtbed
  258.                ENDIF
  259.                x = x + 1
  260.             ENDDO
  261.             IF LEN(TRIM(Bedingung)) > 0
  262.                Bedingung = RIGHT(Bedingung, LEN(Bedingung)-5)
  263.             ENDIF
  264.           ENDIF
  265.           IF LEN(TRIM(statzeile)) = 5     && keine Bedingungen aktuell
  266.              statzeile = " alle Daten"
  267.           ENDIF
  268.        ENDIF
  269.        SET STATUS ON
  270.        SET FORMAT TO datei
  271.  
  272. **********************************************************************
  273.  
  274.       CASE selectnum = 5
  275.            * Report ausdrucken
  276.            CLEAR
  277.            REPORT FORM datei TO PRINT
  278.  
  279. **********************************************************************
  280.  
  281.    ENDCASE
  282.  
  283. ENDDO  T
  284.  
  285. RETURN
  286.