ZX Spectrum

Aug 292010
 

Flattr this!

Ibland kan det vara bra att även ta bort data ur en databas. Lägger man till villkor för vilka poster som ska tas bort så slipper man leta upp dom manuellt. Jag utnyttjar en tabell med dessa fält inklusive några poster för att exemplet ska fungera:

Det handlar alltså om ett adressregister där tabellen heter ”Adressregister”.

Gå in i menyn Verktyg/SQL och kopiera in allting som står inom citatet för att få tabellen Adressregister med medföljande data:

CREATE TABLE ”Adressregister”
(”ID” Integer PRIMARY KEY, ”Förnamn” char(50), ”Efternamn” char(50), ”Adress” char(50), ”Postnummer” char(50), ”Postadress” char(50));

INSERT INTO ”Adressregister”
(”ID”, ”Förnamn”, ”Efternamn”, ”Adress”, ”Postnummer”, ”Postadress”)VALUES(0, ‘Peter’, ‘Andersson’, ‘Storgatan 4’, ‘678 65’, ‘Göteborg’);
INSERT INTO ”Adressregister”
(”ID”, ”Förnamn”, ”Efternamn”, ”Adress”, ”Postnummer”, ”Postadress”)VALUES(1, ‘Sven’, ‘Gustavsson’, ‘Allmänna stigen 36’, ‘566 56’, ‘Örnsköldsvik’);
INSERT INTO ”Adressregister”
(”ID”, ”Förnamn”, ”Efternamn”, ”Adress”, ”Postnummer”, ”Postadress”)VALUES(2, ‘Algot’, ‘Blomkvist’, ‘Västra gatan 25’, ‘678 65’, ‘Stockholm’);
INSERT INTO ”Adressregister”
(”ID”, ”Förnamn”, ”Efternamn”, ”Adress”, ”Postnummer”, ”Postadress”)VALUES(3, ‘Emma’, ‘Hultkvist’, ‘Gränden 3’, ‘765 56’, ‘Göteborg’);
INSERT INTO ”Adressregister”
(”ID”, ”Förnamn”, ”Efternamn”, ”Adress”, ”Postnummer”, ”Postadress”)VALUES(4, ‘Johanna’,’Evertsson’, ‘Höjden 3’, ‘566 88’, ‘Falköping’);
INSERT INTO ”Adressregister”
(”ID”, ”Förnamn”, ”Efternamn”, ”Adress”, ”Postnummer”, ”Postadress”)VALUES(5, ‘Evelina’, ‘Jonasson’, ‘Östra gatan 87’, ‘766 65’, ‘Stockholm’);
INSERT INTO ”Adressregister”
(”ID”, ”Förnamn”, ”Efternamn”, ”Adress”, ”Postnummer”, ”Postadress”)VALUES(6, ‘Finn’,’Rutgersson’,’Skojarbacken 44′,’655 67′,’Linköping’);
INSERT INTO ”Adressregister”
(”ID”, ”Förnamn”, ”Efternamn”, ”Adress”, ”Postnummer”, ”Postadress”)VALUES(7, ‘Anders’,’Andersson’,’Storgatan 12′,’678 65′,’Göteborg’);

Glöm inte att gå in i menyn Visa och ”uppdatera tabeller”.

Nu skulle jag vilja ta bort alla personer som bor i Stockholm från registret.

Som vanligt går vi in i menyn Verktyg/SQL och skriver sen in följande text:

DELETE FROM ”Adressregister”
WHERE ”Postadress”=’Stockholm’

Texten behöver knappast någon närmare förklaring mer än att jag återigen måste nämna att tabellnamn och fältnamn kräver dubbelfnuttar och värden enkelfnutt, dvs. det som hamnar efter lika-med-tecknet. Detta skiljer sig från program till program och Base är uppbyggt på detta sätt.

Så här ser tabellen ut efter man kört sql-kommandot:

Vi har fått bort alla personer från Stockholm från tabellen.

Nu försvårar vi det hela en smula. Jag vill nu ta bort alla personer som bor på Storgatan i Göteborg. Som vi kan se så finns här tre personer i nuläget. Problemet är att vi har två Storgatan med olika nummer på gatan. Alltså kan vi inte sätta ett lika-med-tecken.

Nu skriver vi därför in följande sql-kommando:

DELETE FROM ”Adressregister”
WHERE ”Postadress”=’Göteborg’ AND ”Adress” LIKE ‘Storgatan*’

och tabellen ser ut på följande sätt efter vi kört kommandot:

