Navigáció: Rendszerfunkciók > Lista-Generátor > Az INI file szerkezete [Összefüggések] |
Ugrás Előző Fel Következő Menü |
Az LG-ben az adatbázisok közti kapcsolatokat összefüggésekkel adhatjuk meg. Ezeknek a feldolgozása a bennük megadott időpontban történik.
Kulcs=Érték;Feldolgozás (a bal oldalt állítja be a jobb oldal alapján!) vagy [Feltétel=Logikai kifejezés]
|
Összefüggések végrehajtása Tmp1 és TMP2-es módban:
Ha a alap adatbázisban a következő rekordra lép, akkor a mainDB-ből kiindulva rekurzív fa bejárással végigmegy minden összefüggésen, és létrehozza a csatolt adatállományokhoz a keresési kulcsot. Ha az nem azonos az előzővel, akkor végrehajtja a keresést. Ha az AdatDB szekcióban nincs megadva a csatolt állomány indexe, akkor az első indexen próbálkozik. SearchRec-el keres, a többi index mezőt előzőleg nullázta. Keresés után még végrehajt egy ellenőrzést, és ha a record megfelelő, akkor kész. Ha a rekord nem megfelelő, de az indexben lévő rész jó, akkor megpróbál nextrec-el megfelelőt keresni, egészen addig, míg az IndexKey jó. Ha talált, akkor kész, ha nem, akkor kinullázza a rekordot. Értelem szerűen egy adatbázis csak akkor fog változni a mainDB változásakor, ha van megadva rá olyan összefüggés, ami hozzákapcsolja. Egyenlőre csak olyan összefüggést lehet megadni, amelyben a kulcs egy adatbázis mező, és az érték hivatkozásban is maximum egy adatbázis mező szerepel. Ha az érték egyetlen adatbázis mező, és típus azonos, akkor csak szimplán behelyettesíti, ha összetett hivatkozás, vagy konstans, akkor megpróbálja a kulcs típusára konvertálni. Pl.: AFA_Tábla.Kód=VevőSzTétel1.ÁfaKód+1 az AFA_Tábla.Kód az CARD8, a „VevőSzTétel1.ÁfaKód+1” feldolgozása LONGREAL lesz, ezt konvertálja CARD8 ra. (Az összegzések miatt csináltam azt, hogy egy token értéke vagy string, vagy longreal, akkor még nem gondoltam összetett kifejezésekre az összefüggésekben. Ha nagyon sok időm lesz, megcsinálom, az egész típust is.) |
Összefüggések végrehajtása Tmp3-mas módban: Tmp3-mas módban:
A Tmp3-mas az SQL mód, ahol nincs maindb, így a febejárásos kiértékelés sem működik. Itt a program először felépíti az adatbázisok sorrendjét. Azok az adatbázisok, amelyekre az adatmezők nem hivatkoznak, kimaradnak a feldolgozásból. (Ha egy tábla csak öszsefüggésekben szerepel, akkor ahhoz fel kell venni hozzá legalább egy adatmezőt nulla hosszal.) A sorrend kiinduló alapja a megadás sorrendje, de ezt befolyásolják az összefüggések, azaz egy db csak akkor dolgozható fel, ha már minden hivatkozását be lehet helyettesíteni adattal. A sorrend eldöntésénél az összefüggések feltételeit figyelmen kívül hagyja a program (kivéve a csak input és konstans hivatkozásokat tartalmazóakat), így olyan sorrendet állít fel, ami minden esetben megfelelő. Ezután elidul az első db-n, végigmegy a feltételnek megfelelő összes rekordján, és rekordonként: -kitölti a belőle induló összefüggéseket, -és meghívja a következő db-t, az szintén végigmegy a feltételnek megfelelő összes rekordján, és rekordonként... Egy sor akkor kerül be az adatbázisba, ha a rekurzió során eljut a legutolsó db-ig. Ha egy db InnerJoin-al van hozzákapcsolva egy másikhoz, akkor ha a beírt kulcsok alapján nincs rekordja, akkor nem megy tovább a következő db-re, hanem lebontja a rekurziót addig a db-ig, ahhonan ez az InnerJoin kiindult, és a feldolgozás ennek a db-nek a következő rekordjával folytatódik. |
A feldolgozás szempontjából más az input alatti kiértékelés. Igazából ezzel lehet az input alatt szűkíteni a kód, kódnév típusú mezők választható értékeit, ezért inkább a szürésekhez tartozik, mint az összefüggésekhez, de a belső feldolgozása-tárolása mégis az összefüggésekhez sorolja. Mivel itt nem lehet a fa bejárásos módszert használni, ezért a megadás sorrendjében értékeli ki az összefüggéseket. Ez még meg van bonyolítva azzal, hogy ha az összefüggés másik input mezőre hivatkozik, akkor csak abban az esetben hajtja azt végre, ha a bevitel során túljutottunk az adott mezőn. Ennek megfelelően a kiértékelés minden input mezőből való kilépéskor lefut. Pl.: [Input] Név=Mozgásnem Cimke="Mozgásnem:" Típus=KódNév Adat=MozgásnTörzs.Kód KódIndex=1 AdatNév=MozgásnTörzs.Név NévIndex=2
[Input] Név=BizSzám Cimke="Bizszám:" Típus=Kód Adat=RaktForg.BizSzám
[Összefüggések] RaktForg.MozgNem=Mozgásnem; InputAlatt RaktForg.ElsőBizSzám=1; InputAlatt
Ebben az esetben a RaktForg.ElsőBizSzám=1 összefüggés mindíg lefut, de a RaktForg.MozgNem=Mozgásnem öszsefüggés csak akkor, ha már túl vagyunk a mozgásnem bevitelen. Ezzel a bizonylatszám bevitelnél a raktforg már a mozgásnemekre is szűrve van.
Input alatti kiértékelésnél lehet még egy speciális eset: AdatBázis=Logikai kifejezés; InputAlatt Ebben az esetben közvetlenül tehetünk CheckPoc-ot az adatbázisra. PL.: RaktForg=Képlet(RaktForg.Raktár,"R",RaktForg.Rekesz,"r",RRKepl); InputAlatt Itt az RRKepl egy képlet típusú input mező. Ha a bevitelnél ezen túljutottunk, a raktforg a megadott képlettel szűrve lesz. |