Egy utasítást egy sorba kell írni, ha egy utasítást folytatni akarunk a következõ sorban, akkor a sor végén pontosvesszõt kell tenni, egyébként az utasítások végére nem tehetünk pontosvesszõt.
PARANCSSZÓ [ < kifejezés > | < kifejezéslista > ] [ < érvényességi kör > ] [WHILE < feltétel > ] [ FOR < feltétel > ]
Hasonló az érvényességi körhöz, ez a két paraméter is a parancsban résztvevő rekordok körét változtatja meg. Itt azonban nem a rekord állományon belül elfoglalt helye, hanem tartalmának tulajdonságai töltik be a döntő szerepet.
A WHILE paraméter a rekordmutató aktuális pozíciójától kezdi
vizsgálni a rekordokat, magát a parancsot csak akkor hajtja végre, ha a feltétel
igaznak bizonyul. Az első olyan rekordon, amelyre a feltétel nem teljesül,
befejeződik a parancs végrehajtása.
Az ALL illetve REST érvényességi kör használata ilyenkor felesleges, azonban a NEXT
érvényességi körrel lehetséges, hogy nem a feltétel hamissá válása, hanem az
érvényességi kör vége állítja meg a parancs végrehajtását.
A FOR paraméter az érvényességi kör alapértelmezését átírja ALL értékre, tehát a végrehajtás a logikailag legelső rekordon kezdődik, és az adatbázis végéig tart. A parancsban előírt műveleteket a dBase mindazon rekordokon végrehajtja, amelyekre nézve a feltétel igaznak bizonyul. E paraméter mellett a REST és a NEXT érvényességi kör használata mindösszesen csak azt befolyásolja, hogy mely rekordokon értékelődjön ki a feltétel.
Sok parancs opcionális eleme. Az adatbázis azon részét határozza meg, amelyen a parancsot végre kell hajtani
Az alapértelmezés általában az aktuális rekord ,vagy néhány parancsnál
ALL azaz a teljes adatbázis.
(a FOR és a WHIlE parancsparaméterek megváltoztatják az alapértelmezést)
Érvnyességi kör lehet:
RECORD n : | az n. rekord |
NEXT n : | az aktuális rekordtól kezdve n darab rekord |
REST : | az aktuálistól az adatbázis végéig |
ALL : | az adatbázis összes elérhető rekordja |
Fontos tudni, hogy a változók, deklaráció híján, az elsõ, rájuk vonatkozó értékadással jönnek létre. Mivel az értékadás jobb oldalán álló adat típusának megfelelõ típusú lesz a változó, ezért az elsõ értékadásra különösen ügyelni kell. Ajánlatos egyfajta áldeklarációt végezni, amikor is értékül adunk egy olyan adatot a leendõ változónknak, amelynek nincs tényleges jelentõssége, de biztosan a kívánt típusú és méretû változót hozza létre.
Memóriaváltozók létrehozása így kétféleképpen is történhet:
STORE < kifejezés > TO < memóriaváltozó [ lista ] >Példák:
szoveg1=' ' | szoveg1: egy hosszú karakterlánc |
szoveg2='aa' | szoveg2: kettõ hosszú karakterlánc |
log1=.T. | log: igaz értékû logikai változó |
log1=.F. | log: hamis értékû logikai változó |
d1=01.03.11 | d1 dátum típusú változó, értéke a megfelelõ környezeti paraméter beállításától függ |
szoveg1=szoveg2 | érvénytelen értékadás |
store 0 to i,j,k,l | i,j,k,l memóriavátozók is mind 0 értékkel jönnek létr |
SPACE(n) : | a visszatérési értéke egy n hosszú karakterlánc, szóközökkel feltöltve |
DATE() : | az aktuális dátum |
STORE < kifejezés > TO < memóriaváltozó-lista >
EVAL ( < kódblokk > , [ < blokkargumentum-lista > ] ) - > utolsó blokkérték
SPACE () - > szóközök
FIELDBLOCK ( < mezõnév > ) - > kódblokk
FIELDPUT ( < mezõsorszám > , < kifejezés > ) - > mezõérték
FIELDWBLOCK( < mezõnév > , < munkaterület száma > ) - > kódblokk
MEMVARBLOCK( < memóriaváltozó neve > ) - > kódblokk
OUTSTD( < kifejezéslista > ) -> NIL
Az =, := és a STORE használható értékadásra.
BEGIN SEQUENCE < utasítások > ... [ BREAK [ < kifejezés > ] ] < utasítások > ... [ RECOVER [ USING < változó > ] ] < utasítások > ... END [ SEQUENCE ]
BEGIN SEQUENCE - END [SEQUENCE]: | Utasításblokk kezdetének és végének definiálása. A lezárásnál a SEQUENCE-nek nincsen szerepe, a kiírása opcionális. |
BREAK kifejezés: | Kilépés az utasításblokkból. Amennyiben van definiálva RECOVER és a BREAK előtte van, akkor a RECOVER-re kerül a vezérlés (akár alprogramokból is). Amennyiben nincsen RECOVER definiálva vagy a RECOVER után található a BREAK, akkor az END SEQUENCE-re kerül a vezérlés. A BREAK mögött opcionálisan megadhatunk egy kifejezést paraméternek, ekkor a RECOVER résznél lehetőség van ezt a paramétert átvenni. |
RECOVER [USING < változó >] | Folytatási pont a BREAK után. Ha egy szekvenciában a RECOVER előtt BREAK utasítás történik, akkor a vezérlés a RECOVER-re kerül. Ha meg van adva az opcionális USING záradék, akkor a mögötte levő változóba belekerül az adott BREAK utasítás paramétere. Ha nem volt megadva paraméter, akkor a USING mögé írt változó a NIL értéket veszi fel. Amennyiben a szekvenciában a RECOVER utasításig nem történt BREAK, akkor a RECOVER előtt a vezérlés átkerül az END SEQUENCE-re kihagyva a RECOVER utáni utasításokat |
Az utasításblokkok tetszőlegesen egymásba ágyazhatóak: szekvencián belül lehet szekvencia a RECOVER előtt és után is.
Szekvencián belül csak a RECOVER utáni részen lehet a LOOP, EXIT, RETURN
parancsokat használni. A RECOVER előtt, vagy ha nincsen RECOVER, akkor nem lehet alkalmazni a
LOOP, EXIT, RETURN parancsokat.
Ezek a megkötések egymásba ágyazott szekvenciáknál a szekvenciák között is érvényesülnek: ha egy szekvenciában a RECOVER előtt
egy másik szekvencia található, abban sehol sem fordulhat elő a 3 tiltott utasítás.
A szekvencia tipikus alkalmazása a hibakezelés, ahol a RECOVER elé lehet írni a futtatandó programrészt és a RECOVER után a hibakezelést. Amennyiben hiba lép fel, akkor a BREAK-nél meg lehet adni a hibakódot, amit a hibakezelő rész RECOVER USING-al átvehet és le tudja kezelni specifikusan az adott hibát.
BEGIN SEQUENCE < utasítások > ... [ BREAK [ < kifejezés > ] ] < utasítások > ... [ RECOVER [ USING < változó > ] ] < utasítások > ... END [ SEQUENCE ]
BREAK kifejezés: | kilépés az utasításblokkból. |
RECOVER :(ha van) | Vagy azEND után következõ utasítást hajtja végre, miközben a program számára visszaadott érték a kifejezés-nek megfelelõ lesz. |
Ha a RECOVER-nél
USING <változó>paramétert megadtuk, akkor a változó értéke a BREAK utáni kifejezés értékét veszi fel.
Az utasításblokkok egymásba ágyazhatók!
IF < feltétel > < utasítások > [ELSE < utasítások >] ENDIF
DO CASE CASE < feltétel > < utasítások > [CASE < feltétel > < utasítások > ... [OTHERWISE < utasítások >] ENDCASE
Az elsõ igaz feltételhez tartózó utasításokat hajtja végre, ha egyik sem igaz, az OTHERWISE-hoz tartozó utasításokat hajtja végre, ha OTHERWISE nincs, akkor ENDCASE után foytatja.
A dBase III PLUS rendelkezeik különleges fügyvénnyel, amely néhány egszerű feltételes szerkezetet tud kezelni:
IIF( < Lkif1 > , < kif1 > , < kif2 > ) |
Lkif1 logikai kifejezés igaz értéke esetén a kif1 egyébként a kif2 értékét adja vissza. |
Itt már a többirányú elágazás megvalósításához bevezették az elsif ágat is:
IF < feltétel1 > ... [ ELSEIF < feltétel2 > < utasítások > ] ... [ ELSE < utasítások > ] ENDIF
Clipperben és Foxproban is létezik az IIF szintaktika ua mint dBase-nél
DO CASE CASE < feltétel1 > < utasítások > [ CASE < feltétel2 > < utasítások > … ] [ OTHERWISE < utasítások > ] ENDCASEAz elsõ igaz feltételhez tartózó utasításokat hajtja végre, ha egyik sem igaz, az OTHERWISE-hoz tartozó utasításokat hajtja végre, ha OTHERWISE nincs, akkor ENDCASE után foytatja.
DO WHILE < feltétel > < utasítások > [LOOP] [EXIT] ENDDO
[LOOP] | feltétel nélküli ugrás a legutóbb indított DO WHILE utasításra |
[EXIT] | feltétel nélküli kiugrás a ciklusból |
FOR < számláló > = < kezdő érték > TO < végérték > [ STEP < lépésköz > ] < utasítísok > ENDFOR | NEXT
A számláló, ha korábban nem lett deklarálva, PRIVATE változóként definiálódik. Itt is használható a LOOP és az EXIT utasítás.
A fentieken túl még egy új lehetőség:
SCAN [ < hatókör > ] [ FOR < kifL1 > ] [ WHILE < kifL2 > ] < utasítások > ENDSCANAz adatbázis meghatározott rekordjain megy végig.. A hatókör az adatbázis azon része , amelyen belül az utasítások végrehajtásra kerülhetnek azokon a rekordokon, melyekre kifL1 igaz. Amennyiben kifL2 hamissá válik, a ciklus befejeződik. Itt is használható a LOOP és az EXIT utasítás.
A dBase bizonyos verzióiban (ilyen pl dBase III PLUS) már van lehetőség interkatív módon bekérni adatokat memóriaváltozókba.
INPUT [ < üzenet > ] TO < memóriaváltozó >
ACCEPT [ < üzenet > ] TO < memóriaváltozó >Mindkét parancs végrehajtásakor egy új memóriaváltozó jön létre illetve, - ha már létezett ilyen nevű változó, - akkor felülírja azt.
A parancs 2 funkciót is betölthet:
WAIT- felfüggeszti a program futását, amíg a felhasználó egy billyentyűt leüt.
WAIT [ < üzenet > ] [ TO < memóriaváltozó > ]- Egyetlen billentyű leütésére vár, és utána engedi tovább a program futását. Ekkor a billentyű értéke íródik a változóba.
@ < sor > , < oszlop > [ SAY < kar.kif. > [ PICTURE ' < formátum > ] ] GET < változó > [ PICTURE < formátum > ] [RANGE < n1 > , < n2 > ] ] ... READ
Az utasítás a képernyõ < sor > < oszlop > pozíciójára kirajzolja a megadott változó, és az esetlegesen megadott maszk és funkciókódok alapján az input mezõt, amit a felhasználó szabadon szerkeszthet, mert az önmagában kiadott GET utasítás nem végzi el a tényleges adatbevitelt.
SAY paraméter esetén kiírja a karakteres kifejezést (pl.:magyarázó szöveg), és az adatbemeneti mezõt csak e mögött jeleníti meg.
RANGE paraméterrel lehet megkötést adni a bejövő adat értékére.
Az adatok tényleges bevitelét a READ utasítás végzi.
Egyetlen READ utasítás tetszõleges számú GET utasításban szereplõ változónak ad
értéket, tehát ezt az utasítást elegendõ egyszer kiadni.
Maszkkódok:
A maszkkódok mindig pontosan arra az egy karakterre érvényesek, amelynek megfelelõ pozíciót elfoglalják a PICTURE-ben.
Néhány példa:
'9' |
ezen a pozíción csak számjegy vagy elõjel szerepelhet |
'#' |
ezen a pozíción csak számjegy, elõjel vagy szóköz szerepelhet |
'N' |
ezen a pozíción csak számjegy szerepelhet |
'A' |
ezen a pozíción csak betû (a..z, A..Z) szerepelhet |
'X' |
ezen a pozíción tetszõleges karakter szerepelhet |
'L' |
ezen a pozíción csak logikai érték szerepelhet |
'Y |
ezen a pozíción csak 'Y', 'y', 'N', 'n' karakter szerepelhet |
'.' |
ezen a pozíción csak tizedespont szerepelhet |
'!' |
ezen a pozíción a betűt nagybetűre alakítja |
',' |
számok tagoására alkalmas (csak akkr jelenik meg, ha szám kerül a bal oldalára) |
Funkciókódok:
A funkciókódok mindig a teljes adatbemeneti mezõre vonatkoznak. A bevezetõ karaktere a '@'.
Néhány példa:
S( < num.kif. > )' |
a beviteli mezõ pontosan < num.kif. > szélességû (lehet görgetni) |
'B' |
numerikus adat, amelyet balra igazítottan jeleníti meg |
'Z' |
bevezetõ nullák elnyomása |
'D' |
a dátumokat a SET DATE szerinti formában mutatja |
'R' |
a < formátum > -ban megadott nem-funkció és nem-maszk karaktereket a képernyõn megjeleníti, de a változó értékénél nem veszi figyelembe |
'!' |
az alfabetikus karaktereket nagybetûre konvertálja |
'A' |
csak alfabetikus karaktert fogad el |
'(' |
a negatív számokat zárójelbe rakja |
@ < sor > , < oszlop > SAY < kar.kif. > [ PICTURE ' < maszk és / vagy funkciókód > ' ]
Ez az utasítás a < kar.kif. > karakterláncot jeleníti meg a képernyõ < sor >, < oszlop > pozícióján, az esetlegesen megadott maszk- illetve funkciókódoknak megfelelõen.
'?' |
soremelés |
'?? < kar.kif >' |
karakteres kifejezés kiíratása az aktuális pozícióra, a végén soremelés nélkül |
'? < kar.kif. >' |
karakteres kifejezés kiíratása a következõ sor elejétõl |
'EJECT' |
lapdobás |
'PROW()' |
az utolsó lapdobástól kinyomtatott sorok száma |
'PCOL()' |
az aktuális oszloppozíció |
@ < felsõ sor > , < bal oszlop > , < alsó sor > , < jobb oszlop > BOX < keretezõk >
keretezõk:
karakteres kifejezés, a keretet alkotó jelek (9 darab) az óramutató járásával megegyezõ sorrendben a bal felsõ ponttól indulva. A 9. jel a keretet feltöltõ karakter.
Ha csak egyetlen karaktert adunk meg, akkor a teljes keretet ez az egy karakter alkotja.
Szimpla vagy duplavonalú keret rajzolása:
@ < felsõ sor > , < bal oszlop > TO < alsó sor > , < jobb oszlop > [ DOUBLE ]
Képernyõablak törlése:
@ < felsõ sor > , < bal oszlop > [ CLEAR [ TO < alsó sor > , < jobb oszlop > ] ]
felsõ sor, bal oszlop, alsó sor, jobb oszlop: a törlésre kijelölt ablak megadása, ha a jobb alsó sarkot nem adjuk meg, akkor MAXROW(), MAXCOL()-ig töröl.
A képernyõt az aktuális alapszínnel tölti fel.
@ < sor >, < oszlop > PROMPT < menüpont > [ MESSAGE < üzenet > ]
Kiírja a menüpontot a sor, oszlop által meghatározott helyre.
Az üzenetet a SET MESSAGE által meghatározott sorban jeleníti meg, ha az aktuális menüpontra rámegyünk.
Minden menü maximálisan 32 menüpontot tartalmazhat.
A kiválasztott menüpont a MENU TO után megadott változóba kerül.
példa:
@ < sor >, < oszlop > [ SAY < kifejezés > [ PICTURE < formátum1 > ] [ COLOR < színkód > ] ] GET < változónév > [ PICTURE < formátum2 > ] [ WHEN < feltétel > ] [ RANGE < alsó >, < felsõ > ] | [ VALID < logikai kifejezés > ]
< sor >, < oszlop >: numerikus kifejezések, az adat bekérésének helye a képernyõn. Ha a SAY kulcsszóval szöveget is iratunk ki, akkor a szöveg kiírásának kezdõpozíciója, a GET szerinti adatbekérés a szöveg után kezdõdik.
SAY < kifejezés > : a kifejezés kiíratása a képernyõ meghatározott helyére Ha a hozzá tartozó PICTURE is meg van adva, akkor a kiíratás formázott lesz.
GET < változónév > : a bekért adat értékét felvevõ változó neve. Típusa karakteres, dátum, numerikus vagy logikai. Ha tömb számára kérünk belõle értéket, a megfelelõ tömbindexeket is meg kell adni. A megadott érték a képernyõ megfelelõ helyén is kiírásra kerül.
PICTURE < formátum2 >: a bekért adat kifejezésének formázása
COLOR < színkód > : karakteres kifejezés, amely egy vagy több színkódot tartalmaz. Az aktuális GET objektum színeinek megadása, a literálként definiált színeket idézõjelek közé kell tenni. Ha két színt adunk meg, akkor az elsõ a nem-kiválasztott-mezõ színe, a második a kiválasztott mezõ színe. Ha csak egyet, akkor mind a kiválasztott, mind a nem kiválasztott mezõnek ugyanaz lesz a színe. (A színmegadási lehetõség csak az 5.01-es verzióra érvényes!)
WHEN < feltétel > : logikai kifejezés, melynek teljesülése szükséges ahhoz,hogy a GET szerinti adatbekérés megtörténjen. Ha a feltétel nem teljesül, ezt a GET átugorja.
RANGE < alsó > , < felsõ > : dátum vagy numerikus kifejezés, a beírásra kerülõ érték lehetséges alsó és felsõ határa.
VALID < logikai kifejezés >: egy olyan logikai kifejezés, amelynek teljesülése szükséges ahhoz, hogy a beírásra kerülõ érték a READ számára elfogadható legyen.
A GET-ek által meghatározott értékek mindaddig érvényben maradnak, amíg egy READ, egy CLEAR, vagy egy CLEAR GETS parancs kiadásra nem kerül.
Ha a SET DELIMITER kapcsoló ON állásban van, a SAY utáni kifejezés és a GET utáni érték közé az aktuális DELIMITER (elválasztó) karakter kerül.
Egyéb, az inputtal kapcsolatos utasítások:
CLEAR GETS, READMODAL, READVAR, READEXIT, READ
@ < sor > , < oszlop > SAY < kifejezés > [ PICTURE < formátum > ] [ COLOR < színkód > ]
< sor > , < oszlop > : numerikus kifejezések, a megjelenítésre kerülõ szöveg kezdetének koordinátái a képernyõn,
illetve nyomtatón.
A sor értéke a képernyõ esetén 0 és MAXROW, nyomtató esetén 0 és 32766 közé esik, az
oszlop értéke képernyõ esetén 0 és MAXCOL, nyomtató esetén pedig 0 és 32766 közé eshet.
SAY < kifejezés > : egy karakteres, dátum, logikai vagy numerikus kifejezés kiértékelésének eredménye, és megjelenítése az aktuális eszközön.
PICTURE < formátum > : a formázó és a maszkkarakterek megjelenítése.
COLOR < színkód > : karakteres, a < kifejezés > színének meghatározása. Ha nincs megadva, akkor a SETCOLOR szerinti szabvány színkód az érvényes. Ha karakteres kifejezés helyett literálként akarjuk megadni, akkor idézõjelek közé kell tenni.
A Foxproban használhatók a DBase lehetõségei, használatukat azomban nem ajánlják. I/O mûveletekre inkább használjunk formokat!!
DIR: | a lemeztartalom megjelenítése. | DIR *.* |
DISKSPACE(): | a lemez szabadkapacitásának lekérdezése | |
FILE : | adott file létezik-e már a háttértárolón | FILE( < file_név > ) |
COPY FILE: | tetszőleges típusú és tartalmú álományok másolása |
COPY FILE < forrás > TO < cé l> |
RENAME: | tetszőleges, már létező file átnevezése |
RENAME < régi_név > TO < újnév > |
ERASE : | tetszőleges állomány törlése | |
RUN vagy ! : | tetszőleges parancs végtrehjtása |
A Clipper lemezmûveleteibõl néhány:
DIR: | a lemeztartalom megjelenítése. |
DIR [ < útvonal > ] [ < maszk > ] |
RENAME: | az állomány nevének megváltoztatása. |
RENAME < régi név > TO < új név > |
COMMIT: | az aktív munkaterületek lemezre mentése. | |
DBCOMMIT: | azonnali lemezre írás a munkaterületrõl. |
DBCOMMIT -> NIL |
DBCOMMITALL: | azonnali lemezre írás. | |
DELETE FILE: | állomány törlése a lemezrõl. |
DELETE FILE | ERASE < állománynév > |
FILE: | állomány létezésének ellenõrzése. |
FILE( < állománynév > ) -> van-e |