I denna fråga använde vi oss av LIKE och satte sen värdet Storgatan med jokertecknet * efteråt. Detta betyder att alla poster som innehåller Göteborg från kolumnen Postadress samt där adressen börjar med Storgatan kommer att tas bort.

Aug 272010
 

Flattr this!

Man kan göra inknappandet av datum i ett formulär snyggare och ibland även behändigare.

Börja med att skapa en tabell i en ny databas och lägg till dessa poster:

ID (nyckel) och Datum[Date]

Skapa sen ett formulär som är baserat på denna tabell. ID är inte nödvändigt att ta med i formuläret. Välj inte tabellform utan kolumnform när placering av kontroller ska anges i punkt 5 i formulärguiden. Följande formulär kommer att se ut ungefär så här:

Här kan man skriva in datumet men det är svårt att veta vilket format som används.

Stäng nu formuläret och högerklicka på formulärikonen och välj redigera.

Markera nu datumrutan. Här märker man att både etiketten och rutan markeras tillsammans.

Högerklicka nu på fältet och välj Gruppera/Häv gruppering. Dubbelklicka sen på textrutan för att få upp egenskaperna för datumfält. Där ska vi jobba med Allmäntfliken.

Ändra ”Öppningsbar” till ”Ja”. När man nu trycker på så kommer datumfältet se ut på följande sätt när man trycker på rutan:

Vi kan snygga till det hela genom att sätta ”Datumformat” till hela året istället för 10-05-29 som visas som standard. Ser bättre ut med 2010-05-29.

Slutresultatet blir så här:

Aug 222010
 

Flattr this!

Jag håller nu på och bearbeta en egen databas som jag länge har väntat med. Hittills har jag använt Calc till uppgiften men känner att nu går det inte längre. Det är jobbigt att sortera och göra sökningar och sorterar man på felaktigt sätt och inte får med alla inblandade kolumner så är databasen förstörd.

Min Calc-tabell är baserad på släktforskning och då ett bouppteckningsregister. Det handlar med annat ord om inventarier som den avlidna har lämnat efter sig. Detta görs för nästan alla döda människor i Sverige. Nu för tiden är det mer sällan det händer. Fördelen ur släktforskningssyfte är att man både får reda på när personen i fråga har dött och dessutom vem makan/maken samt barnen är och var dom bor. Har i nuläget 3600 poster som ska föras över till Base. Åren det gäller är från 1748 och framåt, främst i Öckerö socken som är en samling öar utanför Bohuslän. Calc-tabellen är ett register till bouppteckningar som är skrivna i Write. Samtliga är utskrivna på papper.

Nåväl, detta var lite om historien. Nu till kolumnerna jag använder i Calc:

Första kolumnen är Död och den tänkte jag utveckla så den innehåller månad och dag i framtiden. Dessutom vill jag ha källan till dödsdatumet. Detta kompletterar jag med i Base eftersom det inte finns någon data än så länge. Källan ska vara dödboken som finns i kyrkböckerna på samma sätt som bouppteckningarna. En av anledningarna till att jag väljer en annan källa än bouppteckningarna själv till dödsdatumet är att dom äldsta bouppteckningarna inte alltid har dödsdatumet skrivet eftersom dom inte var så noga på den tiden. Sen följs den av Förnamn, efternamn, plats vid dödsfallet (socken, ort, plats). Här är det tre platser som specificerar var den döda dog. Sen har vi kolumnen BoupptID där jag satt upp ordningen från nummer 1, 2, 3 osv. i den ordningen bouppteckningen kommer in i en pärm. Det blir alltså en unik siffra här och jag väljer då att sätta nyckel på BoupptID.

Sen kommer vi till de färglagda kolumnerna som innehåller källan, dvs. där man hittar originalet till bouppteckningen. Där har vi kolumnerna HR som står för häradsrätt, vilken bok bouppteckningen står i och bouppteckningsnumret. Man kan se att jag har grön och blå färg. Finns även lila färg. Anledningen är att en bouppteckning kan ha flera källor. När bouppteckningen gjordes en gång i tiden så glömde dom ibland att skriva upp något markområde eller så kan en släkting 100 år senare begära att bouppteckningen ska kompletteras för att arv ska gå rätt till. Det mesta jag har sett hittills är att en person kan ha bouppteckning plus två tillägg, alltså tre olika källor. Rent hypotetiskt kan det finnas obegränsat många källor och det är detta som är det stora problemet eftersom Calc inte klarar av en-till-många-relationer och därför är en databas ett måste.

