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 |