online kép - Fájl  tubefájl feltöltés file feltöltés - adja hozzá a fájlokat onlinefedezze fel a legújabb online dokumentumokKapcsolat
  
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

Online dokumentumok - kep
  

FoxPro alapok

számítógépes



felso sarok

egyéb tételek

jobb felso sarok
 
Átviteli minöséggel kapcsolatos kérdések
Rekurzió (particiószam, Hanoi tornyai, postfix konverzió)
Windows XP (magyar) új kapcsolat létrehozasa
Web mail és e-mail IP alapon
Megoldasi módszerek
Windows halózati jellemzői
Informaciós tarsadalom
Memória technológiak*
Elektronikus levelezés
 
bal also sarok   jobb also sarok

FoxPro alapok



1 Alapvető műveletek

Numerikus műveletek (prioritás sorrendjében)

(hatványozás)

(szorzás), / ( osztás), % (maradékképzés)

(összeadás), - (kivonás)


Logikai műveletek prioritás sorrendjében)

NOT (vagy ! ) - negálás ( logikai nem)

AND - logikai és

OR - logikai vagy


Karakteres műveletek + kifejezések összefűzése (konkatenálása);

− kifejezések olyan összefűzése, amelyben az első kifejezés végén levő szóközök átlesznek helyezve a második kifejezés végére;

X$Y -             a $ művelet eredménye True (.T.), ha X az Y része (vagy megegyezik vele) és - False (.F.), ha nem;

két kifejezés identikus egyenlősége (beleértve a kifejezések hosszát és a szókőzők számát is).


Relációs műveletek

A relációs műveletek a numerikus-, karakteres- és dátum kifejezésekkel alkalmazhatók.

<   - kisebb, mint,

> - nagyobb, mint,

- egyenlő,

# ( <> vagy != ) - nem egyenlő,

<= - kisebb vagy egyenlő (nem nagyobb),

>= - nagyobb vagy egyenlő (nem kisebb).


A karakteres kifejezések összehasonlítása a második (jobb oldali) kifejezés alapján történik.


Példa

'abc' = 'a' az eredmény Igaz (.T.),

'a'='abc' az eredmény Hamis (.F.).


2 Parancsok általános struktúrája

Egy tipikus parancsnak, amely a műveletet a táblával hatja végre, a következő struktúrája van:


Parancs-név [<hatókör>] [<kifejezéslista>] [FOR <feltétel-1>] [WHILE <feltétel-2>]


A hatókör azoknak rekordok a halmazát tartalmazza, amely részt vesz az adott műveletben.

A hatókör a következő értékeket vehet fel:

  • ALL az összes rekord
  • REST az aktuális rekordtól az utolsóig
  • NEXT N  - a következő N rekord
  • RECORD N - az N-ik sorszámú rekord

Ha a parancs nem tartalmaz hatókört, akkor annak a hatókör az alapértelmezés szerint lesz kiválasztva. Az alapértelmezés parancsonként változhat. Leggyakrabban a parancsokban az alapértelmezés az összes rekordra (ALL opció esetén) vagy az aktuális rekordra vonatkozik.


FOR <feltétel-1> - a műveletben azok a rekordok vesznek részt, amelyek megfelelnek a feltételnek,

WHILE <feltétel-2> - a művelet addig folytatódik, amíg teljesül a feltétel. Ezért a WHILE feltételt csak rendezett táblákkal van értelme alkalmazni.


A SET parancsokkal bizonyos beállításokat lehet végrehajtani:

SET <paraméter> TO <paraméter értéke>;

vagy

SET <paraméter> OFF/ON

  • ON - a <paraméter> be van kapcsolva
  • OFF - a <paraméter> ki van kapcsolva.

A karakter konstansokat különbözőképpen jelölhetjük: ˝ ˝, ´ ´, [ ].
A dátum konstansok formátuma: . Az üres dátum jelölése: .
Logikai konstansok lehetséges jelölése: .t. (.T.), .f. (.F.) .


A QUIT parancs befejezi a FoxPro rendszer futtatását és a vezérlést visszaadja az operációs rendszernek.


3 Táblák létrehozása és módosítása


CREATE [<tábla állomány neve>]

A tábla állomány kiterjesztése - .dbf

Meg kell adnunk a tábla mezőinek paramétereit: név, típus, mező hossza.

A mezők fontosabb típusai:

  • Character (C) - karakter típusú, maximális hossza - 254 karakter (byte)
  • Numeric (N) - numerikus típusú, maximális hossza 20, alapértelmezésként - 8
  • Float (F) - lebegőpontos numerikus, maximális hossza 20, az alapértelmezés - 8
  • Date (D) - dátum típusú, hossza - 8
  • Logical (L) - logikai típusú, hossza - 1
  • Memo (M) -  memo típusú adatok határozatlan hosszúságú karaktersorozatot tartalmaznak és a .fpt kiterjesztésű állományban tárolódnak, amelyet a CREATE parancs automatikusan hoz létre. A DBF állományban csak a memo-mező mutatója tárolódik, amely által a fpt- állomány megfelelő rekordjához hozzá lehet férni. A mutató hossza -10
  • General (G) - általános típus. Különböző objektumok (képek, hangok, táblázatok) tárolhatók. A DBF állomány az objektum mutatóját tárolja.

A tábla struktúráját a

MODIFY STRUCTURE

paranccsal lehet megváltoztatni.


4 Tábla megnyitása és bezárása. Munkaterületek

Tábla megnyitása és bezárása

A

USE f

parancs megnyitja a f.dbf nevű állományt. Ha a f.dbf memo-mezőket is tartalmaz, akkor a USE parancs a f.fpt állományt is megnyitja.

A USE parancs paraméterek nélkül bezárja az aktív táblát.

(A USE parancsról bővebben 12.2)


Munkaterület

Egy munkaterületekben egy táblát lehet megnyitni. A munkaterületek száma 255 lehet. Ha egyidejűleg több táblát szükséges megnyitni, akkor a SELECT paranccsal kiválasztjuk a munkaterületet és utána a USE paranccsal ott lehet megnyitni a táblát. A munkaterületeket legegyszerűbb számokkal jelölni: 1, 2, 3,.,10 A munkaterületet a

SELECT <munkaterület>

parancs által lehet kiválasztani.


Példa

SELECT

USE varos

SELECT

USE elofizeto


Ha azt akarjuk, hogy a varos tábla legyen aktív, akkor a

SELECT

vagy

SELECT varos

paranccsal az első munkaterületre kell átkapcsolni. Egy állományt a következő szabad munkaterületen a

USE f IN 0

parancs segítségével lehet megnyitni.


Összetett nevek

varos.telepnev, varos->telepnev, elofizeto.telszam,

elofizeto->telszam.

Állományok bezárása

CLOSE DATABASE

CLOSE ALL

USE

5 Rekordok beszúrása a táblába

Az

APPEND

parancs a tábla végére új rekordokat szúr be, úgy hogy a felhasználó interaktív módban beviheti az adatokat a rekordba. A

APPEND BLANK

parancs üres rekordot szúr be a táblába. Itt azt feltételezzük, hogy az adatokat a rekordba a felhasználó 242c21c vagy a program később fogja bevinni.

A memo-mezőkhöz a Ctrl+Home billentyű-kombinációval lehet hozzáférni, vagy az a mezőre egérrel kétszer rákattintani. A memo-mezőből a Ctrl+W (Ctrl+End) vagy az Esc billentyűkkel lehet kilépni. Az Esc billentyű esetén az új értékek nem tárolódnak a memo-mezőben.

Az

INSERT

parancs új rekordot szúr be az aktuális rekord (a rekordmutató) után.

Az

INSERT BEFORE

parancs az új rekordot a rekordmutató elé helyezi.

Az

INSERT BLANK

parancs üres rekordot szúr be a táblába.


Dátum formátumának beállítása

A dátum formátumot a

SET DATE <Date>

paranccsal lehet beállítani (megváltoztatni).

A Date paraméter lehetséges értékei:

AMERICAN (hh/nn/éé)

ANSI                   (éé.hh.nn)

BRITISH           (nn/hh/éé)

FRENCH           (nn/hh/éé)

GERMAN         (nn.hh.éé)

ITALIAN (nn-hh-éé)


Hasznos lehet még egy dátumhoz tartozó beállítás:

SET CENTURY OFF/ON

ON - az év a képernyőn négy számjegyet fog tartalmazni

OFF - csak az év két utolsó számjegye jelenik meg a képernyőn.


A

SET BELL ON/OFF

parancs a hangjelzést be- vagy kikapcsolja.

Az állományok különböző könyvtárakban tárolódhatnak. Az aktuális meghajtót és az elérési útvonalat a