Skissen jag gjort upp över hur databasen kommer att se ut är denna:

Det handlar alltså om sju tabeller där tblBouppt är huvudtabellen. Notera att jag satt tbl och fld framför alla tabeller och fältnamn. Bra om man använder en standard så det blir lätt att arbeta med databasen vid senare tillfälle. tbl står för table och fld för field. Ju mer komplex en databas, desto större anledning med att göra namnen så snygga möjligt för att slippa merarbete. Egentligen ska man ha engelska namn på alla tabeller och fältnamn för att slippa åäö men för att göra exemplet mer lättförståeligt så kör jag på svenska.

Om vi kollar på huvudtabellen så ser vi att fldSockenID, fldOrtID och fldPlatsID är kopplade till var sin tabell. Detta underlättar för vi får en en-till-många-relation där varje ort får ett nummer. Vi minimerar antalet skrivna tecken iom. att varje ort bara behöver skrivas in en gång, exempelvis kan Öckerö symbolisera 1 och vi får en siffra istället för sex bokstäver. Dessutom kan man har varit slarvig och stavat fel till något socken men genom att korrigera detta i tblSocken så ändras felskrivningen i hela databasen.

Öckerö används i c:a 99% av fallen och därför var en egen tabell som heter tblSocken oundviklig. tblOrt behövs också eftersom Öckerö socken domineras av Hönö, Öckerö (ö), Fotö osv. Dessutom återkommer platsnamnen också. Blir tre extra tabeller.

På vänster sida om huvudtabellen ser vi relationen en-till-många på samma sätt som jag demonstrerat här. Källtabellen (tblKälla) kopplas samman med bouppteckningstabellen (tblBouppt) via tblBoupptKälla. Alltså hamnar all viktig data i tabellen tblBoupptKälla där man kan ha flera källor till en och samma person.

I den sista tabellen som heter tblHR samlar vi alla häradsrätter. Här är också återupprepningar. I mitt fall handlar det om maximalt 10 olika härader till 3600 personer och därför lägger vi dessa i en egen tabell.

Detta exemplet kommer jag att realisera för egen del och dessutom kommer jag att blogga om samtliga saker jag gör. Problemet jag försöker ta itu med är fldBok som ingår i tblKälla. Detta fält innehåller data i stil med FII:1, FII:2 osv. När jag sorterar denna kolumn så blir det fel ordning eftersom det sorteras i bokstavsordning. Jag vill ha sortering efter siffrorna och är nära lösningen nu men det får bli i en senare blogg. 🙂

Aug 112010
 

Flattr this!

Nu ska jag visa hur man kan komplettera sin databas via ett sql-kommando.

Jag utgår från filmdatabasen återigen som man finner här.

Om jag dubbelklickar på tabellikonen för filmerna så finner jag dessa filmer:

Fälten vi har att tillgå i mitt fall är FilmID, Filmnamn och År.

Gå in under Verktyg/SQL och skriv följande sql-kommando:

INSERT INTO ”Filmtabell”(”FilmID”,”Filmnamn”,”År”)
VALUES(9,’Alien’,1979);

Namnen måste stämma överens med fältnamnen som finns i databasen och dessutom är fnuttar och dubbelfnuttar ett måste på sättet jag visar.

INSERT INTO ”Filmtabell”(”FilmID”,”Filmnamn”,”År”)

Den här raden anger vilken tabell som gäller och inom parentesena står fältnamnen.

VALUES(9,’Alien’,1979);

Posten vi vill lägga till är Alien som är gjord år 1979. FilmID kommer att bli 9 för denna filmen. Notera att man inte kan ha samma id som redan finns bland befintliga poster.

Nu kan man fråga sig vad nyttan är med ett krångligt sql-kommando som är jobbigare än att skriva in posten på vanligt sätt.

I detta exempel kommer detta att framgå.

Skapa en ny tabell. Jag väljer att skapa ”Filmtabell2”. Denna tabell ger jag fältnamnen FilmID2, Movie2 och Year. Att jag väljer engelska språket för två fältnamn är med vilje för att demonstrationen ska bli bättre. I denna tabell ska FilmID2 vara nyckel och det är integer som gäller här på samma sätt som i den andra tabellen. Skillnaden är att vi inte vill ha en räknare.

Lägg nu in lite poster i databasen:

Notera att jag själv matat in nyckeln eftersom vi inte har en räknare och jag väljer då värden som inte finns i den andra tabellen.

För övrigt så såg den andra tabellen ut så här för mig:

