2009-02-19

Problema in FoxPro

Mi-am testat puţin abilităţile de programare în FoxPro 9. Vezi în Box fişierul foxpro_11.zip.
Prietenul Octavian va fi probabil interesat.

2 comentarii:

Andrei spunea...

vreau sa propun o alta varianta pt rezolvarea punctului e)..
se va mai crea un camp nou tabelului firme.dbf, care se va numi "nr" si va fi de tip numeric ; in acest camp toate valorile vor fi "1".
apoi vom "construi" urmatorul program:
CLOSE ALL
USE firme
INDEX on localitate TAG localitate
TOTAL ON localitate TO man1 FIELDS nr
USE man1
CALCULATE MAX(nr) TO a
LIST localitate, nr for nr=a

ca explicare: functia Total aduna pentru fiecare localitate in parte, numarul de firme; de retinut ca intai s-a facut o indexare a tabelei dupa campul(cheie) "localitate"


va multumesc pt rabdare. Andrei

xunrage spunea...

Solutia gasita de domnul Andrei este interesanta. O voi discuta mai pe larg mai jos:

Pentru a adauga un nou camp nr la tabela firme ce are valoarea 1 se vor folosi urmatoarele comenzi:
ALTER TABLE firme.dbf ADD COLUMN nr NUMERIC(6,0)
UPDATE firme.dbf SET nr=1


Comanda urmatoare creaza un index structural numit localitate in fisierul FIRME.CDX folosind campul localitate:
INDEX ON localitate TAG localitate

De mentionat ca fisierul index FIRME.CDX este deschis automat odata cu fisierul FIRME.DBF, insa ordinea virtuala data de index nu este folosita implicit. Pentru a folosi un astfel de index se foloste comanda:
SET ORDER TO localitate

Comanda urmatoare calculeaza totalul pentru campul numeric nr a grupurilor de inregistrari care au valoarea campului localitate identica si pune rezultatul intr-o noua tabela cu aceeasi structura cu a tabelei firme. Pentru a calcula un total util este nevoie ca tabela firme sa fie sortata sau sa contina un index:
TOTAL TO man1 ON localitate FIELDS nr

Comanda urmatoare calculeaza valoarea maxima a campului nr si plaseaza valoarea obtinuta in variabila a:
CALCULATE MAX(nr) TO a

Comanda urmatoare listeaza inregistrarile pentru care valoarea campului nr este egala cu a, afisand numai campurile localitate si nr:
LIST localitate,nr FOR nr=a

De mentionat ca comanda TOTAL nu va functiona asupra tabelei firme asa cum a fost ea creata fiind necesara eliminarea validarii campului tip:
ALTER TABLE firme.dbf ALTER COLUMN tip DROP CHECK