SET DEFAULT TO [[<meghajtó> <útvonal>]

paranccsal lehet megadni. Ha a SET DEFAULT parancs nincs megadva, akkor az aktuális könyvtár az lesz, amelyben a FoxPro rendszer tárolódik.


Példa

SET DEFAULT TO A:\programok\foxprow
SET DEFAULT TO
C:\munka
SET DEFAULT TO \
SET DEFAULT TO.


Ha az állományainkat több könyvtárban tároljuk, akkor célszerű a

SET PATH TO [<útvonal-lista>]

paranccsal megadni az állományok keresési útvonalait.


6 Rekordok módosítása


BROWSE, EDIT (CHANGE)

Ha az adatok bevitelénél azt akarjuk, hogy egy mező értéke azonos legyen az előző rekord mezőének értékével, akkor

SET CARRY ON

beállítást alkalmazzunk, és az adatok automatikus másolását hajtja végre az előző rekordból. A parancs alapértelmezése - OFF (az adatok másolása ki van kapcsolva). A

SET CARRY TO <mezőlista>

parancs pedig megadja azok mezők listáját, amelyek rész vehetnek a másolásban.


BROWSE -ablak

A BROWSE parancs a táblát megjeleníti a BROWSE-ablakban, és utána interaktív módban lehet:

  • logikailag törölni a rekordokat
  • módosítani a tábla mezőit
  • új rekordokat beszúrni a táblába  

A parancs paramétereket tartalmazhat:
            BROWSE [FIELDS <mezőlista>] [FOR <feltétel>] .


Példa

BROWSE FOR ar> 2000 AND ar <=5000


USE vevo
BROWSE FIELD lakhely = ALLTRIM(megye) + ', ' + ;

ALLTRIM(varos) && a lakhely - szerkesztett mező


CHANGE - ablak

Az EDIT (CHANGE) parancsot a FoxPro a CHANGE-ablakban hajtja végre. A parancs paraméterei azonosak a BROWSE-parancs paramétereivel.


7 Mezők módosítása a REPLACE paranccsal


REPLACE [<hatókör>] <mezőnév> WITH <kifejezés>, <mezőnév> WITH <kifejezés>, .., [FOR <feltétel-1>] [WHILE <feltétel-2>] [ADDITIVE]


A mező megkapja a kifejezés értékét.


Példa

REPLACE ALL ar WITH ar*0.8 FOR ar>20000


BLANK [<hatókör>] [FIELDS <mezőlista>] [FOR <feltétel-1>]

[WHILE <feltétel-2>].


A BLANK parancs törli a mezőlistában megadott mezőket (alapértelmezésként törli az összes mezőt). A BLANK parancs paraméterek nélkül törli az összes adatot az állományból, úgy hogy a rekordok nem semmisülnek meg, csak üres értékeket fognak tartalmazni.

8 Rekordmutatók

A táblához tartozik egy rekordmutató, amely meghatározza az aktuális rekordot. Az aktuális rekord részt vesz annak a parancsnak a végrehajtásában, amelyben nincs megadva a hatókör, a parancs hatókörének az alapértelmezése egy rekord.

A rekordmutató értéke módosítható:

GO TOP/ BOTTOM/ N [IN <munkaterület>] ( GOTO=GO )

A parancs után a rekordmutató értéke megváltozik:

  • TOP - az első rekordra
  • BOTTOM - az utolsó rekordra
  • N - az N-ik rekordra

A
             
SKIP [N] [IN <munkaterület>]

parancs a rekordmutató értékéhez hozzáad N-t. N negatív is lehet.

SKIP - eggyel növeli rekordmutató értékét

SKIP 4

SKIP


A táblához tartozó legfontosabb függvények:

  • RECCOUNT [<munkaterület>]) - visszaadja a tábla rekordjainak számát
  • EOF [<munkaterület>]) - igaz értéket ad, ha a rekordmutató kikerült a táblából, és az utolsó utáni (nem létező) rekordra mutat. Különben hamis lesz az értéke
  • BOF [<munkaterület >]) - igaz értéket ad, ha a rekordmutató kikerült a táblából, és az első rekord előtti (nem létező) rekordra mutat. Különben az értéke hamis lesz.

9 Tábla megjelenítése

DISPLAY [<hatókör>] [FIELDS <mezőlista>] [FOR <feltétel-1>]

[WHILE <feltétel-2>] [OFF] [TO PRINTER /

TO FILE <állománynév>]

A memo-mező megjelenítése a képernyőn fűgg a

SET MEMOWIDTH N

beállítástól. N meghatározza a szöveg soronkénti hosszát. N lehetséges értékei 8 . 256. Az alapértelmezés értéke - 50.

Hasonló a LIST parancs.

LIST [<hatókör>] [FIELDS <mezőlista>] [FOR <feltétel-1>]

[WHILE <feltétel-2>] [OFF] [TO PRINTER / TO FILE <állománynév>]


Példa

USE elofizeto
LIST FOR irszam=3300 TO FILE egriek

Az egri előfizetők adatait az elofizeto.dbf táblából az egriek.txt állományba kerülnek.


Példa

GO

SET MEMOWIDTH

DISDPLAY nev, valtoz OFF  && a valtoz memo-mező


10 Táblák és rekordok törlése
Egy állományt csak akkor lehet törölni, ha az nincs megnyitva. Az állomány törlése:

ERASE <állománynév>

A tábla összes rekordját a

ZAP

paranccsal lehet törölni. A parancs után a tábla struktúrája megmarad.


Rekordok törlése

A rekordokat logikailag és fizikailag lehet törölni.

A logikai törlésnél a rekord megmarad a táblában, de meg lesz jelölve, hogy logikailag törölve van. A logikai törlést a

DELETE <hatókör>] [FOR <feltétel-1>] [WHILE <feltétel-2>]

parancs hajtja végre. A hatókör alapértelmezése - az aktuális rekord.

A logikailag törölt rekordot később fizikailag is lehet törölni. Lehet alkalmazni beállítást:

SET DELETED ON/OFF

  • ON - a logikailag törölt rekordokat a parancsok figyelmen kívül fogják hagyni (elrejtik azokat)
  • OFF - a logikailag törölt rekordok megjelennek a képernyőn, de jelölve lesznek a * karakterrel.

Az aktuális rekord állapotát (a logikai törlés szempontjából) a

DELETED

függvény által lehet lekérdezni. Ha a rekord törlésre van jelölve, akkor a DELETED() függvény .T. értéket ad vissza, különben .F.-et.

A logikai törlést vissza lehet vonni:

RECALL [<hatókör>] [FOR feltétel-1] [WHILE feltétel-2]

A hatókör alapértelmezése a RECALL parancsban - az aktuális rekord.

A logikailag törölt rekordokat a