Gå nu upp i Verktyg/SQL igen och skriv in följande:

INSERT INTO ”Filmtabell”(”FilmID”,”Filmnamn”,”År”)
SELECT  ”FilmID2″,”Movies2″,”Year” from ”Filmtabell2”;

och resultatet blir detta i tabellen Filmtabell:

Vi har med annat ord sammanfogat data från två tabeller. Ett mycket värdefullt redskap om man har tusentals poster fördelat på två tabeller.

INSERT INTO ”Filmtabell”(”FilmID”,”Filmnamn”,”År”)

Denna raden säger att vi vill lägga in data i Filmtabell och det är fältnamnen FilmID, Filmnamn och År som datan ska matas in i.

SELECT  ”FilmID2″,”Movies2″,”Year” from ”Filmtabell2”;

Här väljer vi var datan ska hämtas ifrån och det är Filmtabell2 som gäller och då är det fältnamnen FilmID2, Movies2 och Year datan ska hämtas ifrån. Fältnamnen i FilmID2 måste stå i samma ordning som i Filmtabell. Skulle vi möblera om och skriva ”FilmID2″,”Year”,”Movies2″ på andra raden så hamnar filmnamnen i År-fältet.

Jul 282010
 

Flattr this!

Ska nu visa hur och var man skriver ett makro och allmänt hur det fungerar. Dessutom tänkte jag koppla makron till knappar i ett formulär för att få ett bra exempel. Samtidigt vill jag visa varningens finger för att hämta makron på måfå på internet för dom kan innehålla virus. Därför bör man ha någorlunda koll på vad man gör och bara besöka betrodda sidor.

Starta OpenOffice Base och skapa en ny databas. Skapa därefter en enkel tabell. Jag valde ID och Namn som fältnamn bara för att ha en tabell. Blir lättare vid senare tillfälle när vi ska göra ett formulär via guiden.

För att alla makron ska fungera så måste vi ändra på säkerhetsinställningarna i OpenOffice. Gå in under Verktyg/Alternativ och välj Säkerhet under OpenOffice.org och tryck sen på knappen Makrosäkerhet som bilden visar.

Här kan man välja hur hög säkerheten ska vara. Väljer man högsta säkerhet så kommer nästan inga makron alls att fungera. Vet man vad man håller på med så går det att skruva ner till lägsta säkerhet men rekommenderat är medelsäkerhet för då får man ett varningsfönster där man kan välja mellan aktivera eller inaktivera makron varje gång Base startas.

För att skriva vårt makro så går vi in under menyn Verktyg/Makron/Ordna makron/OpenOffice.org Basic.

Det är det markerade området vi ska jobba med. Min databas heter Makrotest.odb och har därför hamnat i listan. Väljer vi att jobba under det namnet så fungerar bara makrona just till nämnd databas. Därför är det bättre att jobba med Mina makron.

Börja med att trycka på pluset till vänster om Mina makron och vi får upp Standard och sen Module1.

Nu har vi ett makro som heter main att jobba med. Markera denna och tryck på Redigera.

Makrot main innehåller inte så mycket utan är bara ett skelett som inte gör något. Varje makro startas med sub och namnet på makrot, i detta fallet Sub main och slutas med End Sub.

Under End Sub kan vi skriva ett nytt makro. Skriv in följande:

Sub textmeddelande
Msgbox "Detta är en textruta"
End Sub

Stäng sen fönstret och gå in under Verktyg/Makron/Ordna makron/OpenOffice.org Basic igen så ser vi att vårt nya makro har tillkommit sen sist.

Nu ska vi göra en knapp i ett formulär som är länkad till makrot.

Skapa ett formulär via guiden. Det är formuläret som är det viktiga nu och inte tabellen. Välj sen att öppna formuläret i editeringsläget.

Tryck på knappen jag markerat och välj ett lämpligt ställe i formuläret att dra ut den till.

Dubbelklicka sen på den nya knappen för att få upp inställningarna. Under Allmäntfliken kan vi ändra etiketten till ett roligare namn än Kommandoknapp. Jag väljer Textruta.

Tryck sen på fliken Händelser. Det är här makrot vi skrev kommer in i bilden. Vi kan välja när makrot ska aktiveras, om det är vid fokusering av knappen eller om man trycker på musknappen. Jag tycker det är bra att använda alternativet ”Musknapp nedtryckt”.

Tryck på knappen med punkterna till höger och i följande ruta väljer vi knappen Makro. Bläddra nu till makrot textmeddelande som låg under Mina makron/standard/Module1 och tryck OK.

