dBASE

Linguaggio associato ad applicazione

Nasce come linguaggio per l'omonimo DBMS, ad opera di Wayne Ratliff nel 1979, col nome di Vulcan; e successivamente acquistato da Ashton Tate Corporation, divenuta poi Borland Corporation. Il linguaggio è strutturato, non tipizzato e con istruzioni per posizionarsi sui dati, quali skip, seek, go top, ecc… rispettivamente utilizzate per spostarsi su un record con una certa chiave, passare al record successivo ed andare ad inizio Data Base. Altre istruzioni permettono di manutenere il Data Base e visualizzarne i dati.

La sua potenzialità era tale che è stato utilizzato per creare molte procedure gestionali, insieme a Clipper e  FoxPro due sistemi concorrenti, compatibili a livello dati e programmi; Fox Pro dispone di un ambiente di sviluppo grafico.

Dalla versione IV supporta l'accesso ai dati tramite SQL; come molte realizzazioni proprietarie di SQL, estende le funzioni sui dati con le proprie funzioni, rendendo di fatto poco portabili le SELECT.

L'esempio che segue è un semplice conteggio di indirizzi raggruppati per “scalo postale”. Ogni scalo postale è formato da un insieme di vari Codici di avviamento postale (CAP); questa corrispondenza è contenuta in una apposita tabella Dbase.

**************************************

* NOME     :  STAT.PRG

*************************************

PUBLIC TOTCITTA,TOTPRO,TOT,TOTGENCITTA,TOTGENPRO,TOTGEN

PUBLIC CKR

* ARRAY CONTATORE

DECLARE STATSCAL[1000]

SET TALK OFF

STORE 0 TO CK

DO WHILE CK < 1000

  CK = CK +1

  STATSCAL[CK] = 0

ENDDO

* PER POSIZIONARSI SUL RECORD UGUALE O MAGGIORE

SET NEAR ON

USE INDIRIZZI INDEX INDIRIZZ ORDER TAG INDICAP

SEEK "11100"   

STORE 0 TO CKTOT

**************** INIZIO LETTURA

DO WHILE (.NOT. EOF() .AND. CKTOT < 500)

  CKTOT = CKTOT + 1

  CAP3 = VAL(LEFT(IND_CAP,3))+1

  IF CAP3 <> 0

     STATSCAL[CAP3] = STATSCAL[CAP3] + 1

  ENDIF

  SKIP

ENDDO 

  SET DEVICE TO FILE "C:\STAT.TXT"

  STORE 0 TO CK, CKR, CKPAG

  DO CAMBIA_PAGINA WITH CKR,CKPAG

* PREPARAZIONE STATISTICA 

  USE CAPSCALI INDEX CAPSCALI

  GOTO TOP

  MEMCAPSCALO = "  "

  STORE 0 TO TOTCITTA,TOTPRO,TOT

  STORE 0 TO TOTGENCITTA,TOTGENPRO,TOTGEN

  DO WHILE (.NOT. EOF())

    IF MEMCAPSCALO <> CODICE_SCALO

      * CAMBIA SCALO

      IF MEMCAPSCALO <> "  " 

    DO STAMPA_TOT

      ENDIF

      IF MOD(CKR,58) > 45 

   DO CAMBIA_PAGINA WITH CKR,CKPAG

      ENDIF

      MEMCAPSCALO = CODICE_SCALO

      CKR = CKR +1

      @CKR,1 SAY "Scalo "+SCALO

    ENDIF

    CAP3 = VAL(LEFT(CAP,3))

    CKR = CKR+1

    @CKR,1 SAY CAP

    @CKR,7 SAY CITTA

    @CKR,40 SAY STATSCAL[CAP3+1] PICTURE "#####"

    @CKR,50 SAY STATSCAL[CAP3] PICTURE "#####"

    @CKR,60 SAY STATSCAL[CAP3+1]+STATSCAL[CAP3] PICTURE "#####"

    TOTCITTA = TOTCITTA + STATSCAL[CAP3+1]

    TOTPRO = TOTPRO + STATSCAL[CAP3]

    TOT = TOT + STATSCAL[CAP3+1] + STATSCAL[CAP3]

    SKIP

  ENDDO

  DO STAMPA_TOT 

  @CKR+1,1 SAY "Totale complessivo"

  @CKR+1,40 SAY TOTGENCITTA PICTURE "#####"

  @CKR+1,50 SAY TOTGENPRO PICTURE "#####"

  @CKR+1,60 SAY TOTGEN PICTURE "#####"

  SET DEVICE TO SCREEN

  DO QUANTI WITH CKTOT

 

CLOSE DATABASES

RETURN

PROCEDURE STAMPA_TOT

   @CKR+1,1 SAY "......................................."

   @CKR+2,1 SAY "Totale per scalo"

   @CKR+2,40 SAY TOTCITTA PICTURE "#####"

   @CKR+2,50 SAY TOTPRO PICTURE "#####"

   @CKR+2,60 SAY TOT PICTURE "#####"

   @CKR+3,1 SAY ""

   CKR = CKR+3

   TOTGENCITTA = TOTGENCITTA + TOTCITTA

   TOTGENPRO = TOTGENPRO + TOTPRO

   TOTGEN = TOTGEN + TOT

   STORE 0 TO TOTCITTA,TOTPRO,TOT

 

RETURN

PROCEDURE CAMBIA_PAGINA

PARAMETERS CKR,CKPAG

EJECT

CKR = 0

@CKR,1 SAY "Citta'"

@CKR,35 SAY "Tot.Citta' Tot.Prov.   TotGen."

CKPAG = CKPAG + 1

@CKR,71 SAY "Pag."

@CKR,77 SAY CKPAG PICTURE "###"

CKR = CKR + 1

RETURN

Un frammento di output prodotto è il seguente:

 

Citta'                            Tot.Citta' Tot.Prov.   TotGen.      Pag.    1

 .

 .

 .

 Scalo TORINO CMP NORD              

 10100 TORINO                               0         0         0

 11100 AOSTA                               55         0        55

 12100 CUNEO                                0       443       443

 13100 VERCELLI                             0         0         0

 13900 BIELLA                               0         0         0

 14100 ASTI                                 0         0         0

 15100 ALESSANDRIA                          0         0         0

 .......................................

 Totale per scalo                          55       443       498

 .

 .

 .

 Totale complessivo                        56       443       499