1. Alapvető fogalmak Műveletek Numerikus műveletek (a prioritás sorrendjében) ** (vagy ^ ) (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
1
Karakteres műveletek + kifejezések konkatenálása (összefűzése) − kifejezések olyan konkatenálása, amely az első kifejezés végén levő szóközöket a második kifejezés végére helyezi el X$Y – a $ művelet eredménye True (.T.), ha X 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) Relációs műveletek Relációs műveletek numerikus-, karakter- é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). Karakter kifejezések összehasonlítása a második (jobb oldali) kifejezés hossza szerint történik. 2
1. Példa 'abc' = 'a' - True, 'a'='abc' - False. 2. Parancsok felépítése Egy tipikus parancsnak, amely a műveletet az adatbázissal hatja végre, a következő struktúrája van: Parancs-név [
] [] [FOR ] [WHILE ] A azoknak a rekordoknak a halmazát adja meg, amely részt vesz a műveletben. A paraméternek a következő értékei lehetnek: ALL / REST / NEXT N / RECORD N ( / jel azt jelenti, hogy a felsorolt paraméterek (opciók) közül csak egy választható ki). ALL – az összes rekord 3
REST – az aktuális rekordtól az utolsóig NEXT N – a következő N rekord RECORD N – az N sorszámú rekord Ha a a parancsban nincs megadva, akkor a parancs a alapértelmezését fogja alkalmazni. FOR – csak azok a rekordok vesznek részt a műveletben, amelyek megfelelnek a feltételnek, WHILE – a művelet addig folytatódik, amíg a feltétel igaz (a WHILE feltételt csak rendezett adatbázison van értelme alkalmazni). A FoxPro-ban a SET parancsokkal különböző beállításokat lehet végrehajtani: SET <paraméter> TO <paraméter értéke>; vagy SET <paraméter> OFF/ON
4
ON – a <paramétert> bekapcsolja, OFF – pedig kikapcsolja. A karakter konstansokat különbözőképpen jelölhetjük: ˝ ˝, ´ ´, [ ]. A dátum konstansok formátuma: {10. 02. 99}. Az üres dátumot így jelöljük: {}. Logikai konstansok jelölése: .t. (.T.), .f. (.F.) . QUIT parancs a FoxPro működését fejezi be és visszaadja a vezérlést az operációs rendszernek.
5
3. Adatbázis állományok létrehozása, megnyitása és bezárása Állomány struktúrájának létrehozása CREATE [] A mezők lehetséges típusai: Character (C) – karakter típusú, maximális hossza – 254 karakter (byte), Numeric (N) – numerikus típusú, maximális hossza 20, alapértéke – 8, Float (F) – lebegőpontos numerikus mező, maximális hossza 20, alapértéke – 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 egy FPT kiterjesztésű állományban vannak elhelyezve. Ezt az állományt a CREATE parancs automatikusan hozza létre. A DBF állományban 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) –ez az általános típus csak a FoxPro Windows változatában 6
alkalmazható. 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. Az adatbázis állomány struktúráját a MODIFY STRUCTURE parancs segítségével meg lehet változtatni. Állomány megnyitása és bezárása. USE f parancs megnyitja a f.dbf nevű állományt. Ha az f állomány memo-mezőket is tartalmaz, akkor az f.fpt állomány is automatikusan nyílik meg. A USE parancs paraméterek nélkül bezárja az aktív állományt. Munkaterület A munkaterületek száma 225. Ha egyidejűleg több állományt szükséges megnyitni, akkor a munkaterületet a SELECT paranccsal kell kiválasztani és utána az USE paranccsal az állományt megnyitni. A munkaterületeket számokkal 7
szokták megnevezni: 1, 2, 3,…,10 (vagy A, B, C,…,J) és W11, W12,…. A munkaterület kiválasztása: SELECT <munkaterület> parancs segítségével történik. 2. Példa SELECT 1 USE varos SELECT 2 USE elofizeto Ha azt akarjuk, hogy a varos állomány legyen aktív, akkor a SELECT 1 vagy SELECT varos paranccsal az első munkaterületre kell átkapcsolni. Egy állományt a következő szabad munkaterületen a USE f IN 0 8
parancs segítségével lehet megnyitni. Összetett név: varos.telepnev, elofizeto->telszam.
varos->telepnev,
elofizeto.telszam,
Állományok bezárása CLOSE DATABASE CLOSE ALL 4. Állományok feltöltése adatokkal APPEND [BLANK] parancs az új rekordot az állomány végére helyezi. A memo-mezőkhöz a Ctrl+Home billentyűkkel lehet hozzáférni, vagy a mezőre az egérrel kétszer kell rákattintani. A memo-mezőből a Ctrl+W (Ctrl+End) vagy az Esc billentyűkkel lehet kilépni. Az Esc billentyű alkalmazása esetén a mezőbe új érték nem kerül be. INSERT [BEFORE] [BLANK], 9
A dátum formátumát a SET DATE paranccsal lehet megváltoztatni. A paraméter lehetséges értékei: (hh/nn/éé) AMERICAN ANSI (éé.hh.nn) BRITISH (nn/hh/éé) FRENCH (nn/hh/éé) GERMAN (nn.hh.éé) ITALIAN (nn-hh-éé) SET CENTURY OFF/ON ON - a dátum év négy számjegyű lesz, OFF – csak az év két utolsó számjegye lesz látható. A SET BELL ON/OFF parancs a hangjelzést be- vagy kikapcsolja. 10
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 nem tartalmaz paramétereket (vagy nem hajtottuk végre), akkor az aktuális könyvtár az lesz, ahonnan a FoxPro-t elindítottunk. 3. Példa SET DEFAULT TO A:\programok\foxprow SET DEFAULT TO C:\munka SET DEFAULT TO \ SET DEFAULT TO. Ha az állományokat több könyvtárban tároljuk, akkor a SET PATH TO [<útvonal-lista>] parancs az állományok keresési útvonalát határozza meg. 11
5. Rekordok módosítása A BROWSE, EDIT ( CHANGE ) Ha az adatok bevitelénél a mezők értékei rekordonként ismétlődnek, akkor célszerű a SET CARRY ON paranccsal beállítani az adatok automatikus másolását az előző rekordból. A parancs alapértelmezése - OFF (a másolás kikapcsolt állapotban van). SET CARRY TO <mezőlista> BROWSE –ablak A BROWSE parancs struktúrája: BROWSE [FIELDS <mezőlista>] [FOR ] [FREEZE <mező-1>] [KEY [,]] [LAST] [LEDIT/REDIT] [LOCK N1] [NOAPPEND] [NOCLEAR] [NODELETE] [NOEDIT/NOMODIFY] [NOLGRID/NORGRID] [NOLINK] [NOMENU] [NOWAIT] [REST] [TIMEOUT N2] [TITLE С] 12
[WHEN ] [WINDOW ] [VALID [F:] [ERROR С2]] [COLOR SCHEME N3/ COLOR …] [FONT C4[,N4]] [STYLE C5] 4. Példa BROWSE FOR z> 200 AND z <=300 5. Példa USE vevo BROWSE FIELD lakhely = ALLTRIM(megye) + ', ' + ; ALLTRIM(varos) && lakhely - szerkesztett mező CHANGE – ablak A CHANGE vagy EDIT parancsokat a CHANGE-ablakban hajtjuk végre. A parancs paraméterei és opciói azonosak a BROWSE-parancs paramétereivel és opcióival. 6. Mezők módosítása a REPLACE paranccsal 13
REPLACE [] <mezőnév> WITH , <mezőnév> WITH , …., [FOR ] [WHILE ] [ADDITIVE] A BLANK parancs által a megnevezett (vagy az alapértelmezés szerint az összes) mezőt lehet törölni. BLANK [] [FIELDS <mezőlista>] [FOR ] [WHILE ]. A BLANK parancs paraméterek nélkül törli az összes adatot az állományból, de a rekordok nem semmisülnek meg, csak üres mezőket tartalmaznak. 7. Műveletek a rekordmutatókkal GO TOP/ BOTTOM/ N [IN <munkaterület>] (vagy GOTO) SKIP [N] [IN <munkaterület>] Az állomány rekordjainak számát a 14
RECCOUNT ([<munkaterület>]) függvény állapítja meg. EOF ([<munkaterület>]) , BOF ([<munkaterület >]) 8. Adatbázis tartalmának megjelenítése DISPLAY [] [FIELDS <mezőlista>] [FOR ] [WHILE ] [OFF] [TO PRINTER / TO FILE <állománynév>] A memo - mező megjelenítésének szélességét a képernyőn SET MEMOWIDTH N parancs állíthatja be. N lehetséges értékei: 8 … 256. Az alapértelmezés - 50. LIST [] [FIELDS <mezőlista>] [FOR ] [WHILE ] [OFF] [TO PRINTER / TO FILE <állománynév>] Példa 15
USE elofizeto LIST FOR irszam=3300 TO FILE egriek Az elofizeto.dbf állományból az egriek.txt állományba kerülnek az egri előfizető adatai. Példa GO 2 SET MEMOWIDTH 30 DISDPLAY nev, valtoz OFF && a valtoz memo-mező Egy állományt a lemezről csak akkor lehet törölni, ha az nincs megnyitva. ERASE <állománynév> ZAP A rekordokat logikailag és fizikailag lehet törölni. A logikai törlésnél a rekord megmarad az állományban, de meg lesz jelölve a későbbi fizikai törlésre. A logikai törlést a DELETE [] [FOR ] [WHILE ] 16
parancs hajtja végre. SET DELETED ON/OFF ON – a logikailag törölt rekordokat a parancs figyelmen kívül hagyja (elrejti azokat), OFF – a logikailag törölt rekordok megjelennek a képernyőn. Ezek a rekordok a * (csillag) karakterrel vannak megjelölve. Az aktuális rekord állapotát a DELETED( ) függvény állapíthatja meg. Ha a rekord törlésre van kijelölve, akkor a függvény .T. értéket ad vissza, másként - .F.-et. A logikai törlésről a RECALL [] [FOR feltétel-1] [WHILE feltétel-2] parancs segítségével lehet lemondani. A alapértelmezése – az aktuális rekord. A logikailag törölt rekordokat a 17
PACK [MEMO] [DBF] paranccsal fizikailag lehet törölni. A fizikailag törölt rekordokat már nem lehet visszaállítani. 9. Rekordok szűrése SET FILTER TO SET FILTER TO A szűrő tartalmát (feltételét) a megadott munkaterületben a FILTER ([<munkaterület>]) függvénnyel lekérdezhetjük. Állományok rendezése, adatok keresése Indexelés 1) IDX kiterjesztésű önálló (egyszerű) indexállományt, amely csak egy indextáblát tartalmaz. 18
2) CDX (compound index) kiterjesztésű multiindexes állományt, amely több indextáblát tartalmazhat. A multiindexes állományba tartozó táblát tegnek (TAG) nevezik. Minden tegnek neve van. A multiindexes indexállomány strukturált vagy nem strukturált típusú lehet. A strukturált CDX állomány neve megegyezik az adatbázis állomány nevével és mindig a DBF állománnyal együtt nyílik meg automatikusan. (Pl., ha az adatbázis állomány 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ösebb, 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. DBF állomány létrehozása az INDEX parancs által történik. INDEX ON TO / TAG [OF ] [FOR ] [COMPACT] [ASCENDING/DESCENDING] [UNIQUE] [ADDITIVE] 19
- kifejezés, amely szerint a DBF állományt kell rendezni. A kifejezés maximális hossza 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 több mező is részt vehet a kulcs-kifejezésben; - az egyszerű indexállomány neve; - tegnek a neve; - a nem strukturált indexállomány neve; - az indexelésben csak azok a rekordok vesznek részt, amelyekre igaz a ( 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 a már eddig megnyitott indexállományokat nem zárja be. Alapértelmezésben – bezárja. 20
Példa INDEX ON pol+fio TO p COMPACT INDEX ON -irszám TAG OF irrend INDEX ON nem+nev TAG nem OF pf Indexállományok megnyitása és bezárása Az USE parancs a már létező indexállományokat megnyitja az adatbázis állománnyal egyidejűleg: USE [IN <munkaterület>] [ALIAS [AGAIN] [NOUPDATE] [INDEX ] [ORDER [N / / [TAG [OF ]]]] [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 adatbázis állomány 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 21
lehet megnyitni. Egy indexállomány csak egy munkaterületen nyitható meg; NOUPDATE – az adatbázis nem módosítható; - 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 – a fő index az INX- állomány neve által van kiválasztva; ORDER TAG [OF ] – 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 az adatbázis állomány 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: 22
SET INDEX TO [] [ORDER N/ <.IDX állomány>/ [TAG] [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. 23
Példa USE varos INDEX ON irszam TO irrend Példa USE varos INDEX ON SUBSTR (telepnev, 1, 5) + STR (irszam, 4) TO rend Példa USE ber INDEX ON ber FOR ber > 150000 TO nagyber Példa USE emberek INDEX ON cim TAG cím INDEX ON valalat TAG valalat OF valrend.cdx
24
Műveletek az indexekkel A fő index a SET ORDER TO N// [TAG] [OF ] [IN <munkaterület>] [ASCENDING/ DESCENDING] parancs által megváltoztató. A parancs paraméterei megegyeznek a SET INDEX TO parancs paramétereivel. SET ORDER TO [0] – kikapcsolja a fő indexet. A további parancsok az adatbázis állomány rekordjaihoz a fizikai sorrendben férhetnek hozzá. A megnyitott indexállományok továbbra is az adatbázis állomány 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. 25
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 /ALL [TO ] Ha a nincs megadva, akkor az IDX- állomány a strukturált indexállományba kerül. A COPY TAG [OF ] TO 26
parancs egy tegből egy IDX- állományt hoz létre. Az indexállományok törlését a DELETE TAG [OF ] DELETE TAG ALL [OF ] parancsokkal lehet végrehajtani.
vagy
Adatbázis rendezése SORT TO [ASCENDING/ DESCENDING] ON <mező1> [/A] [/D] [/C] [,<mező2> [/A] [/D] [/C]…] [] [FIELDS <mezőlista>] [FOR ] [WHILE ] állomány a rendezett rekordokat fogja tartalmazni. A parancs az aktív állományt 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. 27
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 állományba csak a megadott mezők kerülnek (alapértelmezés – az összes mező), FOR - csak azok a rekordok kerülnek a állományba, amelyek megfelelnek a feltételnek, WHILE - a rendezés csak addig folytatódik, ameddig a feltétel igaz.
28
Adatok keresése Szekvenciális keresés Szekvenciális keresésre a következő két parancsot lehet alkalmazni – LOCATE és CONTINUE. LOCATE [] [FOR ] [WHILE ] A LOCATE parancs az adatbázis állományban olyan (első) rekordot keres, amely megfelel a FOR- feltételnek. Ha a és a WHILE- feltétel hiányzik, akkor a keresés az első rekordtól kezdődik. A parancs a rekordmutatónak új értéket ad. 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 egy rekordot, amely megfelel az adott feltételnek, akkor a keresést tovább lehet folytatni (a LOCATE parancsban megadott FORfeltétellel) a CONTINUE 29
parancs segítségével. Ez a parancs paramétert nem tartalmaz. A LOCATE és CONTINUE parancsok eredményeinek értékelése a RECNO( ), EOF( ) és FOUND( ) függvényekkel történhet. FOUND( ) függvény logikai értéket ad vissza: .T. – ha a keresés sikeres volt, .F. – ha nem. 19. Példa SET TALK OFF USE elofizeto STORE 0 TO van LOCATE FOR irszam=3300 DO WHILE FOUND( ) van=van+1 CONTINUE ENDDO ? ' Egri előfizetők száma : '+ LTRIM(STR(van)) USE 30
Hasznos lehet a következő függvény is: LOOKUP (<mező-1>, , <mező-2>) LOOKUP keresi az első rekordot, amelyben a <mező-2> a -t tartalmazza. Ha a keresés sikeres volt, akkor a függvény a <mező-1> értéket adja vissza, ha nem, akkor üres karaktersort. Példa ? LOOKUP (kod, ‘S’, nev), nev a képernyőre kiírja az azonosító számot és egy nevet, amely ‘S’ betűvel kezdődik.
31
Adatok keresése indexelt állományokban SEEK parancs azt az első rekordot keresi, amelyben az index értéke egyenlő (vagy egyes 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 keresési eljárással történik és utána a rekordmutatót az adatbázis-állományban a megfelelő rekordra beállítja. A SEEK parancs csak az első rekordot keresi, amelyben a = feltétel teljesül. Szükség esetén, a keresést lehet folytatni, mivel az állomány rendezett. A SEEK parancs végrehajtása a SET EXACT ON/OFF parancs beállításától függ, amely a karakteres kifejezések összehasonlítását határozza meg. 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 keresés eredménye függhet a SET NEAR ON/OFF 32
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 egyenlő a é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 é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 (ugyanúgy, mint a LOCATE és CONTINUE parancsok után) alkalmazzák a RECNO( ), FOUND( ) és EOF( ) függvényeket. Hasznos lehet a SEEK ( [,<munkaterület>]) függvény alkalmazása is, amely helyettesíti a SEEK parancsot és FOUND () függvényt. A SEEK függvény keresi a é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.
33
Példa
IF SEEK (2) DISPLAY ENDIF
Példa SET EXACT OFF USE elofizeto INDEX ON irszam TO rend SEEK 3300 IF FOUND( ) DISPLAY FIELDS irszam, nev, telepnev ENDIF Az indexállományokat a REINDEX parancs segítségével újból lehet rendezni.
34
Adatbázis állományok összekapcsolása Egy-egy típusú összekapcsolás SET RELATION TO INTO <munkaterület> [, INTO <munkaterület> …] [ADDITIVE] A parancs az aktív adatbázis-állományt egy kulcs által összekapcsolja egy másik állománnyal. Az állományokat, amelyeket hozzákapcsolunk az aktív állományhoz, a kulcs szerint kell indexelni. Ha azt akarjuk, hogy a már létező kapcsolatok megmaradjanak, akkor az ADDITIVE paramétert kell alkalmazni. A két állomány összekapcsolása után az állományok rekordmutatói összhangban fognak változni: az alárendelt állomány mutatója mindig arra a rekordra mutat, amelynek a kulcsértéke azonos az aktív állomány kulcsának az értékével. Ez a parancs azt követeli, hogy az alárendelt állományban a kulcsnak az értékei csak egyszer forduljanak elő. Az állományok közti összekapcsolást a SET RELATION TO 35
paranccsal (paraméter nélkül) lehet megszüntetni. A SET RELATION OFF INTO <munkaterület> megszünteti a kapcsolatot az adott munkaterületen. Egy-több típusú összekapcsolás Az egy-több típusú összekapcsolás esetén az aktív állomány rekordjához az alárendelt állományban több rekord is kapcsolódhat. A FoxPro-ban ezt a SET SKIP TO [<munkaterület-1>, …] paranccsal lehet létrehozni. Egy SET SKIP TO … parancs több 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. 36
Program állományok létrehozása és alkalmazása A programokat a PRG- kiterjesztésű állományokban tároljuk. MODIFY COMMAND [] parancs segítségével lehet létrehozni. A parancs egy szövegszerkesztőt nyit meg, amelyben megszerkeszthetjük a program parancsait. A parancsokat új sorban kell kezdeni. Ha a parancs nem fér el egy sorban, akkor a sor végén ; karaktert kell elhelyezni, és a parancsot a következő sorban lehet 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 futtatásaDO [WITH <paraméterlista>] - a program (eljárás) neve, WITH <paraméterlista> - paraméterek, amelyeket kell átadni a programnak. A WITH paraméter akkor alkalmazható, ha a program a PARAMETERS parancsot tartalmazza. A PARAMETERS 37
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 félbeszakítja a program futtatását és elindítja az eljárást. A program futtatását az Esc billentyű lenyomásával abban az esetben lehet befejezni, ha ezt 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. 38
Ha a megjegyzést a parancs után ugyanabban a sorban akarjuk elhelyezni, akkor a megjegyzés előtt a && karaktereket kell elhelyezni. Egy EXE - állományt ! <EXE – állomány> vagy RUN <EXE – állomány> paranccsal lehet elindítani.
39
Programok szerkezete Nagyobb méretű programokat célszerű részekre bontani, amelyeket a rendszer eljárásokként (PROCEDURE) fog kezelni. Eljárásokat egymástól függetlenül lehet létrehozni és tárolni. Eljárást függvény (FUNCTION) formában 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 a programállomány része, akkor ez belső eljárás. 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 ] p – a programállomány neve, <paraméter-lista> - az eljárásnak átadott paraméterek listája, IN - egy másik állomány neve, amelyben a p eljárás van elhelyezve, 40
A kiterjesztések szempontjából az eljárás keresésének a sorrendje a következő: EXE, APP, FXP, PRG. A WITH parancsban a <paraméter-lista> az aktuális paramétereket tartalmazza, a PARAMETERS parancs pedig a formális paramétereket. Az aktuális paraméterek száma kisebb lehet, mint a formális paraméterek száma. Az eljárás futtatása akkor ér véget, ha a vezérlés eléri a következő parancsot: • 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-parancs szintre), • vagy a QUIT parancsot (kilép a FoxPro rendszerből). A RETURN parancs paramétereket tartalmazhat: RETURN [TO MASTER/ <eljárás> / ] TO MASTER – a vezérlést a főprogramnak adja vissza, <eljárás> - a vezérlést az <eljárásba> adja vissza, - csak függvényekben alkalmazható. A függvény a értékét adja vissza. 41
A RETURN parancs a vezérlést a hívó program DO utáni parancsának adja vissza. RETRY parancs a vezérlést a DO parancsnak adja vissza (amely elindította az eljárást). A RETRY parancsot a hibakezelés esetén célszerű alkalmazni, amikor a hiba feldolgozása után egy eljárást (parancsot) újból meg kell ismételni. Belső eljárás A DO parancs a külső eljárást minden alkalommal újból visszatölti a memóriába. Ezért gyorsabb a belső eljárás alkalmazása. Nagyobb programok esetén külső eljárásokat szoktak alkalmazni. Belső eljárás első parancsa a PROCEDURE p parancs. p – az eljárás neve. Az eljárásokat és függvényeket célszerű egyesíteni és egy közös PRG kiterjesztésű (PROCEDURE) állományban tárolni. Ilyen állományt a SET PROCEDURE TO p 42
paranccsal lehet megnyitni. p – az állomány neve. A p állomány megnyitása után hozzá lehet férni a benne tárolt eljárásához és a függvényekhez. Egyszerre csak egy Procedure-állományt lehet megnyitni. A már megnyitott állományt a SET PROCEDURE TO paranccsal kell bezárni. Függvények Ha rutin eredményként csak egy értéket ad vissza, akkor célszerű függvényt szerkeszteni. A függvény (mint az eljárás is) külső vagy belső lehet. A függvény első parancsa a FUNCTION p parancs. p – 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 43
parancs, amely a értékét adja vissza. 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 visszaadott értéke .T. lesz). A függvényeket a kifejezésekben 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). A másik lehetőség: a függvény aktivizálása a DO paranccsal. Ebben az esetben a RETURN parancs nem tartalmazhat. Példa SET TALK OFF ? negyzet(2) WAIT WINDOWS "Rendben" FUNCTION negyzet 44
PARAMETERS ennek RETURN ennek*ennek && visszatér a szám négyzetével A 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ég ad globális változók alkalmazására, amelyek érvényesek a program összes rutinjában. A globális változókat a PUBLIC / paranccsal lehet deklarálni. Ezeknek a változóknak a kezdőértéke -. F.. A főprogramban deklarált változó globális lesz (minden eljárásból hozzá lehet férni). A parancsban létrehozott és alkalmazott változó alapértelmezésként public tulajdonságú lesz. Lokális változókat is lehet létrehozni (deklarálni): PRIVATE / 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. A változókat csoportosítva is lehet deklarálni (maszkokat alkalmazva): PRIVATE ALL / LIKE <mask> / EXCEPT <mask>. 45
A program ideiglenes leállítása WAIT [] [TO ] [WINDOW] [NOWAIT] [CLEAR] [TIMEOUT <másodperc>] A megjelenik a képernyőn. Ha nincs megadva a , akkor a képernyőn a Press any key to continue … szöveg jelenik meg. A ajánlatos megadni, mivel ezzel bővebb információt lehet közölni a felhasználónak; TO - a felhasználó által bevitt karakter a kerül. Ez a csak egy karaktert képes befogadni. WINDOW – a a rendszerüzenet-ablakba kerül (a képernyő jobb felső sarkában), NOWAIT – az üzenet a billentyű lenyomása nélkül eltűnik a rendszerüzenetablakból, CLEAR - a rendszer-üzenetablak eltávolítása, TIMEOUT <másodperc> - a program <másodpercig> vár a billentyű 46
lenyomására. Ha nincs megadva ez az opció, akkor a várakozási idő végtelen. Ha a képernyő tartalmát nem akarjuk megváltoztatatni, akkor a WAIT ´´ parancsot kell alkalmazni, amely semmit nem ír ki a képernyőre. A WAIT parancsot lekérdezésekre is lehet alkalmazni.
47
Memóriaváltozók Adatok bevitele és értékadás A változóknak a = paranccsal értékeket lehet adni. Ha a nem létezik, akkor a parancs azt létrehozza. A a értékét és típusát kapja. Ha egy értéket több változónak akarunk adni, akkor a STORE TO parancsot alkalmazhatjuk. A változók megkapják a kifejezés kiértékelt értékét. INPUT [<szöveg>] TO ACCEPT <szöveg> TO Az ACCEPT paranccsal csak karakter típusú adatokat lehet bevinni, és ebben az esetben a karaktersort nem kell idézőjelek közé tenni. 48
?, ?? és ??? parancsok A ? / ?? parancsokkal kifejezéseket lehet kiértékelni és megjeleníteni a képernyőn: ? [PICTURE … ] [FUNCTION … ] [AT N] [FONT C1 [, N2]] [STYLE C2] [, …] parancs a kiértékelt eredményt a kővetkező sor elejére helyezi el, ?? [PICTURE … ] [FUNCTION … ] [AT N] [FONT C1 [, N2]] [STYLE C2] [, …] parancs a kurzor pozíciójától kezdve írja ki az eredményt; AT N – az N-dik oszloptól kezdve írja ki, A ?/ ?? parancsok vezérlő karaktereket is tartalmazhatnak.
49
Példa ? ‘Vigyázz! ’, CHR(7) && 7- a hangjelzés kódja
Tömbök és tömbkezelő parancsok Tömb definiálását a DECLARE (N1 [, N2]) (vagy DIMENSION (N1 [, N2]) ) Adatbázis-állomány mezőinek másolása tömbbe (vagy memóriaváltozókba) SCATTER [FIELDS <mezőlista>] [MEMO] TO / TO BLANK/ MEMVAR/ MEMVAR BLANK A SCATTER parancs az aktuális rekord összes vagy a megnevezett mezők értékeit egy tömbbe (TO ), 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 50
memóriaváltozók neve megegyezik a mezők nevével. Ezért szükséges az összetett nevek alkalmazása: M. 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. A tömb (memóriaváltozók) másolása az adatbázis mezőibe GATHER FROM / MEMVAR [FIELDS <mezőlista>] [MEMO] FROM - a tömb elemeinek értékeit az aktuális rekord mezőibe másolja át. Adatbázis rekordjainak másolása egy kétdimenziós tömbbe COPY TO ARRAY [FIELDS <mezők> []] [FOR ] [WHILE ] 51
Tömb hozzáfűzése az adatbázis-állományhoz APPEND FROM ARRAY [FOR ] [FIELDS <mezőlista>] Tömb másolása az adatbázis rekordjaiba (a már létező adatok helyébe) REPLACE FROM ARRAY [] [FIELDS <mezők>] [FOR ] [WHILE ] Tömbelem törlése ADEL (, <elem(sor)szám> [, 2]). Az ADEL függvény törli a 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 52
é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). Elem vagy sor (oszlop) beszúrása a tömbbe AINS (, <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). Tömb elemek másolása egy másik tömbbe ACOPY (,[, N1 [, N2 [, N3 ] ] ] ) A függvény a (forrástömb) elemeit a -be (céltömbbe) másolja át. 53
N1- kezdőindex ( 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 -ben, ahová a másolt tömb első eleme kerül (alapértelmezése: 1). Keresés tömbben ASCAN (, [, [,<elemszám>]]) A függvény a keresi a . Ha adott a , 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).
54
Tömb elemek rendezése ASORT ( [, [,<elemszám] [, N]]]) Ha adott a , 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. Tömb elemeinek (sorainak, oszlopainak) száma ALEN ( [, 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.
55
Memóriaváltozók mentése, visszatöltése, megjelenítése 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?)
56
Memóriaváltozók visszatöltése RESTORE FROM <állomány> /FROM MEMO <memo- mező> [ADDITIVE] A 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 az összes változót lehet törölni. A változók és értékük kiírhatok a képernyőre: DISPLAY/LIST MEMORY [LIKE <maszk>] vagy a nyomtatóra (állományba): DISPLAY/LIST MEMORY [LIKE <maszk>] TO PRINTER/ FILE <állomány> 57
Konstansok definiálása Ha egy konstanst a programban többszőr akarunk alkalmazni, akkor a program elején a konstanst a #DEFINE paranccsal lehet deklarálni. A kifejezés kiértékelődik és a K nevű konstans megkapja ezt az értéket. Pl.: #DEFINE maxertek 100
58
Vezérlési utasítások (parancsok) IF utasítás IF <parancsok – 1> [ELSE <parancsok –2>] ENDIF Ha a 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.
59
DO CASE utasítás DO CASE CASE <parancsok - 1> CASE <parancsok - 2> … [OTHERWISE <parancsok-N>] ENDCASE
60
Ciklusok Parancsok feltételes ciklikus ismétlése DO WHILE <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 értékétől a vezérlést átadja az ENDDO utáni parancsra (kilép a ciklusból).
61
Ciklus végrehajtása meghatározott számú lépésben FOR = N1 TO N3 [STEP N2] <parancsok> [LOOP] [EXIT] ENDFOR (vagy NEXT ) a - 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 é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 kezdő értéke, N3- a végértéke, N2- lépésköz, amely pozitív vagy negatív lehet. Alapértelmezése: 1. A 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. 62
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*N2N3. Ha a lépésköz =1, akkor nem szükséges a STEP 1 opciót megadni. Rekordok ciklikus vizsgálata SCAN [] [FOR ] [WHILE ] <parancsok> [LOOP] [EXIT] ENDSCAN
63
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. 64
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ó. 65
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. ON ERROR [<parancs>] A <parancs> akkor lesz végrehajtva, ha a program futtatása alatt egy hiba keletkezet. Leggyakrabban a DO parancsot szokták alkalmazni. ON READERROR [<parancs>] A <parancs> akkor lesz végrehajtva, ha az input (beviteli) művelet alatt hiba jött létre. A rutinban a hiba feldolgozása nem csak 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. 66
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
67
Az állományokkal végezhető általános műveletek Lemeztartalom megjelenítése: DIR [[ON] <meghajtó>] [[LIKE] <útvonal>][<maszk>] [TO PRINTER/ TO FILE ] <maszk> - az állományok maszkja, amely a * és ? karaktereket tartalmaz, az eredmény a nyomtatóra (TO PRINTER) vagy állományba (TO FILE ) irányítható. Az alapértelmezés szerint a parancs a DBF kiterjesztésű állományokat listázza. A nem aktív állományokat a ERASE (vagy DELETE FILE ) parancsokkal lehet megsemmisíteni. Ezekben a parancsokban az állomány kiterjesztését kell megadni. RENAME TO
68
parancs az állományt átnevezi. – az állomány új neve. A nem aktív állományt egy másik állományba a COPY FILE TO paranccsal lehet másolni. A és állományok kiterjesztéseit kötelező megadni. Az adatbázis állomány másolása Az aktív adatbázis állományt egy új állományba (f1) lehet átmásolni. Ezt a műveletet a COPY TO [] [FIELDS <mezőlista>] [FOR ] [WHILE ] [TYPE <állomány típusa>] [WITH CDX] parancs hajtja végre. 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. 69
a 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 állománynak olyan kiterjesztést lehet adni, amely más alkalmazásoknak is megfelel. Az <állomány típusa> fontosabb lehetséges értékei: 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 / WITH BLANK/ WITH TAB] – az állomány ASCII formátumú, rekordjai változó hosszúságúak, amelyeket CR és LF (kocsi vissza - soremelés) karakterek zárnak. A mezők változó hosszúságúak és köztűk határoló jel van elhelyezve. A határoló jel alapértelmezése - vessző (DELIMITED), DELIMITED WITH BLANK – a mezők szóközzel vannak elkülönítve, DELIMITED WITH TAB – a mezőket tabulátorjel különíti el, DELIMITED WITH – a mezők с karakterrel vannak elkülönítve. Az állomány kiterjesztésének alapértelmezése: .TXT. 70
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 Rekordok hozzáfűzése az adatbázis-állományhoz Egy DBF vagy TXT kiterjesztésű állományból az aktív állomány végére rekordokat lehet fűzni: APPEND FROM [FIELDS <mezőlista>] [FOR ] [WHILE ] [TYPE <állomány típusa>] Ha a TYPE paraméter nincs megadva, akkor az állomány kiterjesztése - DBF. Az állományból csak azok a mezők lesznek átmásolva, amelyeknek a neve megegyezik az aktív állomány mezőinek nevével. 71
FIELDS <mezőlista> - állományból csak az adott mezők másolódnak át. Az APPEND FROM parancs akkor is alkalmazható, ha az állomány más alkalmazásokban jött létre. Ebben az esetben a TYPE paramétert kell alkalmazni (mint a COPY TO parancsban). PL., ú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 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 72
MODIFY FILE temp.txt USE DELETE FILE backup.dbf DELETE FILE temp.txt Műveletek az adatbázis struktúrájával Ha új adatbázis állományt kell létrehozni, amelynek a struktúrája azonos vagy hasonlít az aktív állomány struktúrájára, akkor a COPY STRUCTURE TO [FIELDS <mezők>] parancs segítségével lehet létrehozni új üres állományt (f1), amelynek a mezői azonosak az aktív állomány mezőivel vagy a mezői a FIELDS <mezők> paraméter által lesznek kiválasztva. Leggyakrabban az adatbázis-állományt CREATE paranccsal szokták létrehozni, amely interaktív módban működik. Előfordulhat, hogy a program futtatása alatt is szükséges új állományt létrehozni. E célból két parancsot kell alkalmazni. A COPY TO STRUCTURE EXTENDED 73
parancs az aktív állomány struktúráját átírja a állományba, (a rekordjaiban az aktív állomány mezőjének paraméterei tárolódnak). négy mezőt tartalmaz: FIELD_NAME (a mező neve), FIELD_TYPE (a mező típusa), FIELD_LEN (a mező hossza), FIELD_DEC (a numerikus mező tizedes számjegyeinek száma). Szükség esetén az állomány módosítható és ezzel az állomány struktúrája megváltozható. Az új állományt az állomány alapján a CREATE FROM paranccsal lehet létrehozni. - az új állomány neve. Példa CLEAR USE adatok COPY TO temp STRUCTURE EXTENDED 74
USE temp WAIT WINDOW 'az adatok.dbf felépítése' NOWAIT BROWSE CREATE backup FROM temp USE backup DISPLAY STRUCTURE
75
Állományok összeolvasztása Az aktív állományt egy másik állománnyal össze lehet olvasztani. Ezt a műveletet a JOIN WITH <munkaterület> TO [FIELDS <mezőlista>] FOR] 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 kader IN a SELECT b USE brig JOIN WITH a TO kader2 FOR num=kader.num FIELDS a.nev, num, ora
76
Aktív állomány módosítása egy másik állomány alapján UPDATE ON FROM <munkaterület> REPLACE <mező1> WITH , <mező2> WITH , … [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 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. 77
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
78
Rekordok feltételes számlálása COUNT [] [FOR ] [WHILE ] [TO ] parancs megállapítja az aktív állomány azok rekordjainak számát, amelyek megfelelnek a feltételnek. A alapértelmezése – ALL, FOR - amelyet a parancs mindegyik rekordban ellenőriz, WHILE - a számlálás addig folytatódik, amíg a feltétel igaz, TO - az eredmény (a rekordok száma) a kerül. Példa USE emberek COUNT ALL FOR irszam=3300 TO egriek WAIT WINDOW 'Egri előfizetők: '+ LTRIM(STR(egriek))
79
Numerikus kifejezések összegezése és átlaga SUM [] [] [FOR ] [WHILE ] [TO