Som vi kan se så har vårt makro kopplats till funktionen ”Musknapp nedtryckt”, detta i egenskaperna till knappen vi skapade. Välj att spara formuläret nu och stäng det sen. Öppna nu formuläret och testa att trycka på knappen.

Denna ruta ska komma upp när man trycker på knappen.

Vi vill nu göra ett makro till som vi kopplar till en ny knapp. Gå in under makron i Verktygsmenyn igen. Detta makro är ett stäng formulär makro och detta betyder att formuläret kommer att stängas ner när man trycker på knappen.

Skriv in detta under det sista makrot (vågar inte använda stängformulär eftersom jag tvivlar på att åäö fungerar):

Sub CloseForm
ThisComponent.CurrentController.Frame.close(True)
End Sub

Nu ska det se ut enligt följande:

Skapa nu en ny knapp i formuläret i editeringsläget och testa att koppla denna knapp på samma sätt som föregående makro. På detta sätt kan man skriva makro efter makro i samma fil efter varandra med Sub och End Sub.

Testa nu och stäng ner hela Base, spara om det är behövs och starta programmet igen. Nu kommer det komma upp ett meddelande som visar att vi har makron inbakat i vår databas och det är en säkerhetsdetalj som OpenOffice.org har. Eftersom vi valde medelsäkerhet så får vi upp denna fråga.

Återigen, tänk på att säkerheten kan åsidosättas om man använder makron på felaktigt sätt. Mina exempel är skonsamma och gör inte så mycket men hämtar man hem färdiga makron från främmande sidor så bör man ha lite koll på vad dom gör så att ingenting otrevligt inträffar.

Jul 272010
 

Flattr this!

Det finns något som heter makron i OpenOffice.org som är ytterst värdefullt. Dessa kan användas oberoende om man använder Write, Calc, Impress eller Base. Makron används ofta för att automatisera jobb åt en som annars hade varit tidsödande.

Jag kommer  att visa hur makron fungerar i Base. Där kan man bl. a. koppla knappar till funktioner och det är bara fantasin som sätter gränsen för vad som är möjligt. I princip kan man få en självständig applikation av en Base-databas.

OpenOffice.org kör med sin egna Basic som kan liknas vid VisualBasic eller Delphi. Klarar man att programmera till dessa två program så ser man genast likheten. Makron är svåra att skriva och det är en brant inlärningskurva. Jag fick sitta i åtskilliga timmar för att förstå hur makron fungerar i Base. Programmeringen är en annan femma och jag har långt ifrån gett upp detta även om det ibland känns hopplöst. Nästa blogginlägg kommer jag visa hur makron skrivs och var dom skrivs och förhoppningsvis blir en och annan inspirerad.

Just nu håller jag på och bearbetar en bruksanvisning som är baserad på blogginläggen för att man på ett smidigare sätt ska kunna läsa allting i lugn och ro. Makron är den sista delen i Base som jag inte gått igenom i tidigare bloggar. Base delar kommer jag fortsätta att blogga om och det blir mer avancerat ju längre jag kommer och ställer därför högre krav på mig.

Att visa andra hur Base fungerar genom bloggarna är en morot som gör att jag inspireras till nya och mer avancerade blogginlägg och förhoppningen i framtiden är att bruksanvisningen ska bli komplett.


Jun 062010
 

Flattr this!

Ibland kan det vara intressant att få fram lite statistik från en databas, kanske räkna summan av flera poster, göra uträkningar av olika slag. I mitt exempel utgår jag från exemplet med filmdatabasen som jag visade här.

Jag vill räkna hur många olika genrer varje film har.

Ett formulär är inte nödvändigt för denna uppgift men kan underlätta för att knappa in uppgifter i databasen. I så fall kan denna också behövas.

Jag valde att knappa in en hel del data i min filmdatabas för att få lite utslag:

Dessutom med genre som passar dessa filmer:

I filmen Den gode, den onde, den fule som bilden ovan visar valde jag att sätta tre olika genrer på för att få lite bättre resultat i slutändan.

När allting är klart så vill vi räkna ut hur många genrer varje film har.

I huvudfönstret väljer vi ”Sökningar” till vänster och sen ”Skapa sökning i SQL-vy”.

Där skriver vi in följande:

eller klistra in följande:

SELECT ”Filmtabell”.”Filmnamn”, COUNT(”Genretabell”.”Genre”) FROM ”FilmGenre”, ”Filmtabell”, ”Genretabell”
WHERE ”FilmGenre”.”FilmID” = ”Filmtabell”.”FilmID” AND ”FilmGenre”.”GenreID” = ”Genretabell”.”GenreID”
GROUP BY ”Filmtabell”.”Filmnamn”

