New family schema in AgetoAgeSqlite
User Rating: / 1
- Details
-
Category: Development
-
Published on Tuesday, 02 April 2013 20:12
-
Written by Ove
-
Hits: 3157
AgetoAgeSqlite will soon get a new more advanced family schema.
AgetoAgeSqlite vil snart få et nytt mere avansert familieskjema der man kan redigere SQL spørringen for barn selv og definere så mange kolonner med opplysninger som man vil. Man kan ordne kolonnene som man vil bortsett fra at PID feltet må være med, men det kan ligge i en hvilken som helst kolonne. Alle tekniske utfordringer med å la brukeren velge layout er løst.
03-04-2013 - Da er AgetoAgeSqlite (x86) oppdatert med nytt familieskjema der man kan redigere SQL setningen som blir brukt. Når man dobbelklikker en famile vil familieskjemaet undersøke om det finnes en spørring for FShema* som heter "Standard" og hvis denne ikke finnes får man beskjed om dette og man får beskjed om å klikke OK i neste vindu som kommer opp og dette vinduet er SQL Command Builder. Her vil det være en standard SQL spørring og det eneste man trenger å gjøre er å klikke OK. Så vil denne standard spørringen bli lagret og neste gang man dobbelklikker en famile vil familiskjemaet sprette opp med en gang. Senere kan man redigere spørringen med å høyreklikke i barne listen og velge "Setup" og man kan klikke "Test SQL and set actions" for å sette f.eks standard kolonnebredder. Selve spørringen kan man lage som man vil men "WHERE fatherID = @pid1 AND motherID = @pid2 ORDER BY ChildNum" bør man ikke endre. Det viktigste her er nok å velge "felt" eller de kolonner man vil vise. Her er et eksempel:
SELECT Firstname || ' ' || Lastname AS Navn, Birthdate AS Født, Birthplace AS Sted, deathdate AS Død, Occupation AS Yrke, registerdate AS Reg, PID AS ID, CASE WHEN Sex=7 THEN 'Male' ELSE 'Female' END AS Kjønn FROM ata_persons WHERE fatherID = @pid1 AND motheriD = @pid2 ORDER BY childnum
04-04-2013 - VIKTIG! Vennligst vent med å oppdatere. Jeg glemte et par detaljer....men dette tar ikke lang tid, en eller to dager...
05-04-2013 - Okay da er detaljene fikset og i tillegg har jeg føyd til at Standard spørring for barn i familieskjemaet blir laget ved opprettelse av ny database. Hvis man åpner en gammel database og prøver å åpne familieskjemaet blir det som før... en dialog boks kommer opp og man bare klikker OK i neste vindu for å lage en standard spørring.
Den nye versjonen er klar for nedlasting!
Dette nye med å definere sql spørringene (SQL = Select Query Language) gir en artig bieffekt i familie vinduet, da forhåndsvisnings vinduet for utskrift kan programmeres for å benytte den spørringen som er definert for å vise informasjon for personer hvilket jeg allerede er i gang med. Dette kan utvides ytterligere slik at man kan definere egne spørringer som benyttes for utskrift.
Man kan også utvide funksjonaliteten i familiskjemaet med å skrive spørringene på en måte som gir mer informasjon om personer som ikke er med på skjemaet. For eksempel vil man gjerne se om barna har barn da kan man opprette en kolonne som defineres f.eks som:
CASE WHEN pid in(select fatherid from ata_persons where pid = pid) OR pid in(select motherid from ata_persons where pid = pid) THEN 'Ja' ELSE 'Nei' END AS 'Har barn'
Database motoren som er programmert av SQLite temaet håndterer dette lynraskt og jeg merker ingen forsinkelse om jeg har med denne kolonnen. Her er den fullstendige spørringen jeg lagde for dette:
SELECT Firstname || ' ' || Lastname AS Navn, Birthdate AS Født, Birthplace AS Sted, deathdate AS Død, Occupation AS Yrke, registerdate AS Reg, PID AS ID, CASE WHEN Sex=7 THEN 'Mann' ELSE 'Dame' END AS Kjønn, CASE WHEN pid in(select fatherid from ata_persons where pid = pid) OR pid in(select motherid from ata_persons where pid = pid) THEN 'JA' ELSE 'NEI' END AS 'Har barn' FROM ata_persons WHERE fatherID = @pid1 AND motheriD = @pid2 ORDER BY childnum
Bmk.
Se på delen WHERE pid = pid her ble jeg imponert av programmererne av SQLite database motoren, WHERE pid = pid kan jo virke meningsløst men her er det faktisk snakk om to forskjellige pid'er som blir sammenlignet og hvis verdien er den samme for begge to er utrykket SANT.
Så skal vi se litt på kommandoen NATURAL JOIN som kan brukes i de tilfeller man har to eller flere tabeller som har et felles felt (samme navn og type) f.eks feltet ID av type integer er i alle tabellene man vil slå sammen. Dette er kanskje ikke så interessant for AgetoAge men det belyser hva man må tenke på når man bruker en JOIN. Bruker man NATURAL JOIN på to tabeller som ikke har et felles felt (samme navn og type) vil radene man får returnert være meningsløse det blir som å helle ingredienser av mange slag i en bolle og røre rundt. Men finner NATURAL JOIN kommandoen et felles navn på et felt i tabellene kan denne kommandoen gi et meningsfylt sett av rader som returneres. Bruker man bare JOIN må man skrive forutsettningen for at radene kan slås sammen. F.eks ON tabellA.ID = tabellB.ID eller WHERE tabellA.ID = tabellB.ID. Med NATURAL JOIN trenger man ikke skrive forutsettninger men altså farlig å bruke hvis tabellene ikke har et felles felt. Men det kan likevel bli feil hvis man NATURAL JOIN'er to eller flere tabeller som har et felles felt navn der navnet har forskjellig betydning. ID er f.eks et farlig navn å bruke fordi ID kan ha mange forskjellige betydninger. I de tilfeller må man sjekke om ID betyr det samme i begge tabeller. Så det er nok best å ikke bruke NATURAL JOIN hvis man er litt usikker. Men da må man huske på å definere betingelsene. (WHERE eller ON)
Jeg har nå oppdatert utskrift knappen slik at de første 6 kolonner fra SQL spørringen man har definert vil bli vist ved utskrift.
09-04-2013 - Funnet noen småfeil som er blitt rettet. Oppdateringen er lastet opp
13-04-2013 - Lastet opp ny versjon med mulighet for å redigere tekstene på utskriften. Bare å skrive ønsket value (tekst) direkte inn i listen og flytte fokus til en annen rad for at det skal bli lagret.