kategória | ||||||||||
|
||||||||||
|
||
FoxPro alapok
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.).
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:
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
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.
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:
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
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.
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:
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.
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.
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:
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:
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ő
ERASE <állománynév>
A tábla összes rekordját a
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
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.
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
A multiindexes állományba tartozó táblát tegnek (TAG) nevezik. Minden tegnek van neve.
A multiindexes indexállomány
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
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
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.
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.
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.
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.
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.
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
paranccsal (paraméterek nélkül) lehet megszüntetni.
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.
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.
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.
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.
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
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.
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.
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
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>.
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.
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
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.
DO CASE
CASE
<feltétel -
1>
<parancsok - 1>
CASE <feltétel - 2>
<parancsok - 2>
.
[OTHERWISE
<parancsok-N>]
ENDCASE
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).
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:
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
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
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
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
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.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: 1609