och när vi väljer kör så får vi detta resultat:

I resultatet så har vi först Die Hard där det står en 2:a, alltså action och komedi. En 3:a på den gode, den onde, den fule som står för västern, komedi och action, alltså 3 stycken.

Här är förklaringen till vårt sql-kommando:

SELECT ”Filmtabell”.”Filmnamn”,

Vi vill få fram filmnamnen i sökningen och som ni kan notera så har jag tabellnamn.fältnamn. Detta är ett måste då vi rotar i flera tabeller i samma fråga. Två tabeller kan nämligen ha fältnamn som är samma och detta skiljer dessa åt.

COUNT(”Genretabell”.”Genre”)

Vi vill ha en uträkning baserat på fältet genrer i tabellen Genretabell.

FROM ”FilmGenre”, ”Filmtabell”, ”Genretabell”

Tabellerna som används i frågan deklareras. I detta fallet är det samtliga tre som används.

WHERE ”FilmGenre”.”FilmID” = ”Filmtabell”.”FilmID” AND ”FilmGenre”.”GenreID” = ”Genretabell”.”GenreID”

Vi kopplar Filmgenre med respektive i Filmtabell och Genretabell. Detta måste göras för att kunna utnyttja alla tabeller.

GROUP BY ”Filmtabell”.”Filmnamn”

Eftersom vi håller på med en gruppfunktion så behövs GROUP BY.

Nu vill vi ha listan sorterad. Jag skulle vilja ha listan sorterad på detta viset:

alltså med högsta numret överst och sen fallande. Som jag visade i sql-skolan del 1 så kan man köra med ORDER BY Filmtabell.Filmnamn om man vill ha listan sorterad efter film. Det är bara att skriva denna rad under GROUP BY-raden.

Nu vill vi att uträkningen ska sorteras och då är det COUNT(”Genretabell”.”Genre”). Detta går inte genom att skriva ORDER BY COUNT(”Genretabell”.”Genre”) utan vi måste fixa ett alias.

COUNT(”Genretabell”.”Genre”) AS räkna

Nu motsvarar ”räkna” hela den långa raden. Därefter är det bara att skriva detta under GROUP BY-raden:

ORDER BY räkna DESC

Desc för att vi vill ha fallande sortering.

Därför blir den kompletta frågan så här:

SELECT ”Filmtabell”.”Filmnamn”, COUNT(”Genretabell”.”Genre”) AS räkna FROM ”FilmGenre”, ”Filmtabell”, ”Genretabell”
WHERE ”FilmGenre”.”FilmID” = ”Filmtabell”.”FilmID” AND ”FilmGenre”.”GenreID” = ”Genretabell”.”GenreID”
GROUP BY ”Filmtabell”.”Filmnamn”
ORDER BY räkna DESC

Jag kommer att fortsätta med statistik i senare bloggar. I denna har jag valt COUNT (räkna) men det finns även summa, medelvärde och annat smått och gott.

Maj 242010
 

Flattr this!

Ibland vill man styra hur inknappningen av data sker. Det kan vara att man inte vill att användaren ska kunna skriva siffror och att bara ett visst antal tecken får skrivas in.

Jag kör med exemplet jag visade här.

Följande exempel är ett adressregister och vi har redan skrivit in ett antal data i tabellen. Nu vill jag begränsa så att man t.ex. inte kan skriva in 0-9 där förnamnet osv. är utan bara tillåta bokstäver, kanske till och med att första bokstaven är versal och dom övriga gemener.

Tabellen heter Namnregister och nu ska vi skapa ett formulär. Tryck på formulär till vänster och välj att skapa via guiden. Välj att alla fält utan ID ska vara med.

Tryck nästa tills ni kommit till punkt 5. Där väljer ni kolumner.

Tryck nästa på övriga frågor och välj ett passande namn för formuläret och tryck ”Färdigställ”

Nu har vi ett bra formulär som vi kan jobba med:

Stäng nu detta fönster och välj Formulär till vänster. Högerklicka på ikonen och välj Redigera för att komma i designläget.

Som ni ser så har vi ett extrafönster som heter Formulärdesign. Finns den inte tillgänglig så gå in i Visamenyn och välj Verktygsrader och sen ”Formulärdesign”. Tryck på knappen jag ringat in.

