Skapa en egen databas med VB
Förord
Ganska snart kommer man till en punkt när man vill lagra information. För att kunna lagra något så krävs det att man skapar eller använder en befintlig fil. Denna fil kan antingen vara en s.k. flat textfil eller en fördefinerad fil innehållande poster, samt en databas som används via en databasmotor såsom JET eller ODBC. I detta exemplet kommer vi att använda oss av en binär flat textfil. Detta innebär att det är en ren textfil som du kan titta på i din texteditor, men varje record har fast längd på alla poster. Detta kallas ofta för "fast recordlängd". Innan vi tittar på ett exempel som gör allt det du skulle vilja kunna, vill jag passa på att förklara några saker som kan vara bra att veta. Varje fil som accessas antingen genom att öppna eller skapa den på något sätt via Visual Basic, kräver ett filnamn och ett filnummer. Eftersom Windows95 har gett oss denna fantastiska möjlighet till att använda så långa filnamn som (255 tkn), så går det äntligen att döpa dokument, filer och annat till namn där man ser vad filen egentligen innehåller. Två andra viktiga aspekter man inte får glömma är radering av en post samt i vilken typ av miljö man skall köra.Innehåll
»»
»
»
»
»
Relaterade artiklar
» Skapa en egen databas med VB» Skapa en egen databas med VB
Filnamn
När du öppnar eller skapar en fil måste filnamnet vara skrivet på ett sådant sätt att funktionen hittar dit. Är det ett program som du vill kunna köra på olika maskiner, kan det vara bra att inte "hårdkoda" sökvägar, eftersom användaren kan installera programmet vart som helst. Skall du placera dina filer i samma katalog som programmet, kan det vara bra att använda app.path. Denna inbyggda funktionen i VB presenterar sökvägen där ditt program finns och därför kan det inte bli fel.
Tips!. Lagra inte dina databaser i samma katalog som programmet, utan välj gärna att spara dessa i en underkatalog. På detta sätt får du en bättre överblick på dina filer, och slipper blanda ihop allt som du har lagrat.
Filnummer
Ett filnummer kan vara en siffra som du själv bestämmer, alternativt låter du datorn bestämma ett ledigt filnummer som du kan använda. Filnummer brukar man ange genom att skriva exempelvis #1 eller kanske #2. Har du väldigt få filer öppna samtidigt kanske du kan använda detta, och det är inget problem att ange de själv, om du håller reda på vilket nummer som hör till vilken fil.Om du däremot hanterar många filer så kan det vara bra att använda FreeFile funktionen. Denna funktion håller reda på antalet filer som just nu är öppna. När du ber att få ett filnummer av funktionen kommer du att få ett nummer som inte tidigare är använt för att öppna, eller skapa filer. När du vill ha ett filnummer, kan du exempelvis skriva Register# = FreeFile .
Tips! För att se hur många filer som är öppna, kan du använda FreeFile och därmed får du det nummer som inte används. Har du fyra filer öppna, kommer FreeFile att tilldela 5 som nästa tillgängliga filnummer. På detta sätt kan du kontrollera om du missat stänga någon fil.
Radera post
När man arbetar med poster så händer det givetvis också att ibland blir det fel. Då behöver man antingen radera eller ändra innehållet. Att radera information ur en textfil kan vara lite klurigt, men jag skall visa hur du kan lösa detta på ett lätt och smidigt sätt, utan att för den delen radera posten fyskiskt från filen.Tips! Har man kontroll på de (raderade) posterna, kan man även låta programmet ta reda på den raderade posten för att sedan invänta då användaren skall skapa en ny post, och ersätta den nya postens information med den (raderade) posten.
Arbeta lokalt eller i nätverk
Vi bör även tänka på att det finns två miljöer som kan användas, antingen singelmiljö eller nätverksmiljö. Oftast skriver man dessa databaser för singel, men kan även användas som kompletta databasmotorer i nätverk. Det som skiljer då, är att man måste öppna filen i delat mode, vilket får till följd att flera användare kan öppna, läsa och skriva i samma fil samtidigt.Att tillåta användare skriva i databaser samtidigt i nätverk är det som oftast används idag men givetvis finns det tillfällen då det inte behövs. Exempel på det är om du har ett program som du kör på din egna dator såsom telefonregister eller liknande.
Det finns även något som kallas postlåsning och sådant går också att använda sig av i denna teknik som jag kommer presentera. Jag skall försöka gå in på det lite senare.
Planering och normalisering av databaser
Det första man skall tänka igenom, är vad som skall finnas i den databasen eller databaserna du skall bygga. Det finns ett uttryck "normalisering", som i korthet innebär att det är bättre med flera mindre databaser än få databaser som innehåller samma information.
Scenario
För att förklara detta så skulle vi kunna ta det klassiska "telefonlista" databasen, som säkerligen många har gjort eller försökt att prova på. Vi har då information om flera personer, adress, gata mm samt hur dessa kontaktas. Idag så är det ju så att det finns inte bara hemtele och arbetet längre, utan många har även biltelefoner, fax , e-mail osv. Här (ovan till höger) har vi en klassisk bild på hur man normaliserar informationen i en databas. Lagrar vi allting i en databas, kommer säkert Anders att finnas på flera ställen i databasen. Först flyttade han hemifrån, sen köpte han biltelefon, och nu har han även en fax.
Slutligen fick hans bror abonnemanget på hans gamla biltelefon och köpte en ny. Därmed måste vi även kunna radera denna post. Två veckor senare köpte han ny, med ett nytt telefonnummer. Och så håller det på i samma andra. Detta är scenario som man får tänka igenom och gardera sig emot.
Genom att nu använda en databas för Anders och en databas för hans nummer, har vi normaliserat datat så det inte skall dubbellagras. Därför skall vi nu bygga en databas som baseras på denna typ av informationsmängd.
Personregister
Artikelregister
Relationer
Detta person och artikelregister måste nu även kunna samverka med varandra. För att göra detta skapar man en s.k. relation. Som du ser ovan, så förekommer en sak gemensamt, nämligen PostId. Och i detta fallet kommer en person ha flera artiklar, men flera artiklar kan endast höra till en person. På detta sätt har vi nu sett till att en koppling finns mellan de två filerna.
Nyckel
PostId kommer vara den nyckel som visar att vilka postrader som hör ihop. Därför kan man inte bara ta ett nytt postid ur luften när man adderar en person, för då kan ju artiklarna inte kopplas till endast en person. Därför får vi lösa detta på annat sätt. Därmed bör vi även skapa en kontrollfil, eller .ini fil som håller reda på vilken nummer som sist användes, för att inte tappa bort oss.
Dags att börja skriva program
I och med att vi bestämt hur datainformationen skall finnas lagrad, kan vi nu börja med att definera upp detta i vårt program. Det enklaste och mest överskådliga sättet att göra detta på är att skapa en post innehållande information. Detta kan du göra med en TYPE deklaration. Genom att ange en eller flera sådana, kommer du även senare i programmet få tillgång till dess egenskaper, som i detta fallet är de postnamn som finns angivna i deklarationen.
Obs! Koden på denna sida skall placeras i en bas-modul. All kod som skall sparas i din modul anges med fetstil och är markerad med blå färg.
TYPE PersonData
Raderad AS STRING * 1
Postid AS STRING * 5
Namn AS STRING * 30
Gata AS STRING * 30
Postnr AS STRING * 5
Postadr AS STRING * 30
END TYPE
TYPE ArtikelData
Raderad AS STRING * 1
Postid AS STRING * 5
NrTyp AS STRING * 12
Nummer AS STRING * 15
Bildnamn AS STRING * 12
END TYPE
Ovan ser du nu deklarationerna för de två databaser (även kallat tabeller), som innehåller information om vad varje fält heter samt dess längd. Nu skall vi se till att dessa deklarationer kan användas i alla former och moduler. Därför skall vi deklarera dessa med deklarationen GLOBAL, som tillåter oss att använda dessa oavsett vart i koden vi befinner oss.
Global Person As PersonData
Global Artikel As ArtikelData
Vi passar även på att använda oss av en underkatalog för att spara datafilerna i. Denna lagrar vi som ett fast värde, så slipper användaren bekymra sig för vart filerna skall placeras.
Global Const DataLager = "\DATA\"
Som ett alternativ, kan det vara bra att veta i vilken miljö programmet skall köras. I detta exempel så säger vi att det är lokalt, men skulle även kunna varit i ett nätverk. I Form_Load kommer vi att ställa in denna som False.
Global PlatformNet As Boolean
Vi måste också se till att hålla reda på recordnummer som tilldelas när filerna öppnas, skapas eller på annat sätt används i programmet. Därför skapar vi variabler som kan användas från alla rutinerna.
Global dbPerson As Long
Global dbArtikel As Long
Vi gör även enklast i att hålla reda på vilket PostId som är det sist använda, så slipper vi öppna den filen hela tiden. Denna används för att knyta samman personen med dess artiklar.
Global dbKey As Long
I nästa artikel är det dags att börja skriva funktioner och rutiner runt vår planerade databas.
0 Kommentarer