PACK [MEMO DBF

paranccsal fizikailag lehet törölni. A fizikailag törölt rekordokat nem lehet visszaállítani.


11 Rekordok szűrése


SET FILTER TO <feltétel>

A következő parancsok figyelembe veszik a szűrő tartalmát (ami a FOR <feltétel>-nek felel meg). Például, a LIST parancs paraméterek nélkül úgy lesz végrehajtva, mintha tartalmazná a szűrőben megadott feltételt.

A szűrő tartalmát (a feltételt) az adott munkaterületen a

FILTER ([<munkaterület>])

függvénnyel lehet lekérdezni.

A

SET FILTER TO

parancs megszünteti a szűrőt hatását a következő parancsokra.



12 Indexek

12.1 Index-állományok osztályozása

  • egyszerű (önálló) indexállomány, amely csak egy indextáblát tartalmaz, a kiterjesztése .IDX
  • multiindexes állomány amely több indextáblát tartalmazhat, a kiterjesztése .CDX (compound index).

A multiindexes állományba tartozó táblát tegnek (TAG) nevezik. Minden tegnek van neve.

A multiindexes indexállomány

  • strukturált
  • nem strukturált

típusú lehet.

A strukturált CDX állomány neve megegyezik az tábla nevével és mindig avval együtt automatikusan lesz megnyitva. (Pl., ha a tábla neve f.dbf, akkor a strukturált CDX állomány f.cdx nevet kap). A nem strukturált CDX állomány neve tetszőleges lehet, és a megnyitásáról külön kell gondoskodni. A multiindexes állomány alkalmazása akkor előnyös, ha egyszerre több indexállománnyal kell dolgoznunk.
A FoxPro az úgy nevezett compact indexeket tartalmazza, ami gyorsítja az indexelést és a rekordok elérését. A multiindexes állomány mindig compact tulajdonságú, az egyszerű indexállomány (IDX) csak akkor compact, ha megadjuk a COMPACT paramétert.

Az index-állomány az INDEX paranccsal lehet létrehozni:

INDEX ON <kulcs-kifejezés> TO <IDX állomány>/ TAG <tegnév> [OF <CDX állomány>] [FOR <feltétel>] [COMPACT] [ASCENDING/DESCENDING] [UNIQUE] [ADDITIVE]


<kulcs-kifejezés> - kifejezés, amely szerint a táblát akarunk rendezni. A kifejezés maximális hossza az INX állomány esetén 100 karakter, a CDX állomány esetén pedig - 240. Kulcsként leggyakrabban egy mezőt szoktak alkalmazni. Általános esetben a kulcs-kifejezés több mezőt is tartalmazhat;

<IDX állomány> - az egyszerű indexállomány neve;

<tegnév> - tegnek a neve;

<CDX állomány> - a nem strukturált indexállomány neve;

<feltétel> - az indexelésben csak azok a rekordok vesznek részt, amelyekre igaz a <feltétel>

(a FOR bejegyzés elhagyásával a műveletben az állomány összes rekordja részt vesz),

ASCENDING/DESCENDING - az indexelés a kulcs értékeinek növekvő (csökkenő) sorrendben történik;

UNIQUE - az indexállomány csak egyszer tartalmazhatja a kulcs egy bizonyos értéket. Ha több rekordnak azonos a kulcsértéke, akkor ezek közül csak az első rekordot kell indexelni;

ADDITIVE - az INDEX parancs nem zárja be a már megnyitott indexállományokat. Alapértelmezésként - bezárja.


Példa

INDEX ON pol+fio TO p COMPACT

INDEX ON -irszám TAG p OF irrend

INDEX ON nem+nev TAG nem OF pf


12.2 Indexállományok megnyitása és bezárása

A USE parancs a táblával egyidejűleg megnyitja az indexállományokat:

USE <tabla-név> [IN <munkaterület>] [ALIAS <aliasnév> [AGAIN] [NOUPDATE] [INDEX <indexállomány-lista>] [ORDER [N / <INX állomány> / [TAG <tag név> [OF <CDX állomány>]]]] [ASCENDING/DESCENDING] [EXCLUSIVE]


Ha az indexállomány-lista több állományt tartalmaz, akkor lényeges, hogy melyik állományt választjuk fő indexállományként. A USE utáni parancsok az tábla rekordjait a fő index alapján érik el. A fő indexet meg lehet változtatni, vagy le lehet mondani az indexek alkalmazásáról (ebben az esetben érvényes a rekordok fizikai sorrendje).

AGAIN - a már megnyitott adatbázis-állományt egy másik munkaterületen is lehet megnyitni. Egy indexállomány csak egy munkaterületen nyitható meg;

NOUPDATE - az adatbázis nem módosítható;

<indexállomány-lista> - megadja az indexállományok sorrendjét. A strukturált indexállomány az adatbázissal együtt automatikusan kerül megnyitásra,

ORDER N - kiválasztja a fő-indexállományt az indexállomány listából (N - az indexállomány sorszáma a listában). Ha N=0, akkor nem választja ki a fő indexállományt;

ORDER <INX állomány> - a fő index az INX- állomány neve által van kiválasztva;

ORDER TAG <tegnév> [OF <CDX állomány>] - a fő index a tegnek a neve által van megadva;

Alapértelmezés szerint (ha az ORDER paraméter hiányzik) - a lista első indexállománya lesz a főindex.

ASCENDING/DESCENDING - a fő indexben kijelöli a kulcsnak a növekedő (ASCENDING) vagy csökkenő (DESCENDING) sorrendjét; (alapértelmezés - ASCENDING),

Ha a tábla már meg van nyitva és aktív, akkor a SET INDEX paranccsal a hozzátartozó indexállományokat utólag is meg lehet nyitni:

SET INDEX TO [<indexállomány-lista>] ORDER N/ <.IDX állomány>/ [TAG] <tagnév> [OF <.CDX állomány>] [ASCENDING/DESCENDING] [ADDITIVE


ADDITIVE - az új állományok megnyitása nem zárja be a már megnyitott index állományokat.

Ha az ADDITIVE paraméter nincs megadva, akkor a megnyitott indexállományok be lesznek zárva.

Ha a lista több indexállományt tartalmaz, akkor a főindex az első állomány lesz (ha nincs megadva az ORDER paraméter) vagy az ORDER paraméterben kijelölt állomány.

Az összes indexállományt a

SET INDEX TO

vagy a

CLOSE INDEX

paranccsal lehet bezárni. A strukturált indexállomány csak az adatbázis-állománnyal egyidejűleg zárható be.


Példák

USE varos

INDEX ON irszam TO irrend


USE varos

INDEX ON SUBSTR (telepnev, 1, 5) + STR (irszam, 4) TO rend


USE ber

INDEX ON ber FOR ber > 150000 TO nagyber


USE emberek

INDEX ON cim TAG cím

INDEX ON valalat TAG valalat OF valrend.cdx


12.3 Műveletek az indexekkel

A fő-index a következő parancs által megváltoztató:

SET ORDER TO N/<IDX-állomány>/ TAG] <tagnév> [OF <CDX-állomány>]

[IN <munkaterület>] [ASCENDING/ DESCENDING]


A parancs paraméterei megegyeznek a SET INDEX TO parancs paramétereivel.
SET ORDER TO - kikapcsolja a fő indexet. A további parancsok a tábla rekordjaihoz a fizikai sorrendben férhetnek hozzá. A megnyitott indexállományok továbbra is a tábla módosítása esetén megfelelően változnak.


Példa

USE video INDEX cim.idx, rend.cdx, kolcson.idx


A video.dbf állományhoz tartozik a strukturális indexállomány (video.cdx), amelynek 2 teg-je van: szam és ev. A video.cdx a video.dbf állománnyal automatikusan megnyílik. A rend.cdx állomány 2 teget tartalmaz: vetel és adas. Az indexállományok sorrendje alapján a SET ORDER TO N parancs a főindexet így választja ki -

SET ORDER TO 1 - cim.idx,

SET ORDER TO 2 - kolcson.idx,

SET ORDER TO 3 - video.cdx, TAG szam,

SET ORDER TO 4 - video.cdx, TAG: ev,

SET ORDER TO 5 - rend.cdx TAG: vetel,

SET ORDER TO 6 - rend.cdx TAG adas.


A fő-index nevét az

ORDER ([<munkaterület>])


függvény segítségével lehet lekérdezni.

Az IDX-állományokat CDX-állományokká lehet átalakítani:

COPY INDEXES <IDX- állomány> /ALL [TO <CDX- állomány>]


Ha nincs megadva a <CDX- állomány>, akkor az IDX- állomány a strukturált indexállományba kerül. A

COPY TAG <tagnév> [OF <CDX- állomány>] TO <IDX- állomány>

parancs egy tegből egy IDX- állományt hoz létre.

Az indexállományok törlését a


DELETE TAG <tegnév> [OF <CDX- állomány>]      

vagy

DELETE TAG ALL [OF <CDX- állomány>]

parancsokkal lehet végrehajtani.


13 Táblák (fizikai) rendezése


SORT TO <f1> [ASCENDING/ DESCENDING] ON <mező1> [/A] [/D] [/C][,<mező2> [/A] [/D] [/C].] [<hatókör>] [FIELDS <mezőlista>]

[FOR <feltétel1>] [WHILE <feltétel2>]


a <f1> állomány a rendezett rekordokat fogja tartalmazni. A parancs az aktív táblát nem változtatja meg.

ON <mező> [/A] [/D] [/C] - a mező neve, amely szerint az állományt rendezzük,

/A - növekvő sorrendbe rendezi (alapértelmezés),

/D - csökkenő sorrendbe rendezi,

/C - a parancs nem különbözteti meg a kis- és a nagybetűket.

Ezeket az opciókat együtt is lehet alkalmazni. Pl., /DC.

A rendezésre összesen 10 mezőt lehet kijelölni. Több mező esetén a rendezés a megadott sorrendben történik. A rendezés elsősorban az első mező alapján történik. A második mező szerint a rendezés csak akkor történik, ha az első mező értékei több rekordban azonosak.

ASCENDING - növekvő sorrend (alapértelmezés),

DESCENDING - csökkenő sorrend.

Az ASCENDING és DESCENDING paraméterek az összes rendezésre kijelölt mezőre hatnak, az /A és /D opciók pedig csak a hozzá tartozó mezőre.

FIELDS <mezőlista> - az <f1> állományba csak a megadott mezők kerülnek (alapértelmezés - az összes mező),

FOR <feltétel1> - csak azok a rekordok kerülnek a <f1> állományba, amelyek megfelelnek a feltételnek,

WHILE <feltétel2> - a rendezés csak addig folytatódik, ameddig a feltétel igaz.


14 Keresés a táblában

14.1 Szekvenciális keresés

Szekvenciális keresésre a következő két parancsokat lehet alkalmazni - LOCATE és CONTINUE.


LOCATE [<hatókör>] [FOR <feltétel-1>] [WHILE <feltétel-2>]

A LOCATE parancs a táblában keresi az első rekordot, amely megfelel a FOR- feltételnek. Ha a <hatókör> hiányzik, akkor a keresés az első rekordtól kezdődik. A parancs új értéket ad a rekordmutatónak. Ha a keresés sikeresen végződött, akkor a mutató a megfelelő rekord sorszámát kapja, ha nem - akkor a mutató eléri az állomány végét, és az értéke az állomány rekordjainak száma plusz egy lesz. Ha a LOCATE parancs talált rekordot, akkor a keresést tovább lehet folytatni (a LOCATE parancsban megadott FOR- feltétellel) a

CONTINUE

parancs segítségével. Ez a parancs nem tartalmazhat paramétereket. Ha a LOCATE vagy CONTINUE parancsok után meg akarjuk tudni, hogy találtak-e rekordot, akkor azt a RECNO( ), EOF( ) és FOUND( ) függvényekkel lehet ellenőrizni. Legtermészetesebb a

FOUND( ) függvény alkalmazása. A FOUND() logikai értéket ad vissza: .T. - ha a keresés sikeres volt, és .F. - ha sikertelen.


Példa

SET TALK OFF

USE elofizeto

Van=0

LOCATE FOR irszam=3300

DO WHILE FOUND

van=van+1

CONTINUE

ENDDO

? ' Egri előfizetők száma : '+ LTRIM(STR(van))

USE


Gyakran hasznos lehet a következő függvény is

LOOKUP (<mező-1>, <kifejezés>, <mező-2>)

A LOOKUP függvény keresi az első olyan rekordot, amelyben a <mező-2> tartalmazza a <kifejezés> értékét. Ha a keresés sikeres volt, akkor a függvény a <mező-1> értéket adja vissza, ha nem, akkor üres karaktert.


Példa

? LOOKUP (kod, 'S', nev), nev

kiírja a képernyőre az azonosítót (kod) és egy nevet, amely 'S' betűvel kezdődik.


14.2 Keresés az indexelt táblákban

A

SEEK <kifejezés>

parancs keresi azt az első rekordot, amelyben az index értéke egyenlő (vagy bizonyos esetekben közel van) a megadott kifejezés értékével. A kifejezés értékének keresése először az indexállományban bináris módszer alapján történik és utána a parancs a rekordmutatót az adatbázis-állomány megfelelő rekordjára állítja. A SEEK parancs csak az első rekordot keresi, amelyben a <kulcs> = <kifejezés> feltétel teljesül. Szükség esetén, a keresést könnyen lehet folytatni, mivel az állomány rendezett. Például, SKIP parancs által.

A SEEK parancs végrehajtására hat a

SET EXACT ON/OFF

parancs beállítása, amely meghatározza a karakteres kifejezések összehasonlításának a módját.

ON - opció megköveteli az összehasonlítás pontos végrehajtását,

OFF - esetén az összehasonlítás eredménye akkor is igaz, ha a kifejezéseknek a hossza különböző.

A kapott eredmény függhet a

SET NEAR ON/OFF

parancs beállításától is. Ennek a parancsnak a hatása akkor érvényesül, ha a SEEK parancs nem talált olyan rekordot, amelyben az index értéke pontosan egyenlő a <kifejezés> értékével. Ha a NEAR parancsban az ON opció van beállítva, akkor a SEEK parancs kiválasztja azt a rekordot, amelynek a kulcsértéke elsőként haladja meg a <kifejezés> értékét. Ha az OFF opció van beállítva, akkor a mutató az utolsó rekord után fog megállni.

A SEEK parancs után (mint a LOCATE és CONTINUE parancsok esetén is) alkalmazhatjuk a RECNO( ), FOUND( ) és EOF( ) függvényeket.

Létezik egy hasznos függvény:

SEEK(<kifejezés> [,<munkaterület>])

amely megfelel a SEEK parancsnak és a FOUND() függvénynek. A SEEK függvény keresi a <kifejezés> értéket az aktív vagy a megadott <munkaterületen>, és ha a keresés sikeres volt, akkor .T. értéket ad vissza, ellenkező esetben - .F. értéket.


Példa             

IF SEEK

DISPLAY

ENDIF


Példa

SET EXACT OFF

USE elofizeto

INDEX ON irszam TO rend

SEEK

IF FOUND

DISPLAY FIELDS irszam, nev, telepnev

ENDIF


Az indexállományokat a

REINDEX


parancs segítségével újból lehet indexelni.


15 Táblák összekapcsolása

11 Egy-egy típusú összekapcsolás


SET RELATION TO <kulcs> INTO <munkaterület> [,<kulcs> INTO <munkaterület> .] [ADDITIVE]

A parancs egy kulcs alapján összekapcsolja az aktív táblát egy másik táblával. A táblákat, amelyeket hozzákapcsolunk az aktív a táblához, a kulcs szerint kell indexelni. Ha azt akarjuk, hogy a már létező kapcsolatok is megmaradjanak, akkor az ADDITIVE paramétert kell megadni. A két a tábla összekapcsolása után az a táblák rekordmutatói összhangban fognak változni: a gyerek-tábla rekordmutatója mindig arra a rekordra fog mutatni, amelynek a kulcsértéke azonos az aktív tábla kulcs-értékkel. Ez a parancs azt is megköveteli, hogy a gyerek-táblában a kulcs értékei egyediek legyenek.

A táblák közti összekapcsolást a

SET RELATION TO

paranccsal (paraméter nélkül) lehet megszüntetni. A

SET RELATION OFF INTO <munkaterület>

megszünteti a kapcsolatot az adott munkaterületen.


12 Egy-több (egy-sok) típusú összekapcsolás

Az egy-több típusú összekapcsolás esetén az aktív tábla egy rekordjához a gyerek-tábla több rekordja is kapcsolódhat. Ezt a

SET SKIP TO [<munkaterület-1>, .]

paranccsal lehet létrehozni. Egy SET SKIP TO . parancs több egy-több típusú kapcsolatot hozhat létre. Ezt a parancsot a

SET RELATION TO .

parancs után kell elhelyezni. Az egy-több kapcsolatot a

SET SKIP TO

paranccsal (paraméterek nélkül) lehet megszüntetni.



16 Program állományok

A programokat a .PRG- kiterjesztésű állományokban tároljuk, és a

MODIFY COMMAND [<PRG - állomány neve>]

parancs segítségével lehet létrehozni.

Ez a parancs megnyit egy szövegszerkesztőt, amelyben megszerkeszthetjük a programot. Egy-egy parancsot mindég új sorban kell elhelyezni. Ha a parancs egy sorban nem fér el, akkor a sor végén a ; karakterrel kell jelezni, hogy a parancsot a következő sorban akarjuk folytatni.

A program a MODIFY COMMAND paranccsal módosítható. A program mentése a Ctrl+W billentyűkkel történik.

A létrehozott program végrehajtása:

DO <rutin> [WITH <paraméterlista>]

<rutin> - a program (eljárás) neve,

WITH <paraméterlista> - paraméterek, amelyeket a programnak kell átadni. A WITH paraméter akkor alkalmazható, ha a program a PARAMETERS parancsot tartalmazza. A

PARAMETERS <változólista>


parancs azokat a memóriaváltozókat tartalmazza, amelyek megkapja a paraméterek értékeit.
A program futtatása akkor fejeződik be, amikor a programvezérlés végrehajtja a RETURN, CANCEL, QUIT parancsokat vagy eléri a program utolsó parancsát. A programban elhelyezett DO parancs megszakítja a program futtatását és elindítja az eljárást. A program futtatását az Esc billentyűvel lehet befejezni, feltételezve, hogy azt a SET ESCAPE parancs beállítása engedélyezi

SET ESCAPE ON/OFF

Ha az ON opció van beállítva, akkor a program futtatását az Esc billentyűvel meg lehet állítani, ha OFF opció van beállítva, akkor nem.

A program megjegyzéseket is tartalmazhat. A FoxPro egy teljes sort megjegyzésként kezel, ha a sor

NOTE vagy *

karakterrel kezdődik.

Ha egy parancs után ugyanabban a sorban egy megjegyzést akarjuk elhelyezni, akkor azt a && karakterekkel kell jelezni.

16.1 Programok szerkezete

Nagyobb méretű programokat célszerű több részre bontani, amelyeket a rendszer eljárásokként (PROCEDURE) fog kezelni. Az eljárásokat egymástól függetlenül lehet létrehozni és tárolni. Az eljárásokon kívül függvényeket (FUNCTION) is lehet szerkeszteni. Azt az eljárást, amely különálló programállományban tárolódik, külső eljárásnak nevezzük. Ha egy eljárás egy programállomány része, akkor ez belső eljárás lesz. Eljárásokat és függvényeket tartalmazó állományokat Procedure- állománynak is szoktak nevezni.


Külső eljárás

A külső eljárás különálló program-állományban tárolódik. Az eljárás futtatása

DO parancs segítségével történik:

DO p [WITH <paraméter-lista>] [IN <f>]

p - a programállomány neve,

<paraméter-lista> - az eljárásnak átadott paraméterek listája,

IN <f> - opcionális paraméter, amely tartalmazza annak az állománynak a nevét, amelyben tárolódik a p eljárás,

A WITH záradékban megadjuk az aktuális paramétereket a <paraméter-listában>. (a formális paramétereket PARAMETERS parancs tartalmazza). Az aktuális paraméterek száma lehet a formális paramétereket, mint a formális paraméterek száma.

Az eljárás futtatása akkor ér véget, ha az végrehajtja:

az eljárás utolsó parancsát (visszatérés a hívó programba),

a RETURN parancsot (visszatérés a hívó programba),

a CANCEL parancsot (a vezérlés visszatér az interaktív-mód szintjére),

a QUIT parancsot (kilép a FoxPro rendszerből).

Az utolsó két eset gyakorlatilag ritkán fordul elő.

A RETURN parancs a vezérlést a hívó program DO utáni parancsára adja. A

RETRY

parancs a vezérlést arra a DO parancsra adja vissza, amely az eljárást elindította. A RETRY parancsot a hibakezelés esetén alkalmazzák, amikor a hiba feldolgozása után egy eljárást vagy parancsot újból meg akarunk ismételni.


Belső eljárás

A DO parancsnak a külső eljárást mindegyik végrehajtása előtt kell betölteni a memóriába. Ezért a belső eljárás alkalmazása gyorsabban hajtható végre. Nagyobb programok esetén belső eljárásokat szoktak alkalmazni. A belső eljárásokat és függvényeket célszerű együtt egy közös PROCEDURE állományban tárolni. A belső eljárás alkalmazása előtt a PROCEDURE állományt a

SET PROCEDURE TO p

paranccsal kell megnyitni, p - az állomány neve. Az állomány megnyitása után hozzá lehet férni a benne tárolt eljárásához és a függvényekhez.

A belső eljárás első parancsa a

PROCEDURE g

parancs, ahol g - az eljárás neve.

Egyszerre csak egy PROCEDURE állományt lehet megnyitni. A megnyitott állományt a

SET PROCEDURE TO

paranccsal lehet bezárni.


Függvények

Ha egy rutin eredményként csak egy értéket ad vissza, akkor eljárás helyet célszerű függvényt szerkeszteni. A függvény, mint az eljárás, külső vagy belső lehet. A függvény első parancsa a

FUNCTION f

Parancs, ahol f - a függvény neve.

Ha a függvénynek paramétereket kell átadni, akkor a FUNCTION parancs után PARAMETERS parancsot kell elhelyezni. A függvény utolsó parancsa a

RETURN <kifejezés>

parancs, a <kifejezés> az eredményt tartalmazza. Ha a függvényben nincs RETURN parancs, akkor az alapértelmezés szerint a

RETURN .T.

parancs kerül végrehajtásra. (A függvény .T. értéket ad vissza).

A függvényeket kifejezésekben így lehet alkalmazni:

P ( ) - ha a függvénynek nincsenek paraméterei, vagy

P (x, y, ...) - ha a függvény paramétereket tartalmaz (x, y,. az aktuális paraméterek).

Létezik még egy lehetőség - a függvény aktivizálható a DO paranccsal. Ebben az esetben a RETURN parancs nem tartalmazhat <kifejezést>.


Példa

SET TALK OFF
? negyzet(2)
WAIT WINDOWS "Rendben"

FUNCTION
negyzet
PARAMETERS
ennek
RETURN
ennek*ennek && visszatér a szám négyzetével


Program ideiglenes leállítása

A

WAIT [<kifejezés>] [TO <változó>]

Parancs megszakítja a program futtatását, és a <kifejezés> megjelenik a képernyőn. Ha nincs megadva a <kifejezés>, akkor a képernyőn a

Press any key to continue .

szöveg jelenik meg.

A <kifejezést> ajánlatos megadni, mivel ezzel bizonyos információt lehet közölni a felhasználóval;
TO <változó> - a felhasználó által bevitt egyetlen karakter kerül a <változóba>. Ez a <változó> csak egy karaktert képes befogadni.

17 Memóriaváltozók

17.1 Adatok bevitele és értékadás

A FoxPro-ban az értékadás módja a következő:

<változó> = <kifejezés>

A változót nem szükséges deklarálni. Ha a <változó> nem létezik, akkor a parancs azt létrehozza. A <változó> kapja a <kifejezés> értékét és típusát. Ha egy értéket több változónak akarunk adni, akkor a alkalmazhatjuk

STORE <kifejezés> TO <változók listája>

parancsot. A változók megkapják a kifejezés kiértékelt értékét.

A billentyűzetről az adatok így vihetők be:

INPUT [<szöveg>] TO <változó>

vagy

ACCEPT [<szöveg>] TO <változó>


Az ACCEPT paranccsal csak karakter típusú adatokat lehet bevinni, és ebben az esetben a karaktersort nem kell idézőjelek közé tenni.


?, ?? parancsok

A ? / ?? parancsokkal kifejezéseket lehet kiértékelni és megjeleníteni a képernyőn:

A ? parancs az eredményt egy új sorba írja, a ?? parancs pedig ugyan abba, ahol van a kurzor.


<kifejezés-lista>

Példa 

'Vigyáz! ', CHR(7) && 7- a hangjelzés kódja

17.3 Változók hatóköre

Az eljárásokba és függvényekbe az adatokat nemcsak paraméterekkel lehet átadni. A FoxPro lehetőséget ad globális változók alkalmazására, amelyek a program összes rutinjaiban érvényesek. A globális változókat deklarálása:

PUBLIC <változók> / <tömbök>

Ezek a változók automatikusan .F. kezdőértéket kapnak.
A főprogramban deklarált változó globális lesz, és minden eljárásból hozzá lehet férni. Egy parancsban létrehozott és alkalmazott változó alapértelmezésként public tulajdonságú lesz.
Lehet lokális változókat is létrehozni:

PRIVATE <változók> / <tömbök>

A lokális változók csak abban a rutinban érvényesek, amelyben deklarálva vannak. Ha az eljárás egy másik eljáráshoz fordul, akkor a lokális változó abban is érvényes. Maszkokat alkalmazva, a változókat csoportosítva is lehet deklarálni:

PRIVATE ALL / LIKE <mask> / EXCEPT <mask>.


18 Tömbök

Tömb definiálását a

DECLARE <változó> (N1 [, N2])    

vagy

DIMENSION <változó> (N1 [, N2])


.1 Táblák mezőinek másolása tömbbe (vagy memóriaváltozókba)

SCATTER [FIELDS <mezőlista>] [MEMO] TO <tömb> / TO <tömb>

BLANK/ MEMVAR/ MEMVAR BLANK


A SCATTER parancs az aktuális rekord összes vagy a megnevezett mezők értékeit egy tömbbe (TO <tömb>), vagy memóriaváltozókba (MEMVAR) másolja át. A tömböt (memóriaváltozókat) a SCATTER parancs hozza létre. A létrehozott memóriaváltozók neve megegyezik a mezők nevével. Ezért szükséges az összetett nevek alkalmazása: M.<változó> vagy M->változó (M - Memory). Ez fontos lehet, ha a program egyidejűleg azonos nevű mező és memóriaváltozót tartalmaz.
A memo-mezők csak akkor vesznek részt a másolásban, ha megadtuk a MEMO paramétert.
A BLANK paraméter memóriaváltozókat (tömböt) hoz létre, hozzárendeli a megfelelő mezők típusát, de nem tölti fel adatokkal.


.2 Tömb (memóriaváltozók) másolása a táblába

GATHER FROM <tömb> / MEMVAR [FIELDS <mezőlista>] [MEMO]


A FROM <tömb> - a tömb elemeinek értékeit az aktuális rekord mezőibe másolja át.


18.3 Rekordok másolása kétdimenziós tömbbe

COPY TO ARRAY <tömb> [FIELDS <mezők> [<hatókör>]]

[FOR <feltétel- 1>] [WHILE <feltétel - 2>]


.4 Tömb beszúrása a táblába
APPEND FROM ARRAY <
tömb> [FOR <feltétel>] [FIELDS <mezőlista>]

18.5 Rekordok módosítása a tömb alapján

REPLACE FROM ARRAY <tömb> [<hatókör>] [FIELDS <mezők>]

[FOR <feltétel-1>] [WHILE <feltétel-2>]


18.6 Tömb-függvények


18.6.1 Tömbelem törlése

ADEL (<tömb>, <elem(sor)szám> [, 2]).

Az ADEL függvény törli a <tömb> elemét (ha a tömb kétdimenziós, akkor törli a tömb sorát vagy oszlopát). Az <elem (sor)szám> a tömbelem (sor vagy oszlop) sorszáma, amelyet törölni kell. Ha megadjuk a harmadik paramétert, és annak az értéke 2, akkor a függvény törli az oszlopot. A függvény nem változtatja a tömb elemeinek számát. A törölt elem (sor, oszlop) a tömb végére kerül és. F. értéket kap. Visszaadott érték: 1 (ha az elem törölve volt).


18.6.2 Elem vagy sor (oszlop) beszúrása a tömbbe

AINS (<tömb>, <elem(sor)szám>, [, 2])

A függvény paraméterei megegyeznek az ADEL függvény paramétereivel. Az új elem (sor/oszlop) értéke: .F., a következő elemek nagyobb index-értéket kapnak. Az utolsó elem a tömbből kicsordul és megsemmisül.
Visszaadott érték: 1 (ha az elem törölve volt).


18.6.3 Tömb elemek másolása egy másik tömbbe
                      
ACOPY (<tömb1>,<tömb2>[, N1 [, N2 [, N3 ] ] ] )


A függvény a <tömb1> (forrástömb) elemeit a <tömb2>-be (céltömbbe) másolja át.
N1- kezdőindex (<tömb1> eleme, amelytől a másolás kezdődik), alapértelmezése: 1,
N2 - az átmásolandó elemek száma (alapértelmezés: az első elemtől az utolsó elemig,
N3- kezdőindex a <tömb2>-ben, ahová a másolt tömb első eleme kerül (alapértelmezése: 1).

18.6.4 Keresés a tömbben

ASCAN (<tömb>, <keresett érték> [,<kezdőindex> [,<elemszám>]])

A függvény a <tömbben> keresi a <keresett értéket>.
Ha adott a <kezdőindex>, akkor a keresés a megadott elemtől kezdődik (alapértelmezés - az első elemtől),
<elemszám> - a függvény ennyi elemet fog átvizsgálni (alapértelmezés: az utolsó elemig).
A függvény visszaadott értéke: a keresett értékkel megegyező első elem indexe, vagy 0 (ha a tömb nem tartalmaz ilyen elemet).


18.6.5 Tömb rendezése

ASORT (<tömb> [,<kezdőindex> [,<elemszám] [, N]]])


Ha adott a <kezdőindex>, akkor a rendezés az adott elemtől kezdődik (alapértelmezés - az első elemtől), <elemszám> - elemek száma, amelyek részt vesznek a rendezésben (alapértelmezés: az utolsó elemig).

N - megadja a rendezés sorrendjét: 0 - növekvő sorrend, 1 - csökkenő sorrend.


18.6.6 Tömb elemeinek (sorainak, oszlopainak) megszámolása
ALEN (<tömb> [, N])

A függvény megállapítja a tömb elemeinek, sorainak vagy oszlopainak számát. Ha N=1, akkor a függvény a sorok, ha N=2 akkor az oszlopok számát adja vissza.


19 Memóriaváltozók mentése és visszahelyezése a memóriába

SAVE TO <MEM-állomány>/TO MEMO <memo-mező>

[ALL LIKE/ EXCEPT <maszk>]


ALL LIKE - menti a maszknak megfelelő változókat.
Az ALL EXCEPT opció esetén azok a változók kerülnek mentésre, amelyek a maszknak nem felelnek meg. A parancs alapértelmezése - az összes memóriaváltozó.

Biztonsági szempontok miatt hasznos lehet a következő parancs:

SET SAFETY ON/OFF

Ha az állomány, amelybe menteni akarjuk a változókat, már létezik, és a SET SAFETY parancs ON opciója van beállítva, akkor az állomány felülírása előtt a rendszer figyelmeztet:

<állomány-név> already exists, overwrite it?
(az állomány már létezik, felülírja azt?)


Memóriaváltozók visszahelyezése a memóriába

RESTORE FROM <állomány> /FROM MEMO <memo- mező> [ADDITIVE]


Memóriaváltozók törlését a memóriából a

RELEASE <memóriaváltozó-lista> / ALL [LIKE/EXCEPT <maszk>]

paranccsal lehet végrehajtani.

A

CLEAR MEMORY

paranccsal lehet törölni az összes memóriaváltozót.
A változók és az értékük megjeleníthetők a képernyőn:

DISPLAY/LIST MEMORY [LIKE <maszk>]

vagy a nyomtatóra (állományba) irányíthatók:

DISPLAY/LIST MEMORY [LIKE <maszk>]

TO PRINTER/ FILE <állomány>


20 Konstansok definiálása

Ha egy értéket többször akarunk alkalmazni a programban, akkor a program elején azt, mint konstanst lehet deklarálni:

#DEFINE <K> <kifejezés>

A kifejezés kiértékelődik és a K nevű konstans megkapja ezt az értéket.

Példa

#DEFINE maxertek 100

21 Vezérlési utasítások (parancsok)

21.1 IF utasítás

IF <feltétel>
<parancsok - 1>
[ELSE
<
parancsok -2>]
ENDIF


Ha a <feltétel> igaz (.T.), akkor a <parancsok-1> kerül végrehajtásra, ha - nem, akkor - a <parancsok-2>. Ha az ELSE rész hiányzik, akkor a .F. esetén a vezérlés az ENDIF utáni parancsra kerül.


21.2 DO CASE utasítás

DO CASE
CASE <
feltétel - 1>
<parancsok - 1>
CASE <feltétel - 2>
<parancsok - 2>
.
[OTHERWISE
<
parancsok-N>]
ENDCASE


21.3 Ciklusok

1.3.1 Előtesztelt ciklikus

DO WHILE <feltétel>
<Parancsok>
LOOP]
[EXIT
ENDDO


A ciklus törzsében EXIT és LOOP parancsokat lehet elhelyezni.
LOOP - a vezérlést a ciklus elejére adja vissza (a DO WHILE parancsra).
EXIT - függetlenül a <feltétel> értékétől a vezérlést átadja az ENDDO utáni parancsra (kilép a ciklusból).


1.3.2 FOR ciklus

FOR <ciklus-paraméter> = N1 TO N3 [STEP N2]
<
parancsok>
[LOOP]
[EXIT
]
ENDFOR (vagy NEXT )

a <ciklus-paraméter> - számláló, amely a ciklus végrehajtását vezérli. A FOR utasítás minden alkalommal a <parancsok> végrehajtása előtt ellenőrzi a <ciklus-paraméter> értékét. Ha a számláló nem lépte át a végértéket, akkor a ciklus törzsét hajtja végre, ha átlépte - akkor kilép a ciklusból. N1, N2, N3 - numerikus kifejezések.
N1- a <ciklus-paraméter> kezdő értéke,
N3- a <ciklus-paraméter> végértéke,
N2- lépésköz, amely pozitív vagy negatív lehet. Alapértelmezése: 1.
A <ciklus-paraméter> a ciklus végrehajtásakor a következő értékeket vesz fel:
N1, N1+N2, N1+2*N2, N1+3*N2, ... , N3.
A <parancsok> a ciklus-paraméternek a felsorolt értékeivel valósul meg.
Bizonyos N1, N2, N3 értékeknél előfordulhat, hogy a számláló pontosan nem kapja meg az N3 értéket. Pl., ha N2>0 és N1+R
N2<N3, de N1+(R+1) N2>N3.
Ha a lépésköz =1, akkor nem szükséges a STEP 1 opciót megadni.


1.3.3 Rekordok ciklikus feldolgozása

SCAN [<hatókör>] [FOR <feltétel-1>] [WHILE <feltétel -2>]
<
parancsok>

[LOOP]

[EXIT

ENDSCAN

A SCAN ciklusban lépésenként szekvenciálisan elérhetjük a tábla rekordjait, úgy hogy nincs szükség a SKIP parancsra.


22 Makro-helyettesítés

&C - makro-helyettesítési függvény.
C - karakter típusú változó (a hossza maximálisan 255 lehet). A parancsban a C tartalma a &C függvény helyén lesz elhelyezve. A program futtatása alatt a &C függvény lehetőséget ad a parancsok paramétereinek megváltoztatására, ami rugalmasabbá teszi a programot.

Példa

C='adatok'
USE &C

Az USE adatok parancsot hoznak létre.


Példa

Db= 'dolgozok'
Tag='Dolgrend'
USE &db INDEX &tag

Makro-helyettesítés más formában is kiírható: a & karakter helyett zárójeleket lehet alkalmazni. Ebben az esetben a makro-helyettesítést gyorsabban hajtja végre.


Példa

USE (db) INDEX (tag)


23 Hibakezelés

A FoxPro eszközöket tartalmaz a hibák elemzésére és kezelésére. A hibák feldolgozására olyan rutinokat lehet előkészíteni, amelyek csak hiba esetén futnak. Ezzel azt lehet elérni, hogy egy hiba miatt a program ne álljon le. A rutin elemzi a hibának az okát, és ha lehet, kiküszöböli a hibát. A FoxPro-ban mindegyik hibához egy kód (sorszám) tartozik, amelynek az értékét az
                        ERROR


függvény segítségével lehet megkapni. Ismertetjük a fontosabb hibakódokat:

1 -az állomány nem létezik.
3 - az állomány meg van nyitva.
4 - az állomány már létezik.
12 - a változót nem lehet megtalálni.
24 - nem numerikus kifejezés
36 - numerikus túlcsordulás.
41 - a kifejezés nem karakter típusú.
46 - nem megengedett érték.
47 - nincs elég memória a meghajtón.
58 - a LOG () függvény argumentuma zéró vagy negatív.
61 - hiba a SQRT () függvény paraméterében.
62 - hiba a ** (^) művelet paraméterében.
108 - az állományt más program használja.
109 - a rekordot más program használja.
110 - az állomány kizárólagos használata tiltott.
111 - nem lehet beírni az írásvédett (read-only) állományba.
125 - a nyomtató nincs kész állapotban.
130 - a rekord nincs zárolva.
291 - hiba az ASIN () függvény paraméterében.
292 - hiba a LOG10 () függvény paraméterében.
293 - hiba az ACOS () függvény paraméterében.
1002 - hiba az I/O műveletben.
1101 - az állományt nem lehet megnyitni.
1104 - hiba az állomány olvasásában.
1105 - hiba az állomány beírásában.
1149 -a puffer megnyitására nincs elegendő memória.
1162 - a Procedure nem található.
1307 - osztás nullával.
1502 - a rekord zárolva van, nem lehet módosítani.
1503 -nem lehet zárolni (locked) az állományt.


A program elején lehet elhelyezni a következő parancsot

ON ERROR [<parancs>

és a megnevezett <parancs> akkor lesz végrehajtva, ha a program futtatása alatt egy hiba keletkezet. Leggyakrabban a <parancs> egy DO parancsot tartalmaz.

A hiba feldolgozása a rutinban nem csak a RETURN paranccsal fejeződhet be. Lehet a

RETRY

parancsot is alkalmazni. A RETRY a vezérlést ugyanarra a parancsra adja át, amely a rutinhoz fordult. A RETRY lehetőséget ad a műveletek ismétlésére, amíg a hibát nem küszöböljük ki.


Példa

SET TALK OFF
ON ERROR DO hibak && hiba esetén végrehajtódik a hibak eljárás.
USE nincs


PROCEDURE hibak
hiba=ERROR()
?CHR(7) && hangjelzés
* mindegyik CASE elágazás egy-egy hibát fog feldolgozni
DO CASE
CASE hiba=1
? "hiányzik a dbf állomány"
* itt lehet létrehozni
CASE hiba=9
      * nem dbf az állomány
ENDCASE
RETURN

24 Táblaműveletek


24.1 Az aktív tábla adatainak másolása

Az aktív táblát egy másik táblába (f1) lehet másolni.

Ezt a műveletet a
COPY TO <
f1> [<hatókör>] [FIELDS <mezőlista>] [FOR <feltétel1>]

[WHILE <feltétel2>] [TYPE <állomány típusa>] [WITH CDX]

parancs hajtja végre.

Az f1 állomány kiterjesztésének alapértelmezése: .TXT.

FIELDS <mezőlista> - ha a mezőlista nincs megadva, akkor át lesz másolva az összes mező.

A FIELDS paraméter azokat a mezőket választja ki, amelyeket akarunk átmásolni.

A <hatókör> alapértelmezése ALL,
WITH CDX
- ha létezik strukturált indexállomány, akkor azt is átmásolja.
Ha a TYPE paraméter nincs megadva, akkor a létrehozott állomány kiterjesztése - dbf. A COPY TO parancsban az <f1> állománynak olyan kiterjesztést lehet adni, amely más alkalmazásoknak is megfelel.
Az <állomány típusa> lehet:
SDF (System Data Format) - az állomány ASCII formátumú, a rekordjai fix hosszúságúak, amelyeket CR és LF (kocsi vissza - soremelés) karakterek zárják. A mezők fix hosszúságúak, határoló jel nélkül. Az állomány kiterjesztésének alapértelmezése: TXT.
DELIMITED [WITH <c> / WITH BLANK/ WITH TAB] - az állomány ASCII formátumú, rekordjai változó hosszúságúak, amelyeket a CR és LF (kocsi vissza - soremelés) karakterek zárnak. A mezők változó hosszúságúak, és határoló jellel vannak elkülönítve.
A határoló jel kiválasztása:

  • DELIMITED - vessző (alapértelmezés)
  • DELIMITED WITH BLANK - szóköz
  • DELIMITED WITH TAB - tabulátorjel
  • DELIMITED WITH <c> - с karakter.

Példa

USE adatok
COPY NEXT 3 TO temp TYPE DELIMITED && létrehoz egy szöveges
fájlt a mezők vesszővel elválasztva
MODIFY FILE temp.txt
DELETE FILE temp.txt


4.2 Rekordok hozzáfűzése a táblához

Az aktív állomány végére rekordokat lehet fűzni egy .DBF vagy .TXT kiterjesztésű állományból:
APPEND FROM <f> [FIELDS <mezőlista>] [FOR <feltétel1>]

[WHILE <feltétel2>] [TYPE <állomány típusa>]

Ha a TYPE paraméter nincs megadva, akkor az <f> állomány kiterjesztése - DBF. Az <f> állományból csak azok a mezők lesznek átmásolva, amelyeknek a neve megegyezik az aktív állomány mezőinek nevével.
FIELDS <mezőlista> - <f> állományból csak az adott mezők másolódnak át.
Az APPEND FROM parancs akkor is alkalmazható, ha az <f> állomány más alkalmazásokban jött létre. Ebben az esetben a TYPE paramétert kell alkalmazni (mint a COPY TO parancsban).

Például, új rekordok szöveges állományokból jöhetnek létre. Az APPEND FROM parancs kényelmes eszköz lehet az adatok konvertálására az ASCII- állományokból a DBF állományokba. Például, az

APPEND FROM <f.TXT> DELIMETED WITH BLANK

parancs a f.TXT állományból szöveges rekordokat visz át az aktív állományba. A szöveges állományban tárolt mezők közt szóköz van elhelyezve.


Példa

SET SAFE OFF
USE
bikini
COPY STRUCTURE TO
backup

APPEND FROM bikini FOR album=5

COPY TO temp TYPE DELIMITED      

MODIFY FILE temp.txt

USE   

DELETE FILE backup.dbf
DELETE FILE
temp.txt


4.3 Táblák egyesítése

Az aktív állományt egyesíteni lehet egy másik állománnyal. Ezt a műveletet a

JOIN WITH <munkaterület> TO <f1> [FIELDS <mezőlista>] FOR<feltétel>]

parancs hajtja végre.
Az új állomány neve - f1 és a mezőit a FIELDS <mezőlista> adja.

WITH <munkaterület> - a nem aktív állomány munkaterülete.


Példa

USE dolgozo IN a
SELECT
b
USE
brig
JOIN WITH
a TO kader2 FOR num= dolgozo.num FIELDS a.nev, num, ora


4.4 Aktív tábla módosítása egy másik tábla alapján

UPDATE ON <kulcs-mező> FROM <munkaterület> REPLACE <mező1>

WITH <kifejezés1>, <mező2> WITH <kifejezés2>, . [RANDOM]

Az UPDATE parancs lehetőséget ad az aktív adatbázis állomány mezőinek módosítására egy másik állomány alapján (amelynek a munkaterületét kell megadni). Az aktív és a módosító állományok rekordjai között 'egy-egy' vagy 'egy-több' reláció lehet. Az aktív állománynak csak azok a rekordjai lesznek módosítva, amelyeknek a kulcsmező értéke egyenlő a másik állomány kulcsmező értékével. Az aktív állomány mezői a WITH paraméterben megadott kifejezések értékeit kapják. A kifejezések a másik állomány adatait tartalmazhatják. A parancs végrehajtása előtt az állományokat a <kulcs-mező> szerint ajánlatos rendezni (indexelni). Ha az aktív állomány nincs rendezve, akkor a RANDOM paramétert kell megadni.


Példa

Minden tranzakció (banki művelet) a BankNap.DBF állományban tárolódik. A bevételek a Be nevű mezőben, a kiadások a Ki nevű mezőben vannak elhelyezve. Ezek az adatok alapján a Bank.DBF állomány mindegyik nev mezőre nézve változik a megfelelő Osszeg mező értéke:


USE BankNap
INDEX ON
nev TO banknev
SELECT
b
USE
Bank
UPDATE ON
nev FROM a REPLACE Osszeg WITH Osszeg+ ;

BankNap.Be - BankNap.Ki


25 Rekordok (feltételes) számlálása

COUNT [<hatókör>] [FOR <feltétel1>] [WHILE <feltétel2>] [TO <változó>]

parancs megállapítja az aktív állomány azok rekordjainak számát, amelyek megfelelnek a feltételnek.
A <hatókör> alapértelmezése - ALL,
FOR <feltétel1> - amelyet a parancs mindegyik rekordban ellenőriz,
WHILE <feltétel2> - a számlálás addig folytatódik, amíg a feltétel igaz,
TO <változó> - az eredmény (a rekordok száma) a <változóba> kerül.

Példa

USE emberek
COUNT ALL FOR irszam=3300 TO egriek

WAIT WINDOW 'Egri előfizetők: '+ LTRIM(STR(egriek))


26 Összegezések és átlag számítása

SUM [<kifejezés-lista>] [<hatókör>] [FOR <feltétel1>] [WHILE <feltétel2>]

[TO <változólista> / TO ARRAY <tömb>]


<kifejezés-lista> - az aktív adatbázis-állomány numerikus típusú mezői vagy kifejezések, amelyeknek az összegét a parancs kiszámítja. Ha nincs megadva a <kifejezés-lista>, akkor az aktív állomány összes numerikus mezői részt vesznek a műveletben. Csak azok rekordok vesznek részt a műveletben, amelyek megfelelnek a FOR <feltétel1>-nek. Az összegezés addig tart, amíg a WHILE <feltétel2> igaz. A <hatókör> alapértelmezése - ALL. Az eredmény a <változólistába> vagy a <tömbbe> lesz elhelyezve. Ha a tömb még nem létezett, akkor a parancs létrehozza. Ha a tömb mérete eltér a szükséges mérettől, akkor a tömb megkapja a szükséges méretet.

AVERAGE [<kifejezés-lista>] [<hatókör>] [FOR <feltétel1>] [WHILE <feltétel2>] [TO <változólista> / TO ARRAY <tömb>]

Az AVEGAGE parancs paraméterei megegyeznek a SUM parancs paramétereivel. Az eredmény - a kifejezések átlaga.


Példa

USE varos
COUNT FOR neme='F' TO x
SUM Gyerek TO gyerekek
AVERAGE Gyerek FOR neme='N' TO y

7 Mezők összegezése egy kulcs értéke szerint

TOTAL ON <kifejezés> [<hatókör>] [FOR <feltétel1>] [WHILE <feltétel2>] FIELDS <mezőlista>] [TO <új állomány>]

Az aktív állomány a <kifejezés> szerint van indexelve. A TOTAL parancs úgy számítja ki a numerikus mezők összegeit, hogy az összegezésekben csak azok a rekordok vesznek részt, amelyekben a <kifejezés> értékei azonosak. Az <új állományba> a <kifejezés> mindegyik lehetséges értékének a megfelelő összege kerül.


Példa

USE Kader
INDEX ON Osztag TO Oszt
TOTAL ON Osztag TO SumFiz FIELDS Fizetes
* A SumFiz.DBF állomány osztagonként tartalmazza a fizetéseknek az *összegét.



28 Műveletek a memo- és general-mezőkkel

A FoxPro olyan parancsokat is tartalmaz, amelyek a műveleteket kizárólag a memo-mezőkkel hajtják végre.

APPEND MEMO <mеmo-mező> FROM <f> [OVERWRITE]

Az <f> állományból az adatok átmásolódnak a <memo-mezőbe>. Az OVERWRITE paraméter törli a memo-mező előző értékét.


Példa

SET SAFETY OFF
USE
dolgozok
GO 1
COPY MEMO memmezo TO test.txt                       

MODIFY FILE test.txt          
APPEND MEMO memmezo FROM test.txt OVERWRITE

CLOSE ALL
COPY MEMO <
mеmo-mező> TO <f> [ADDITIVE]


A parancs a memo-mező tartalmát a f.txt állományba másolja át. Az ADDITIVE paraméter esetén a másolás a létező állomány végén történik. Ha az ADDITIVE paraméter nincs megadva, akkor a <f> állomány felülíródik.


MODIFY MEMO
m1 [, m2,] [NOEDIT] [NOWAIT] [RANGE n1, n2]

[SAVE] [WINDOW w]


APPEND GENERAL <general mező> FROM <állomány>


parancs az állomány tartalmát a generál típusú mezőbe helyezi el. Ha a general-mező már tartalmaz OLE-objektumot, akkor a régi tartalom megsemmisül. Az állomány teljes nevét kötelező megadni.


Példa

APPEND GENERAL tabla FROM "C:\EXCEL\CHART1.XLS" CLASS EXCELCHART

A TABLA nevű general-mezőbe egy EXCEL tábla lesz importálva.



29 FoxPro függvények


29.1 Matematikai függvények


Függvény

Művelet (eredmény)

N1=ABS( N

N abszolút értéke

L=BETWEEN(V, Vmin, Vmax)

L= .T., ha Vmin <=V <=Vmax

N1=CEILING(N)

A legközelebbi egész szám, N1>=N

N1=FLOOR(N)

A legközelebbi egész szám, N1<=N

N1=INT(N)

N egész része

V=MAX(V1, V2,...)

Maximum

V=MIN(V1, V2,...)

Minimum

N=MOD(N1, N2)

N1/N2 egész osztás maradéka

N=ROUND(N1, N2)

N1 kerekítése N2 tizedes számjegyig.

N1=RAND

valós típusú véletlen szám előállítása, 0<=N1<1

N1=RAND(N)

egész típusú véletlen szám előállítása, 0<=N1<N

N1=SIGN(N)

Előjelfüggvény (sign): N1=1, ha N>0, N1=0, ha N=0, N1= ha N<0

N1=EXP(N)

e alapú exponenciális függvény

N1=LOG(N)

Természetes alapú logaritmus

N1=LOG10(N)

Tízes alapú logaritmus

N1=SQRT(N)

Négyzetgyökvonás

N1=SIN(N)

Szinusz (N radián

N1=COS(N)

Cosinus (N radián

N1=TAN(N)

ngens ( N radián

N1=ASIN(N)

rcus sinus

N1=ATAN(N)

rcus tangens

N1=ATN2(N1, N2)

rcus tangens ( N1/N2

N=PI()

p

N1=DTOR(N)

Fokokban adott szögérték radiánba konvertálása

N1=RTOD(N)

Radiánban adott érték szögre konvertálása


29.2 Karakteres függvények


L=C1 $ C2

L= T ha C tartalmazza a C1-et

N1=AT(C1,C2,[N])

C1 karaktersorozat helyének keresése a C2 karaktersorozatban. Ha N adott, akkor az N-dik előfordulását keresi. Alapértelmezés: 1. Visszaadott érték: a C2 a C1-ben hányadik pozícióban kezdődik, vagy - 0, ha nem fordul elő.

N1=ATC(C1,C2,[N])

Az AT függvényhez hasonlóan működik, de nagy- és kisbetűk között nem tesz különbséget

N1=RAT(C1,C2,[N])

Az AT függvényhez hasonlóan működik, de a C2-ben jobboldalról kezdi a C1 keresését

L=INLIST(V,V1,V2,...)

A V=V1 OR V=V2 OR műveletet végzi.

Megjegyzés: A ! INLIST(V,V1,V2,.) - a V#V1 AND V#V2 AND .. műveletet hajtja végre.

N=LEN(C)

C hossza

L=LIKE(C1,C2)

1-maszk szerint keres a 2-ben A C1 és helyettesítő karaktereket is tartalmazhat. Ha C2 a C1 maszkot tartalmazza, akkor L=.T., másként- L=.F.. Kis és nagy betűket nem különbőzteti meg.

N=OCCURS(C1,C2)

1 előfordulása száma a -ben.

C1=LEFT(C,N)

bal oldali részéből N karaktert választ ki

C1=RIGTH(C,N)

jobb oldali részéből N karaktert választ ki

C1=SUBSTR(C,N1,[N2])

C karaktersorozatból N1-dik karaktertől kezdve N2 karaktert másol át a C1-be. Ha N2 nincs megadva, akkor a másolás a C utolsó karakteréig történik.

C1=LTRIM(C)

A bal oldali szóközök törlése

C1=RTRIM/TRIM(C)

A jobb oldali szóközök törlése

C1=ALLTRIM(C)

A bal és jobb oldali szóközök törlése

C1=REPLICATE(C,N)

C karaktersorozat ismétlése N-szer

C=SPACE(N)

C feltöltése N szóközzel

C=STUFF(C1,N1N2,C2)

C1 karaktersorozatban karakterek törlése vagy beszúrása. N1- kezdőpozíció, N2 - karaktert kell törölni (ha N2=0, akkor csak beszúrást végez), C2 - a beszúrandó karaktersorozat.

C=PADR(C1,N,[C2])

Az eredmény hossza N, C tartalmazza a C1-et és jobb oldaláról C2 karakterekkel lesz kiegészítve

C=PADL(C1,N,[C2])

Az eredmény hossza N, C tartalmazza a C1-et és bal oldaláról C2 karakterekkel lesz kiegészítve.

C=PADC(C1,N,[C2])

Az eredmény hossza N, C a C1-et középen tartalmazza, jobb és bal oldalról kiegészíti C2 karakterekkel.

N=ATLINE(C1,M)

M-ben C1-et keres. Annak a sornak a sorszámát adja vissza, amelyik tartalmazza a C1-et. Ha nem talált, akkor N=0.

N=ATCLINE(C1,M)

Hasonlít az ATLINE-hoz nem különbözteti meg a nagy- és kisbetűket

N=RATLINE(C1,M)

Keresi a utolsó előfordulását az -ben és annak a sornak a sorszámát adja vissza, amely a C1-et tartalmazza. Ha nem talált, akkor N=0.

C=MLINE(M,N)

Visszaadja a memo-mező N-edik sorának a tartalmát

L=ISALPHA(C)

Ha a első karaktere betű, akkor L= T másként L=.F.

L=ISLOWER(C)

Ha első karaktere kis betű, akkor L= T másként L=.F.

L=ISUPPER(C)

Ha nagybetűvel kezdődik, akkor L= T másként L=.F.

C1=LOWER(C)

C sorozat betűit kisbetűkre konvertálja

C1=PROPER(C)

C sorozatból nagy kezdőbetűs szavakat alakít (a szó nagybetűvel kezdődik, a többi betű - kicsi).

C1=UPPER(C)

C karaktersorozat nagybetűre konvertálása


29.3 Dátum és idő függvények


D=CTOD(C)

Karakteres dátumformát dátumtípusra konvertálja

D=(C)

Lásd - CTOD függvényt C csak konstans lehet

D=DATE()

A rendszerdátum lekérdezése

N=DAY(D)

A dátumból a nap értékét adja vissza (1.. 31).

N=DOW(D)

D dátum héten belüli nap sorszáma (1.. 7),        (vasárnap-1)

C=DTOC(D)

Dátum konvertálása karakterré

C=DTOS(D)

A dátum karakterekbe konvertálása az ééééhhnn formátumban (év, hónap, nap)

D=GOMONTH(D,N)

A dátumhoz N hónapot ad hozzá

C=CMONTH (D)

A hónap szöveges kiírása angolul

N=MONTH(D)

A dátumból a hónap sorszám

N=YEAR(D)

Dátumból az év értékét adja vissza (numerikus formátumban)


29.4 Típuskonverziós függvények


N=ASC(C)

A C karakter ASCII kódja

C=CHR(N)

Az ASCII kódnak megfelelő karakter

C=STR(N1,[N2],[N3])

N1 numerikus kifejezést karakterré alakítja. N2- az eredmény hossza, N3- a tizedes számjegyek száma

N=VAL(C)

Karakter formátumú számot numerikus típusra konvertál.



29.5 Műveletek a táblákkal


L=BOF([mt

ha a rekordmutató kilép a táblából az első rekordon keresztül, akkor L=.T. másként, L=.F.

C=DBF([mt])

A tábla teljes neve

N=DISKCPACE()

A lemezen lévő szabad memória mérete (byte-ban )

L=DELETED([mt

Az aktuális rekord logikai törlésének állapota. Ha a rekord törlésre van jelölve, akkor L=.T.

L=EOF([mt])

Ha a rekordmutató kilép a táblából az utolsó rekordon keresztül, akkor L=.T. másként, L=.F.

L=FILE(F)

Ha az F tábla létezik, akkor L=.T.

C=FIELD(N,[mt

N sorszámú mező neve

L=FOUND([mt])

L=True, ha a keresési parancs (LOCATE, CONTINUE, SEEK) rekordot talált

N=FCOUNT([mt

A tábla mezőinek száma

C=FILTER([mt])

Szűrő-kifejezés tartalma

Mező1=LOOKUP (mező1, V,

mező

A mező2-ben a V kifejezés első előfordulását keresi Ha a keresés sikeres volt, akkor a mező1 értékét adja vissza.

D=LUPDATE([mt

A tábla utolsó módosításának időpontja

C=ORDER([mt])

A főindex neve

N=RECNO([mt])

Az aktív rekord sorszáma

N=RECCOUNT mt

A tábla rekordjainak száma

N=RECSIZE([mt])

A rekord hossza (byte)

L=SEEK(V,[mt])

Ellenőrzi a keresés eredményességét. V - a kulcs értéke. Ha a keresés sikeresen ért véget, akkor L=.T.



Találat: 1512


Felhasználási feltételek