Följande fönster heter Formulär-Navigator och är väldigt användbart. Detta fönster är något som man ska lägga på minnet för det underlättar när man ska jobba med designen. Varje rad i fönstret motsvarar en sak i formuläret. Det kan vara antingen inskriven text, textruta, listbox m.m. Allt kommer med här.

Om ni trycker på dom olika sakerna i fönstret så markeras dessa delar i formuläret. Vanligtvis är texten grupperad med textrutan men här kan vi markera enbart textrutan. Detta går även att göra genom att hålla in ctrl på tangentbordet samtidigt som man trycker på textrutan men med navigatorn får man bättre översikt över vad som finns.

Tryck först på txtFörnamn och högerklicka sen på rutan som markerades. Där väljer ni ”Ersätt med” och väljer ”Maskerat fält”.

Här ser man fördelen med navigatorn. Textrutan ser som vanligt ut så man kan tro att ingenting har ändrats men som man kan se i navigatorn så har det ändrats:

Det står ABC framför alla textrutor utan txtFörnamn där det står LN. Detta beroende på att det är ett maskerat fält.

Gör nu likadant på rutorna txtEfternamn, txtPostnummer och txtPostadress.

När allt är klart så ska vi markera txtFörnamn igen. Här vill vi att förnamnet ska börja med stor bokstav. Högerklicka på txtFörnamn och välj ”Egenskaper”

Här får vi upp en ruta med tre flikar, Allmänt, Data och Händelser.

Rutan jag har markerat är den som vi ska använda, möjligtvis använda rutan under också.

Det finns koder för vad som ska skrivas in här. N står för number (nummer), a för bokstav (versal och gemen), A för versal bokstav osv.

Jag räknar med att namn inte är längre än 15 tecken så därför blir det Aaaaaaaaaaaaaaa.

Tryck sen på txtEfternamn och txtPostadress och gör likadant. Efternamn, adress och postadress borde räcka med 15 tecken också.

När det gäller txtAdress så har jag inte kommit på hur man gör eller om det ens går. Problemet är blanksteg ihop med både bokstäver och siffror som inte verkar gå ihop. Har jag blanksteg med bara bokstäver så fungerar det. Får luska mer i detta.

Nu kommer det roliga med postnumret. Här vill vi att det automatiskt ska bli typ 543 23, alltså 3 tecken, mellanrum, 2 tecken.

Här skriver ni in följande:

Först 3 stycken NNN och sen ett L som står för ett tecken som inte går att skriva. I detta fallet blir det mellanrum. Sen är det 2 stycken NN. Notera att jag även har fyllt i raden under. Satte 3 stycken understreck, mellanrum och ytterligare 2 understreck. När detta har gjorts så hamnar dessa streck även i textrutan som vi har. Detta är enbart för att den som knappar in data ska veta vad som gäller.

När allt är färdigt stå testa och se hur resultatet blir genom att trycka på den inringade knappen:

Det är bara att knappa in lite olika data och se så allting stämmer.

Maj 212010
 

Flattr this!

Tar mig friheten att demonstrera en bra sak man kan göra i Write trots att detta hör till Påvels bit. 😉

Det är kopplingen mellan Write och en Base-databas. Alla delar i OpenOffice är väl integrerade med varandra och det är därför lätt att dra fördel av detta. Följande exempel illustrerar detta på ett bra sätt.

Jag vill skriva brev till mina nära och kära och alla dessa brev ska nästan se likadana ut. Det som skiljer är adressen och namnen. Antingen kan jag skriva flera dokument och kopiera och klistra in och sen ändra på namnen där det behövs. Detta är dock ett jobbigt sätt om man exempelvis har gjort ett mailregister i Base.

Så här ser exemplet ut i Write:

Detta brev kanske inte innehåller så mycket men illustrerar ändå väldigt bra.

Först går vi in i Base och skapar en ny databas. Tänk nu på att registrera databasen, detta för att alla delar i OpenOffice ska kunna ta del av databasen. Det är detta som är grejen med registreringen. Jag sparade min databas som ”Adressregister_exempel”.

Skapa följande tabell genom att trycka på tabell till vänster och sen gå in i designvyn:

Stäng sen fönstret och spara med lämpligt namn.

Sen ska vi skriva in lite data för att exemplet ska fungera:

Som ni ser så har vi tre poster här och det är dessa vi ska skicka brev till.

Öppna nu OpenOffice Write (Ordbehandlare) och skriv in följande som ska användas till alla brev:

Nu ska personnamnen in och då är det Base databas som gäller. Tryck antingen F4 eller gå upp i menyn Visa och välj ”datakällor”.

