Datele (variabile sau constante) utilizate n programare pot fi simple sau sub form de masiv de date (vectori, matrici, care presupun o ordonare a datelor dup un criteriu de poziie). La rndul lor aceste dou categorii pot fi alctuite din date de tip: logic, care nu pot lua dect dou valori: .T. (adevrat) i .F. (fals); numeric; ir de caractere, reprezint o mulime ordonat de caractere, fiecare caracter avnd un numr de ordine n ir, numerotarea ncepnd cu 1. irurile de caractere (constante) se scriu ntre apostroafe sau ghilimele; calendaristic.
1.1 Operatori i operanzi
Se pot construi expresii, combinnd datele (operanzi) cu operaii specifice (operatori). Operatorii la rndul lor sunt de tip: logic, lucreaz cu toate tipurile de date i returneaz o valoare logic (.T. / .F.)
Operator Aciune Cod ( ) gruparea expresiilor logice Cvar1 AND (Cvar2 AND Cvar3) NOT, ! negare logic IF NOT CvarA = CvarB sau IF ! Nvar1 = Nvar2 AND I logic LvarX AND LvarY OR SAU logic LvarX OR LvarY
TEMA Variabile i tipuri de date predefinite in Visual FoxPro 2 Sumar
Tipuri de date. Constante, operaii i funcii Variabile Aplicaii propuse spre rezolvare n laborator
2 unde Cvar variabil de tip caracter, Nvar variabil de tip numeric, Lvar variabil de tip logic. relaional, lucreaz cu toate tipurile de date, expresia este evaluat i se returneaz o valoare logic .T. / .F.(adevrat / fals).
Operator Aciune Cod < mai mic dect ? 23 < 54 > mai mare dect ? 1 > 2 sau ?.t.>.f. = egal cu ? cVar1 = cVar <>, #, != diferit de ? .T. <> .F. <= mai mic egal cu ? {^1998/02/16} <= {^1998/02/16} >= mai mare egal cu ? 32 >= n_ani == comparare iruri de caractere ? status == "Open"
n cazul variabilelor de tip caracter operatorii relaionali funcioneaz prin compararea codurilor ASCII corespunztoare caracterelor din cele dou iruri, comparaia fcndu-se caracter cu caracter, de la stnga la dreapta. Dac irurile care se compar nu au aceeai lungime, implicit se completeaz irul mai scurt cu codul ASCII pentru caracterul 0. Operaia de egalitate a dou iruri de caractere este controlat de comanda: SET EXACT ON|OFF prin clauza OFF, implicit, se consider c cele dou iruri sunt egale n cazul cnd caracterele coincid pe lungimea celui mai scurt. prin clauza ON, egalitatea se verific pe lungimea irului mai lung, spaiile de la sfritul irurilor sunt ignorate.
numeric, lucreaz cu toate tipurile de date numerice.
Ordinea operatorilor din tabel este cea folosit n matematic. Operaia modulo (%) se mai poate executa apelnd funcia MOD(n1,n2) care va calcula restul mpririi numrului n1 la numrul n2.
caracter, care permite concatenarea, compararea datelor de tip ir de caracatere, utiliznd urmtorii operatori:
3 Operator Aciune Cod + Concatenare. Se unesc dou iruri de caractere, un ir i un cmp dintr-o nregistrare sau un ir de caractere i o variabil ? 'Bun ' + 'ziua' - Concatenare. Se ndeprteaz spaiile goale de la sfritul elementului care precede operatorul, apoi se unesc cele dou elemente. ? 'Bun ' - 'seara' $ Comparare. Se caut un ir de caractere n interiorul altui ir de caractere. ? 'punct' $ contrapunct' ? 'principal' $ clienti.adresa
1.2 Date i funcii predefinite asociate tipurilor de date
a) Date de tip numeric. Funcii aritmetice
Expresiile de tip numeric pot fi: cmpuri de tip numeric (N), ntreg (I), virgul mobil (F) dintr-un tabel; funcii care returneaz o variabil (constant) numeric; variabile i constante de tip numeric.
Scop / reprezentare matematic Funcie VFP restul mpririi exacte a lui n 1 la n 2 mod (n 1 ,n 2 )
abs(x) partea ntreag a lui x int(x) urmtorul ntreg mai mare sau egal cu x (plafon) ceiling(x) urmtorul ntreg care este mai mic sau egal cu x (podea) floor(x) rotunjirea unei expresii numerice la un numr specificat de zecimale round(nExpr,nr_zecimale) e x
exp(x) ln(x) log(x)
log10(x)
sqrt(x) sin x sin(x) cos x cos(x) tg x tan(x) arcsin x asin(x) arccos x acos(x)
4 arctg x atan(x) trecerea din grade n radiani dtor(x) trecerea din radiani n grade rtod(x) alegerea numrului de zecimale n set decimals to n valoarea constantei PI()
b) Funcii financiare Scop Funcie VFP returneaz valoarea ratei necesare pentru achitarea unui mprumut s, cu dobnda d*, pe perioada nr** (anual sau lunar) PAYMENT(s,d,nr) returneaz suma ce trebuie depus n cont pentru a plti o rat s, pe o perioad nr (ani sau luni), dac dobnda acordat este d PV(s,d,nr) (Present Value) returneaz suma ce se poate strnge n cont, dup o perioad nr (ani sau luni), dac dobnda este d iar rata depunerii este s FV(s,d,nr) (Future Value)
*Argumentul d (dobnda) este utilizat n form zecimal (d=0.06 6%). Dac dobnda se preia sub form procentual se va mprii la 100. Implicit este dobnda anual. **Argumentul nr (perioada) este implicit exprimat n ani. Dac calculul se efectueaz pentru o perioad exprimat n luni, va terbui modificat corespunztor i dobnda (anual lunar).
A. Funcia PAYMENT returneaz valoarea fiecrei pli, dintr-o serie periodic de pli (rat), a unui mprumut s, cu dobnda fix d, pe o perioad nr. Sintaxa funciei: PAYMENT(s,d,nr)
Exemplu 1: Firma DACIA vinde autoturisme marca LOGAN care pot fi achitate n rate lunare, pe o perioad de patru ani. mprumutnd de la BRD suma de 6400 $ cu dobnda anual de 8.9%, s se stabileasc care este rata lunar pe care trebuie s o achite un client.
SET TALK OFF && anuleaza afisarea rezultatelor comenzilor CLEAR && curata spatiul de afisare SET CURRENCY TO '$' && definirea simbolului monedei STORE 0 TO S,NR && initializarea variabilelor S, NR cu 0 D=0.00 && initializarea variabilei D (un alt mod de initializare)
@3,20 SAY 'STABILIREA RATEI LUNARE PENTRU UN IMPRUMUT' @7,15 SAY 'SUMA IMPRUMUTATA ?:' GET S @9,15 SAY 'DOBANDA ANUALA (%) ?:' GET D @11,15 SAY 'IN CATE LUNI TREBUIE ACHITAT IMPRUMUTUL ?:' GET NR READ && citirea ntregului ecran - variabilele editate cu @.. GET
@15,20 SAY 'RATA LUNARA ESTE DE: ' SET CURRENCY RIGHT && setarea afisarii simbolului monedei la dreapta @15,45 SAY PAYMENT(S,D,NR) FUNCTION '$9999.99' && afisarea rezultatului functiei si a monedei WAIT WINDOW 'APASATI ENTER'
B. Funcia PV returneaz valoarea sumei pe care trebuie s o avem n cont, pentru a putea plti o rat s, pe o perioad nr, pentru o dobnd anual d acordat de banc la depozit. Sintaxa funciei: PV(s,d,nr)
Exemplu 2: O firm trebuie s achite o chirie lunar de 300 $ pentru sediu, pe o perioad de 5 ani. Ci bani trebuie depui n cont la banca BCR, dac dobnda la acest tip de depozit este de 4% pe an.
SET CLOCK ON && afisarea timpului dat de sistemul de operare CLEAR STORE 0 TO S,NR D=0.00 @3,25 SAY 'STABILIREA SUMEI NECESARE IN CONT PENTRU PLATA UNEI RATE; LUNARE' @7,20 SAY 'RATA LUNARA ?:' GET S @9,20 SAY 'DOBANDA ANUALA (%) ?:' GET D @11,20 SAY 'PERIOADA (LUNI) DE ACHITARE A RATEI ?:' GET NR READ D=D/12/100 @15,25 SAY 'SUMA INITIALA DIN CONT TREBUIE SA FIE DE '; +ALLTRIM(STR(PV(S,D,NR),10,2))+' $' * functia STR() transforma o valoare numerica ntr-un sir de caractere * functia ALLTRIM() elimina spatiile de la nceputul si sfrsitul sirului WAIT WINDOW 'APASATI ENTER'
C. Funcia FV returneaz valoarea sumei ce se strnge ntr-un cont, n cazul n care se depune o rat s, banca ofer o dobnd anual d, pe o perioad nr. Sintaxa funciei: FV(s,d,nr)
Exemplu 3: Ce sum va strnge n cont un copil, care primete pensie alimentar timp de 10 ani, cte 50 $ pe lun, la o banc ce ofer o dobnd de 4% pe an ?
CLEAR STORE 0 TO S,NR D=0.00 @3,25 SAY STABILIREA SUMEI STRANSE IN CONT DUPA O PERIOADA DE TIMP @7,20 SAY RATA LUNARA ?: GET S @9,20 SAY DOBANDA ANUALA ?: GET D @11,20 SAY PERIOADA (LUNI) DE DEPUNERE A RATEI ?: GET NR READ D=D/12/100 @15,25 SAY SUMA STRANSA IN CONT ESTE +ALLTRIM(STR(FV(S,D,NR),10,2))+ $ WAIT WINDOW APASATI ENTER
6
c) Date i funcii de tip caracter
Operanzii de tip caracter pot fi: cmpurile de tip CHARACTER ale unui tabel; funciile care returneaz un ir de caractere; variabile i constante de tip ir de caractere.
O constant de tip ir de caractere se trece ntre caracterele , resprectiv, . Dac irul de caractere conine n componena sa caracterul () atunci pentru definirea irului se folosesc caracterele ().
Scop Funcie VFP Returneaz caracterul corespunztor codului ASCII n (I=1...127) CHR(n) Returneaz codul ASCII pentru un caracter c ASC(c) Extragerea unui subir de de caractere, de lungime n 2 , din irul s, ncepnd cu poziia n 1
SUBSTR(s,n1,n2) Extragerea unui subir de n caractere, ncepnd din stnga irului s LEFT(s,n) Extragerea unui subir de n caractere, ncepnd din dreapta irului s RIGHT(s,n) Returnarea unui ir de caractere s, n mod repetat de n ori REPLICATE(s,n) Obinerea unui ir de n spaii goale SPACE(n) Eliminarea spaiilor ntr-un ir de caractere: de la nceputul i sfritul irului s de la nceputul irului s de la sfritul irului s
ALLTRIM(s) LTRIM(s) RTRIM(s) Adugarea de spaii, sau a unui caracter c_pad, ntr-un ir s pentru a ajunge la lungimea n: la ambele capete la stnga la dreapta
PADC(s,n[, c_pad]) PADL(s,n[,c_pad]) PADR(s,n[,c_pad]) Returneaz lungimea unui ir de caractere s LEN(s) Returneaz poziia de nceput, la a n-a apariie, a unui subir de caractere ss ntr-un ir de caractere s AT(s,ss,n) Returneaz poziia de nceput, la a n-a apariie, a unui subir de caractere ss ntr-un ir de caractere s, fr a se ine seama de litere mari/mici ATC(s,ss,n) Returneaz poziia numeric, la a n-a apariie, a unui subir de caractere ss ntr-un ir de caractere s, ncepnd cutarea de la dreapta RAT(s,ss,n)
7 Transformarea caracterelor unui ir s n litere mari UPPER(s) Transformarea caracterelor unui ir s n litere mici LOWER(s) Transformarea primului caracter al unui ir s, dac este o liter, n majuscul PROPER(s)
d) Date i funcii de tip calendaristic
Expresiile de tip dat calendaristic pot fi: cmpuri de tip dat calendaristic (DATE), dintr-un tabel; funcii care returneaz data calendaristic; constante de tip dat calendaristic.
O dat de tip dat calendaristic precizeaz ziua, luna, anul, ordinea acestor 3 elemente poate fi aleas din 11 moduri, cu ajutorul comenzii: SET DATE TO <tip_dat> unde: tip_dat Format AMERICAN ll/zz/aa ANSI aa.ll.zz BRITISH zz/ll/aa FRENCH zz/ll/aa GERMAN zz.ll.aa ITALIAN zz-ll-aa JAPAN aa/ll/zz USA ll-zz-aa MDY ll/zz/aa DMY zz/ll/aa YMD aa/ll/dd
Cele 3 elemente pot fi separate cu /, -, .. Implicit se consider formatul: ll/zz/aa. Cu comanda: SET CENTURY ON|OFF se poate preciza dac anul este este afiat cu 2 cifre (ON) sau 4 cifre (OFF). Comanda: SET MARK TO <caracter> precizeaz ce caracter se va folosi ca separator ntre cele 3 elemente ale datei. Funcii pentru datele de tip dat calendaristic sunt date n tabelul urmtor:
Scop Funcie VFP Returneaz data din sistem(calculator) DATE() Numele zilei dintr-o expresie de tip dat d CDOW(d) A cta zi din sptmn dintr-o expresie de tip dat d DOW(d)
8 Numele lunii dintr-o expresie de tip dat d CMONTH(d) A cta lun din an dintr-o expresie de tip dat d MONTH(d) Izolarea anului dintr-o expresie de tip dat d YEAR(d) Returneaz ora din sistem (calculator) TIME() Returnarea sub form de ir de caractere, n format aaaallzz a unei expresii de tip dat calendaristic d DTOS(d)
Folosirea ntr-un program a unei constante de tip dat calendaristic, se face ntre acolade {^aaaa/ll/zz}, unde aaaa reprezint anul (scris folosind patru cifre), ll reprezint luna, iar zz ziua n cadrul anului respectiv. O constant de tip moment de timp se specific astfel: {^aaaa/ll/zz, oo:mm:ss xM}, unde: - aaaa reprezint anul, ll reprezint luna, iar zz reprezint ziua; acest format poate varia n funcie de comenzile SET DATE, SET YEAR, etc.; - oo reprezint ora n cadrul zilei (de la 0 la 12 sau de la 0 la 24, n funcie prezena sau de absena construciei AM sau PM), mm reprezint minutele, iar ss secundele; - xM poate fi AM (AnteMeridian), indicnd c ora respectiv este nainte de prnz (ora 12:00), sau PM (PostMeridian), cnd ora se situeaz dup prnz.
Spre deosebire de cazul datelor calendaristice, efectul aplicrii operatorilor + i - asupra unor date de tip moment de timp este acela de avans i respectiv de recul cu numrul de secunde respectiv.
e) Date de tip memo
Acest tip de date este asemntor tipului ir de caractere. Este indicat folosirea datelor de tip memo n cazul n care un cmp al unei nregistrri dintr-un tabel, nu are o lungime cunoscut (sau care nu poate fi aproximat). Utilizarea unui cmp memo ntr-un tabel, are ca efect asocierea la tabel a unui fiier suplimentar n care se depun datele cmpului memo. n tabel, n cmpul memo sunt stocate informaii referitoare la tabelul suplimentar.
f) Funcii de conversie Funcii de conversie din grade n radiani si invers DTOR (nExpr) RTOD (nExpr) unde, nExpr este o expresie numeric transformarea unei date calendaristice intr-un sir de caractere DTOC (dExpr) DTOS (dExpr) MDY (dExpr) DMY (dExpr)
9 unde, dExpr este o expresie dat calendaristic transformarea unui sir de caractere in data calendaristica CTOD (cExpr) unde, cExpr este o expresie caracter ir de caractere transformarea valorilor numerice in siruri de caractere STR(nExpr [, nLength [, nDecimalPlaces]]) unde, nLength lungimea exact a irului, nDecimalPlaces numrul de zecimale dup virgul transformarea sirurilor de caractere in valori numerice VAL(cExpr)
Exemplu 4: Se va scrie o rutin pentru exemplificarea lucrului cu date ale unor tipuri predefinite. clear
* Tipul logic ?not (1=3) ?(1<=4) and (5>3) ?6<3or 4*2=9
*Tipul numeric ?mod(38,6) && echivalentul lui % ?mod(44.44,11.11)
?round(14.4,2) && rotunjire cu un numar de zecimale precizate
?exp(2) && e la x ?log(2) && ln x ?log10(2) ?sqrt(2)
*Tipul sir de caractere ?len('Strada ion Ratiu'+'nr. 10') && returneaza lungimea sirului de caractere ?chr(49) && caracterul al carui cod este 49 ?asc('1') &&codul ASCII al caraterului '1' ?substr('ABCDEF',2,3) && extragere din pozitia a doua pe 3 caractere ?substr('ABCDEF',2) && extragere din pozitia a dua
*a) sir de carctere - numar ?str(13.34,7,3) && 7 e nr de caractere iar 3 elemntele de dupa virgula ?val('13.34')
*b) data calendaristica - sir de caractere ?dtoc({^1990/10/02}) ?ctod('10/02/1990') && ptr a fost definit modul britanic de data
2. Variabile 2.1 Folosirea variabilelor
O variabil are asociate urmtoarele elemente: numele coninutul tipul variabilei
11 Din punct de vedere al utilizrii lor, variabilele pot fi: locale, acioneaz ntr-o funcie sau procedur. Declararea utilizrii lor se face cu comanda:
LOCAL <list_variabile> <list_variabile> - variabilele se declar prin nume i tip. globale, acioneaz la nivelul ntregului program, inclusiv n funcii i proceduri. Declararea utilizrii lor se face cu comanda:
PUBLIC <list_variabile> Atribuirea de valori unei variabile se face cu sintaxa: <nume_var>=<expresie> Efectul comenzii: se evalueaz expresia din dreapta, se caut dac variabila a fost definit i i se atribuie valoarea i tipul expresiei. Atribuirea se mai poate face utiliznd comanda: STORE <expresie> TO <list_variabile> Efectul comenzii: se evaluaz expresia i se atribuie variabilelor din list, valoarea i tipul ei. Eliberarea zonelor de memorie ocupate de variabile care nu mai sunt necesare n program se face cu una din comenzile: RELEASE [ALL] <list_variabile> CLEAR [ALL] <list_variabile> Afiarea coninutului variabilelor existente n memorie se face cu comenda: DISPLAY MEMORY [TO PRINTER[PROMPT] | TO FILE nume_fiier] [NOCONSOLE] unde: TO PRINTER[PROMPT] ieirea la imprimant. Clauza PROMPT se folosete pentru a confirma imprimarea, ntr-o fereastr de dialog; TO FILE nume_fiier ieirea direcionat ctre un fiier; [NOCONSOLE] mpiedic afiarea n fereastra principal VFP, a rezultatelor comenzii.
Exemplu 5: procedure test private c public d c=3 d=4 note aici se cunosc variabilele a,b,c si d ?'a=',a ?'b=',b ?'c=',c ?'d=',d
Rezultatul n urma rulrii rutinei anterioare este cel descris ulterior:
12 2.2 Expresii de substituie
Macro substituia trateaz coninutul unei variabile ca un ir de caractere n sens literal (cmpul unei nregistrri dintr-o tabel, nume de fiier etc.), ca i cum n locul variabilei respective ar fi pus irul de caractere fr apostrofuri. Sintaxa comenzii: & nume_variabil
Exemplu 6: Presupunem c avem 2 fiiere tabel Student1.DBF (Nume, Prenume, Facultate) i Student2.DBF (Nota1, Nota2, Nota3). Vrem s le vizualizm coninutul ntr-un ciclu FOR.
PUBLIC FIS C(20) FOR I=1 TO 2 FIS='Student'+ALLTRIM(STR(I))+'.DBF' USE &FIS BROWSE ENDFOR CLOSE DATABASES
2.3 Expresia de nume Aceste expresii sunt de forma: nume_variabil. Este utilizat oriunde ntr-o instruciune, unde este vorba de un nume (nume de tabel, cmp, fiier). String-ul coninut de variabil este numele care va fi folosit de instruciune. Ex.: USE (vart) INDEX (varint) - e mai bun dect substituia Variabilele pot fi folosite i n legtur cu tabelele pentru a prelua din articolul curent al unui tabel valorile cmpurilor, respectiv, pentru a depune n articolul curent valori dintr-o list de variabile. Variabilele i cmpurile au nume identice. Instruciuni folosite sunt urmtoarele: SCATTER MEMVAR pentru preluare din table GATHER MEMVAR pentru inserarea (ncrcarea) unei variabile n tabel. Exemplu 7: USE Student1 LOCATE FOR Nume="POP" SCATTER MEMVAR DISPLAY OFF Nume, Prenume, Facultate
13 3. Aplicaii propuse spre rezolvare n laborator
Aplicaia 1.
Se va realiza o aplicaie tip calculator, pentru realizarea operaiilor primare aritmetice. Se va construi un formular Calculator.scx sub descrierea de mai jos.
Modul proiectare Modul rulare
Coninutul butonului de comand (lansare) are urmtoarea procedur de eveniment Click: do case case thisform.optiongroup1.value=1 thisform.text3.value=str(val(thisform.text1.value)+; val(thisform.text2.value)) case thisform.optiongroup1.value=2 thisform.text3.value=str(val(thisform.text1.value)-; val(thisform.text2.value)) case thisform.optiongroup1.value=3 thisform.text3.value=str(val(thisform.text1.value)*; val(thisform.text2.value)) case thisform.optiongroup1.value=4 thisform.text3.value=str(val(thisform.text1.value)/; val(thisform.text2.value),10,2) endcase
Caseta de introducere are stabilit proprietatea: ReadOnly: .T. True.
Aplicaia 2.
Se va realiza o aplicaie tip simulator rate bancare. Aplicaia va fi descris sub forma unui formular, cu numele Simulator credite.scx.
14
Modul proiectare Modul rulare
Opiunea buton de comand conine valorile nscrise, din meniul de context opiunea Builder, .
Butonul de introducere date are urmtoarele proprieti: ReadOnly: .T. True ControlSource: d Din meniul de context se alege Builder, iar din opiunea Data Type: Numeric.
Primul buton de comand are urmtorul coninut de procedur Click: if thisform.combo1.value="Nevoi personale" thisform.text1.value=10 endif if thisform.combo1.value="Auto" thisform.text1.value=8.9 endif if thisform.combo1.value="Imobiliar" thisform.text1.value=6.5 endif
Elementul de introducere date are urmtoarele proprieti: ControlSource: s Din meniul de context se alege Builder, iar din opiunea Data Type: Numeric.
Elementul de introducere date are urmtoarele proprieti: ControlSource: p Din meniul de context se alege Builder, iar din opiunea Data Type: Numeric.
15 Butonul de introducere date are urmtoarele proprieti: ReadOnly: .T. True Din meniul de context se alege Builder, iar din opiunea Data Type: Numeric.
Al doilea buton de comand are urmtorul coninut de procedur Click: thisform.text4.value=payment(s,d/12/100,p)
Aplicaia 3:
Se va dezvolta o aplicaie concretizat ntr-un formular cu numele Varsta.scx, n care se va determina timpul exact trecut de la naterea unui subiect.
Modul proiectare
Modul rulare Cmpul de editare (introducere) date Text2 are urmtoarele proprieti: Tip de date ales: dat calendaristic ControlSource: d
Etichetele Label4 i Label5: Autocenter: .T. True
16
Butonul de comand are urmtorul coninut de procedur Click: thisform.label4.caption="Salut, "+alltrim(upper(thisform.text1.text))
Butonul de comand are urmtorul coninut de procedur Click: set date to brit &&seteaza data in format zz/ll/aa set cent on &&seteaza data in format zz/ll/aaaa
azi=date() &&data de azi este retinuta in variabila azi z1=day(azi) &&ziua curenta m1=month(azi) &&luna curenta a1=year(azi) &&anul curent
if z2<=z1 z3=z1-z2 &&in z3 retinem ziua rezultat else m1=m1-1 do case case m1=1 or m1=3 or m1=5 or m1=7 or m1=8 or m1=10 or m1=12 z1=z1+31 case m1=4 or m1=6 or m1=9 or m1=11 z1=z1+30 case m1=2 if mod(a1,4)=0 &&cazul in care anul curent este bisect z1=z1+29 else z1=z1+28 endif endcase z3=z1-z2 endif
if m2<=m1 m3=m1-m2 else a1=a1-1 m1=m1+12 m3=m1-m2 endif
Se va construi un formular cu numele CNP.scx, prin intermediul cruia se va introduce un CNP valid, iar pe baza acestuia se vor determina sexul i data naterii ale persoanei aparintoare.
Modul proiectare Modul rulare
Cmpul de introducere date Text1: Tip de date ales: caracter MaxLength: 13
Cmpul de introducere date Text2: Tip de date ales: caracter ReadOnly: .T. True
Cmpul de introducere date Text3: Tip de date ales: dat calendaristic ReadOnly: .T. True
Primul buton de comand are urmtorul coninut de procedur Click: if left(thisform.text1.text,1)="1" thisform.text2.value="Masculin" else if left(thisform.text1.text,1)="2" thisform.text2.value="Feminin" else wait wind "CNP gresit!" endif endif
Al doilea buton de comand are urmtorul coninut de procedur Click: z=substr(thisform.text1.text,6,2)