Visual FoxPro

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Visual FoxPro
linguaggio di programmazione
AutoreMicrosoft
Data di origine1984
Ultima versione9.0 del 16 ottobre 2007
Paradigmiprogrammazione orientata agli oggettieprogrammazione procedurale
Influenzato daFoxPro
Implementazione di riferimento
Sistema operativoMicrosoft Windows
Sito webmsdn.microsoft.com/vfoxpro

Visual FoxPro(VFP) è unlinguaggio di programmazioneche integra la programmazione di tipo procedurale e quella orientata agli oggetti. È pubblicato daMicrosoftperWindows.

Il linguaggio deriva daFoxProche è stato sviluppato daFox Technologiesagli inizi del1984. L'ultima versione diFoxPro (2.6)era compatibile con i sistemi operativiMac OS,DOS,WindowseUnix. Nel1992Fox Technologies è stata acquisita da Microsoft. Da allora il nome del linguaggio è diventato Visual FoxPro. La prima versione di Visual FoxPro (3.0), supportava i sistemi operativi Mac e Windows. La versione attuale supporta solo i sistemi operativi Windows.

L'ultima versione pubblicata da Microsoft è Visual FoxPro 9.0 del 2004.

Nel marzo 2007 Microsoft ha annunciato la decisione di interrompere lo sviluppo di Visual FoxPro consentendo alla comunità di portarne avanti lo sviluppo successivo. Ha comunque fornito il supporto tecnico standard sino al 2010 e il supporto esteso sino al 2015.

Caratteristiche

[modifica|modifica wikitesto]

Esempi di codice

[modifica|modifica wikitesto]

Il linguaggio FoxPro contiene comandi simili ad altri linguaggi di programmazione quali il Basic.

Alcuni esempi di comandi base:

FORi = 1 to 10
x= x + 6.5
NEXT&& Al posto di "NEXT" si può usare anche "ENDFOR"

IFi = 25
i= i + 1
ELSE
i= i + 3
ENDIF

x= 1
DOWHILE x < 50
x= x + 1
ENDDO

x= 1
DOWHILE.T.
x= x + 1
IFx < 50
LOOP
ELSE
EXIT
ENDIF
ENDDO

nMonth=MONTH(DATE())
DOCASE
CASEnMonth <= 3
MESSAGEBOX("Q1")

CASEnMonth <= 6
MESSAGEBOX("Q2")

CASEnMonth <= 9
MESSAGEBOX("Q3")

OTHERWISE
MESSAGEBOX("Q4")
ENDCASE

FOREACH oControlINTHISFORM.Controls
MESSAGEBOX(oControl.Name)
ENDFOR

f= Factorial(10)

FUNCTIONFactorial(n)
LOCALi, r

r= 1
FORi = n TO 1 STEP -1
r= r * i
NEXT&& Anche qui si può usare "ENDFOR" al posto di "NEXT"
RETURNr
ENDFUNC

Esempi Hello World:

* Stampa alla locazione corrente
?"Hello World"

* Stampa in una specifica locazione
@ 1,1 SAY"Hello World"

* Stampa in una finestra differente
WAITWINDOW"Hello World"

* Stampa in un dialog box standard, cancellato all'OK
MESSAGEBOX("Hello World")
* Stampa in una finestra specifica
loForm=CREATEOBJECT("HiForm")
loForm.Show(1)

DEFINECLASS HiFormASForm
AutoCenter=.T.
Caption="Hello, World"

ADDOBJECT lblHi asLabel;
WITHCaption ="Hello, World!"
ENDDEFINE
loMine=CREATEOBJECT("MyClass")
? loMine.cProp1&& Questo funziona (la doppia e commerciale indica un commento fino a fine riga)
? loMine.cProp2&& Errore: la proprietà CPROP2 è nascosta esternamente.

? loMine.MyMethod1()&& Questo funziona
? loMine.MyMethod2()&& Errore: la proprietà MYMETHOD2 è nascosta esternamente.

DEFINECLASS MyClass ASCustom
cProp1="My Property"&& Questa è una proprietà pubblica
HIDDENcProp2&& Questa è una proprietà privata (nascosta)
dProp3= {}&& Un'altra proprietà pubblica

PROCEDUREInit()&& Costruttore della classe
This.cProp2 ="This is a hidden property."

PROCEDUREdProp3_Access&& Il Getter è identificato dal tag "_Access" nel nome
RETURNDATE()