Nu poppar det upp en databasdel i Write upptill och här kan man navigera till sin databas och som ni kan se på följande bild så är min databas med och heter Adressregister_exempel som jag nämnde tidigare tillsammans med övriga exempel jag tidigare visat:

I detta fallet är det dock adressregistret vi är intresserade av och väljer därför den jag markerat på bilden över. Tryck på trekanten till vänster och det kommer upp tabeller eller sökningar. I detta fallet väljer vi tabeller och får då upp tabellnamnet tillsammans med namnen vi knappade in i databasen till höger:

Inom de områden jag ringat in ska vi trycka med musen och dra ner till dokumentet som vi gjorde.

Så här ser det ut när jag dragit ner dessa:

Det blir långa namn och ska man tyda ett av namnen vi drar ner i dokumentet så betyder exempelvis Adressregister_exempel.Namnregister.Förnamn att det är Adressregister_exempel som är databasen där tabellen Namnregister används och att fältet är Förnamn.

När detta är klart så går vi upp i Arkiv-menyn och väljer ”Skriv ut” och får då upp följande fråga:

Här väljer man Ja i detta fallet.

För att testa utan att slösa en massa papper och toner/bläck till skrivaren så kan man välja ”fil” som Utdata och spara denna fil på lämpligt ställe. När man sen öppnar filen så är den på tre sidor, en med Anders Jansson, en med Sven Hultgren och en med Daniel Svensson.

Maj 202010
 

Flattr this!

Ofta vill man ha en egen ordning när man trycker på tabb i ett formulär, kanske utesluta något fält från tabbandet.

Vi koncentrerar oss på filmdatabasen med genre som jag visade här.

Om man dubbelklickar på filmformuläret som jag ringat in på bilden så får man fram formuläret och kan börja jobba men så är inte fallet här. Inget av fälten är markerade utan jag är tvungen att klicka i något fält för att kunna skriva in en post.

Stäng nu detta fönster och gå in i designläget genom att vänsterklicka på den inringade ikonen och tryck ”redigera”.

För att fixa tabbordning och sätta fokus på ett fält så behöver vi komma åt en meny som är dold.

Gå in i Visamenyn och välj Verktygsrader och sen Formulärdesign som bilden under visar:

Formulärdesign kommer nu upp som ett eget fönster som ser ut så här:

”Formulärdesign” är ett av dom redskap man använder mest. Jag kommer att återkomma till detta i en senare blogg.

Vi kommer att fokusera på knapparna jag har ringat in.

För att välja vilket fält som ska vara i fokus när vi dubbelklickar på vårt formulär så markerar vi ett av fälten och trycker på den andra knappen jag har ringat in. Det står ”automatiskt fokus för kontrollelement” om man håller muspekaren över knappen.

Jag väljer ”Namn” eftersom filmens namn är bra att börja med. Nu kommer detta fält att vara fokuserat när vi dubbelklickar på formuläret.

Nu ska vi ändra tabbordning och personligen vill jag inte ha med underformuläret i tabbordningen utan kommer att utesluta denna.

Markera återigen ett av fälten ”namn” eller ”år” och tryck på den första knappen jag ringat in och följade ruta kommer upp:

Här kan man ändra på tabbföljden på Namn och År genom att trycka på knapparna till höger. Egentligen har vi för få fält att växla mellan. Hade man haft 15 olika och man hade flyttat på dessa rutor så hade tabbordningen spelat mer roll.

Notera att vi inte kan ha med vårt underformulär i denna tabbföljd utan detta kommer att ha en egen tabbordning. När ni är färdiga med tabbordningen så tryck OK.

Dubbelklicka nu på underformuläret och egenskaperna för underformuläret kommer upp:

Här kan man ange om underformuläret ska ingå i tabbordningen. Jag väljer ”Nej” på denna fråga eftersom jag inte vill ha med detta när jag tabbar mig fram. Står det redan nej så ändra till ja och sen nej igen. Fråga mig inte varför men det verkar som att det kan behövas en sådan manöver för att förändringen ska ske.

Stäng nu formuläret. Glöm inte att spara formuläret när frågan kommer fram.

Dubbelklicka nu på formuläret igen och ni ser att Namn är fokuserat precis som vi ville. Tryck tab på tangentbordet och det kommer att växlas mellan Namn och År och underformuläret Genre utesluts.

Detta hindrar en dock inte från att fokusera på Genre utan en enkel knapptryck på detta och vi har markerat detta fält.