AgetoAgeSqlite update
User Rating: 



/ 0
- Details
-
Category: Development
-
Published on Wednesday, 01 December 2010 20:53
-
Written by Ove
-
Hits: 3062
Oppdatert AgetoAgeSqlite med en korreksjon i Worldmap. Så har jeg lagt inn en funksjon som gjør at man kan velge å importere en GED fil. Ved åpning av databaser kan man nå filtrere på "*.db" filer eller når man velger navn på en ny database blir det nå automatisk lagt til ".db" på slutten av filnavnet, dette gjør det lettere å finne filer man har lagd. Har man allerede lagd noen filer uten .db på slutten av navnet kan man bare manuelt forandre dette.
I personlisten kan man nå også sortere på flere kolonner, vil man ha listen slik at den er sortert på etternavn og deretter fornavn kan man bare skrive slik i SQL boksen: "order by lastname, firstname" og presse Enter på tastaturet. Ønsker man i tillegg å filtrere personer på etternavn som begynner på "Ols" skriver man "where lastname like 'ols' order by lastname, firstname".
For å finne alle personer som inneholder "farm" i Occupation feltet og sortere på etternavn skriver man "where occupation like '%farm%' order by lastname".
Også hjelpefilen har blitt redigert litt.
I dag den 02.12.2010 har jeg lastet opp ny versjon igjen av AgetoAgeSqlite der man nå har et Advanced Query vindu. Dette finner man på menyen "Database". Vinduet har et tekstfelt der man skriver en komplett SQL setning og klikker Go for å få resultatet. Her må man altså spesifisere hvilken tabell eller tabeller man er interessert i. For å se hvilke tabeller som databasen inneholder har jeg lagt inn en listeboks der navn på alle tabeller er vises. Velger man en tabell fra listen vil SQL setningen automatisk settes til "Select * from (valgt tabell)". Klikker man så Go vil en tabell som inneholder alle felt fra valgt tabell bli vist. Dette gir mange muligheter, men man må kjenne til hvordan tabellene er relatert til hverandre for å få full utnyttelse av dette. Man trenger ikke være redd for å skrive en setning som kan ødelegge databasen så lenge man ikke skriver setninger som sletter eller endrer dataene. Holder man seg bare til Select setninger skjer det ingenting galt. Det er nå man kommer til det punktet der man kommuniserer direkte med databasemotoren. Det er her man "ringer" til databaseserveren og spør etter noen opplysninger. Jeg kunne programmert skjemaer og vinduer der denne kommunikasjonen var ferdig programmert og der er mange vinduer allerede i AgetoAgeSqlite der dette er ferdig programmert men det setter normalt begrensninger og hvorfor ikke la brukeren få føle at han/hun kan selv bestemme hva som er interessant å spørre etter? La oss ta et eksempel, man husker at det var noen personer i databasen med etternavn som var kortere enn 5 bokstaver og at disse ikke var født i Norge, Philippines eller USA. Hvordan finne disse personene hurtigst mulig? Joda, bare nå å gå til Query vinduet og skrive inn følgende SQL setning
"Select * from ata_persons where birthplace in (select name from ata_locations where Country <> 'Norway' and Country <> 'Phillippines' and Country <> 'USA') and length(lastname) < 5 order by lastname, firstname"
Når man så klikker GO vil en tabell med alle felter ( Select * ) fra persontabellen vises med data for de personer som var innenfor kriterien. I min database har jeg nå ca 8500 personer og denne setningen gir svaret på ovenfornevnte spørsmål på ikke målbar tid (svaret kommer momentant). I min base var det 9 personer.

Her måtte man på forhånd vite hvordan finne land ut fra fødestedet fordi persontabellen har ikke noe felt Country. Det ville vært helt meningsløst å måtte skrive inn Land for hver eneste person man registerer. Men en location har et Country felt og navnet (name) fra locationstabellen er det samme som birthplace i persontabellen.
Bmk.
Ovenfornevnte SQL spørring kan bare kjøres fra "Advanced Query" vinduet. Det går ikke å kjøre den i personlisten, fordi dette vinduet er laget for å forenkle ting for brukeren. Her er første del av SQL setningen ferdig laget men man kan endre litt på "where" delen. Vel, den kan faktisk kjøres også i personlisten hvis man tar bort den første delen "Select from ata_persons " og bare kjører "where birthplace in (select name from ata_locations where Country <> 'Norway' and Country <> 'Phillippines' and Country <> 'USA') and length(lastname) < 5 order by lastname, firstname".