PROCEDUREdProp3_Assign(vNewVal)&& Il Setter è identificato da tag "_Assign" nel nome
IFVARTYPE(vNewVal) ="D"
THIS.dProp3 = vNewVal
ENDIF

PROCEDUREMyMethod1()
* Metodo pubblico che chiama un metodo nascosto che restituisce
* il valore di una proprietà nascosta.
RETURNThis.MyMethod2()

HIDDENPROCEDURE MyMethod2()&& Questo è un metodo privato (nascosto)
RETURNThis.cProp2
ENDDEFINE
  • VFP ha una libreria estesa di classi predefinite ed oggetti visuali che sono accessibili nelIDEda un foglio di proprietà (inclusi iMetodi),[1]in modo che sia necessario scrivere un codice completo che definisca una classe ed i suoi oggetti solamente in casi molto particolari e la scrittura diframeworkdi grandi sistemi.

Gestione dei Dati

[modifica|modifica wikitesto]

Il linguaggio offre un nutrito gruppo di comandi dedicati alla manipolazione di un database. L'indice dei comandi in VFP9 accessibile dal menù "Aiuto" contiene centinaia e centinaia di comandi e funzioni. Gli esempi in basso mostrano come scrivere codice per la creazione e l'indicizzazione di tabelle, comunque VFP ha schermate di creazione visuale di tabelle e database che creano tutto senza la necessità di scrivere codice.

* Crea una tabella
CREATETABLE randData (iData I)

* Popola con dati random usando xBase e comandi SQL DML
FORi = 1 TO 50
APPENDBLANK
REPLACEiData WITH (RAND() * 100)

INSERTINTO randData (iData) VALUES (RAND() * 100)
ENDFOR

* Crea un indice sui dati
INDEXON iData TAG iData
CLOSEDATA&& Chiude la tabella

* Mostra dati ordinati usando comandi in stile xBase
USErandData
SETORDER TO iData
LOCATE&& Al posto di GO TOP. Forza l'uso di indici per trovare TOP
LISTNEXT 10&& I primi 10
GOBOTTOM
SKIP-10
LISTREST&& Gli ultimi 10
CLOSEDATA

* Seleziona i dati ordinati usando i comandi SQL DML
SELECT*;
FROMrandData;
ORDERBY iData DESCENDING

Accesso ODBC usando SQL passthrough

[modifica|modifica wikitesto]
PRIVATEcAuthorID, cAuthorName&& Variabili private che ridefiniscono eventuali precedenti variabili globali i private con lo stesso nome
LOCALnHnd, nResult&& Variabili locali visibili solo in questa sezione

* Connessione ad una sorgente ODBC
nHnd=SQLCONNECT("ODBCDSN","user","pwd")

* Ciclo infinito (l'uscita viene forzata nel codice in caso di errore o al termine delle operazioni)
DOWHILE.T.
* Esegue un comando SQL
nResult=SQLEXEC(nHnd,"USE master")
IFnResult < 0
MESSAGEBOX("MASTER database does not exist!")
EXIT&& Esce dal ciclo
ENDIF

* Recupera i dati dal server remoto e li inserisce nel cursore locale
nResult=SQLEXEC(nHnd,"SELECT * FROM authors","QAUTHORS")
IFnResult < 0
MESSAGEBOX("Unable to execute remote SQL SELECT command!")
EXIT&& Esce dal ciclo
ENDIF

* Aggiorna un record nella tabella remota usando una query parametrica
cAuthorID="1001"
cAuthorName="New name"
nResult=SQLEXEC(nHnd,"UPDATE authors SET auth_name =?cAuthorName WHERE auth_id =?cAuthorID")
IFnResult < 0
MESSAGEBOX("Unable to execute remote SQL UPDATE command!")
EXIT&& Esce dal ciclo
ENDIF

* Se arriva a questo punto, abbiamo effettuato tutti i passaggi correttamente
EXIT&& Esce dal ciclo incondizionatamente
ENDDO

* Chiude la connessione
SQLDISCONNECT(nHnd)
  1. ^Visual FoxPro Development Productivity Tools,sumsdn.microsoft.com,Microsoft.URL consultato il 20 dicembre 2014.

Collegamenti esterni

[modifica|modifica wikitesto]
 Portale Informatica:accedi alle voci di Wikipedia che trattano di informatica