AJAX ger förslag och söker automatiskt upp ämnen ur en databas

Jag har börjat titta på s.k web applications och att bygga web tjänster med hjälp av AJAX. Jag skall erkänna att jag är ganska novis på området än så länge, även om jag sysslade med webbutveckling i början av 2000-talet. Tekniken som helhet har funnits ett tag och det är helt klart en mycket intressant ansats. Helt plötsligt öppnas en helt ny värld som ger dig tillgång till massor av data som du kan använda dig av i olika sammanhang.  På min hemsida har jag skrivit mer om detta. (Klicka här om du vill läsa inlägget). Den kanske mest kända webb tjänsten för de flesta av oss användare torde vara sökmotorn Google. När man är på deras hemsida och t.ex skall söka upp något, så använder man bland annat en autocomplete funktion. När man börjar skriva in något i Googles Sök-rad, ger den förslag till dig vad du kan söka vidare på. Vi som användare upplever ofta detta som tidsbesparande. Har du arbetat med något utvecklingsverktyg, så känner du också igen tekniken.

Ett exempel på en web tjänst

Efter mycket knåpande och trixande har jag lyckats bygga en webb tjänst som bygger på samma princip som Google (autocomplete). Tjänsten jag har lyckats konstruera ger förslag på PHP-funktioner. De finns hittills över 4 000 funktioner tillgängligt i programmeringsspråket PHP. När man börjar skriva in en bokstav, ges förslag till på en funktion. I ärlighetens namn ska erkännas att jag lyckats anpassa ett övningsexempel från en lärobok om AJAX och få exemplet att fungera på min blogg. (se under Referenser i slutet av denna artikel för länk till boken)

Testa!

Klicka här om du vill testa exemplet. När du kommer till sidan och för att läsa mer om en funktionen i PHP, så skriver man in en bokstav i textrutan. Nästan ögnblickligen kommer en dropplista fram och man kan utifrån den välja en funktion i PHP som man kan läsa mer om, genom att klicka.

Referenser:

Share

Hur man kan beräkna Diskontering i en ACCESS-fråga

Nivå: Avancerat

De flesta av oss har väl i något sammanhang kommit i kontakt med begreppet Diskontering. I korthet betyder diskontering att man beräknar en nuvärdeskostnad av en kostnad som kommer att inträffa om t.ex fem år. Principen för hur man kan beräkna framgår av denna post.

Konstruera en formel för beräkning av diskontering.

För att kunna beräkna en nuvärdeskostnad, måste man veta följande:

  • c = framtidskostnad
  • x = nuvärdeskostnad (den vet vi inte, utan det är den vi ska räkna fram!)
  • r = diskonteringsräntan, i Sverige brukar praxis vara att man använder 3 %
  • n = antalet år i framtiden som kostnadshändelsen inträffar

Vi ska inte fördjupa oss i de ekonomiska omständigheterna kring diskontering, men det kan noteras att de inte har något med inflationen att göra, utan man tar bara hänsyn till tidsaspekten. Nuvärdet som beräknas är i dagens penningvärde.

Utifrån denna information kan formeln skrivas:

c=x/(1+r)

Ett exempel: en kostnad på 20 000 kr inträffar om 10 år och nuvärdesberäknas med en diskonteringsränta på 3 procent enligt följande:

20000/(1+0,03)10=14882 kr.

Konstruera SQL-frågan i ACCESS

Vi har en tabell i ACCESS, som heter Kostnader. Den ser ut enligt följande:

Exempel på Access-tabell

Klicka för större bild! Exempel på en Access-tabell

 

 

 

 

 

 

 

 

 

 

 

 

 

För att öka på svårighetsgraden i exemplet skall vi beräkna en diskonteringskostnad för varje datum i tabellen. Som framgår av bilden har varje enhetskostnad två decimaler. I vår beräkning vill vi ha två decimaler och vi ska använda den inbyggda funktionen Format i Access för detta.

Lösningen: Med hjälp av Uttrycksverktyget i Access ska vi nu skapa variabeln Diskontering.  Vi ställer oss på en tom kolumn i designläge i Access och skriver in följande uttryck i uttrycksverktyget (se skärmdumpen nedan):

DiskonteringSQLUttrycksverktyg

 

 

 

Diskontering: Format([ENHETSKOSTNAD]/(1+0,03)^5;”0.00″)

Några kommentarer till koden: Först talar vi om att vi skapar ett nytt fält i Access, Diskontering. Med funktionen Format anger vi att vi vill ha två decimaler i våra beräkningar (se uttrycket i slutet av satsen, där vi anger  ”0.00”, som talar om detta). Enhetskostnad innebär att vi skall beräkna varje enskilt värde i fältet Enhetskostnad i Access-tabellen. 0.03 anger diskonteringsräntan på 3% och tidshorisonten är här satt till 5 år.

Färdiga resultatet

Det färdiga resultatet av beräkningen visas av nedanstående skärmbild(klicka för större bild!):

DiskonteringSQLUttrycksverktyg2

 

 

 

 

 

 

 

 

 

 

Vi har nu genomfört en beräkning för varje enskild post i tabellen. Beräkningen framgår av fältet Diskontering 

Share

Hur man skapa namn på veckodagar med hjälp av funktionen Weekday i Access

Nivå: Avancerad

Inledning

Som bekant har Access en del inbyggda funktioner som är mycket användbara. I den här bloggposten ska jag gå igenom hur man kan använda en utav dem, den inbyggda funktionen WeekdayAntag att vi har en tabell med ett fält som heter Datum. Vi antar att fältet är ett korrekt formaterat datumfält i Access och det ser ut enligt följande: 2014-09-10. Vi kan nu ta hjälp av den inbyggda funktionen Weekday i Access för att fastställa vilket veckodags namn våra datum har.

Funktionen Weekday

Om vi tittar på beskrivningen av funktionen så ser vi att den returnerar en siffra mellan 1 och 7, givet ett datumvärde. Veckodagarna definieras i funktionen enligt följande:

1 = Söndag

2 = Måndag

3 = Tisdag

4 = Onsdag

5 = Torsdag

6 = Fredag

7 = Lördag

Vad som är viktigt att veta är att om vi använder funktionen i en Access-fråga, så returneras enbart en siffra, givet ett datum. Jag skall senare visa hur man kan formatera siffrorna till namn på veckodagar, genom att använda ännu en inbyggd funktion i Access, funktionen IIF.

Konstruktion av den första frågan

Det första som måste göras är att tilldela varje datum, en siffra. I Access-uttrycksverktyget definierar vi frågan. Dag, kommer att bli det nya namnet på fältet vi skall skapa i tabellen. Vi definierar funktionen och skriver in syntaxen för den. I skärmbilden nedan ser du hur det ser ut.

WeekDays1

 

Kommentar: När vi kör frågan, kommer vi se det nya fältet DAG, med en siffra, beroende av vilket datum som hittas.

Konstruktion av den andra frågan

I den andra frågan skall vi definiera veckodagarna. Vi vet vilken siffra som representerar vilken dag. Genom att utnyttja detta, kan vi definiera IIF-satsen. I uttrycksverktyget skriver vi in uttrycket. Nedan ser du hur detta görs.

WeekDays2

 

Kommentar: Vid en första anblick så kan det se avancerat ut, med det är det inte. Det viktiga är bara att omsluta uttrycket med lika många parenteser, till höger respektive vänster.

Färdiga resultatet

Nu är det dags att testköra! Vi startar frågan som vi konstruerat. Har vi gjort rätt skall det se ut som på  bilden nedan:

WeekDays3

 

Kommentar: I bilden ovan ses fälten DATUM, DAG och VECKODAG. Fältet Datum fanns med i tabellen.Vad som är viktigt när det gäller datum, är att datumen måste vara korrekt formaterade, annars kommer de att skapa ett fel. Fältet DAG, skapade vi med hjälp av funktionen Weekday. Tänk på att funktionen  skapar ett nummer för respektive veckodags namn. Med hjälp av IIF-funktionen kan vi slutligen till dela varje siffra ett meningsfullt namn, t.ex Måndag, Tisdag, Onsdag osv.

Share

Hur du fastställer en persons kön utifrån dennes personnummer i Access

Nivå: avancerat

Ibland har man inte tillgång till personers kön utan bara tillgång till personens personnummer. Nu är det ganska enkelt att, utifrån denna information fastställa en persons kön. I denna bloggpost skall jag ge ett exempel på hur man kan göra, genom att använda de inbyggda funktionerna  IIF,  Left och Right i Access.

Det svenska personnumret skrivs vanligtvis efter formatet 121212121212, dvs det är tolv tecken långt. Det första vi måste göra är att förstå hur det är uppbyggt. Om du är osäker, rekommenderar jag att du går till Skatteverkets hemsida för mer information. De har en mycket bra beskrivning över hur personnumret fungerar.

Steg 1 – Funktionen Left

Vad som är viktigt är de fyra sista siffrorna av ett personnummer. Av dessa fyra sista siffror är det den näst sista siffran som är viktig. I vårt fall blir det den elfte siffran. All udda siffror är män, dvs. 1,3,5,7,9 och alla jämna siffror är kvinnor, dvs. 0,2,4,6,8. Genom denna kunskap kan vi nu konstruera en lösning. Det första vi gör är att konstruera en fråga i Access, som använder funktionen Left. Vi skriver uttrycket så att de elva första siffrorna från vänster räknat hämtas och vi lägger dessa värden i en kolumn som vi kallar PNR01. (se nedanstående skärmbild)

FunktionenLeft11

 

Steg2 – Funktionen Right

Nu när har vi skapat fältet, PNR01, skall vi frilägga den sista (elfte!) siffran helt i fältet PNR01 och lägga dessa värden i ett nytt fält som heter Sex01.  Vi gör detta genom att använda funktionen Right. Funktionen right hämtar värden från höger räknat.  Anledningen till att vi gör detta är att vi enkelt ska kan utvärdera, om de är udda eller jämna siffror i fältet Sex01.(se nedanstående skärmbild)  

FunktionenRight

 

Steg3 – IIF-satsen

I detta steg bestäms könet på individerna beroende på om siffran är jämn eller udda i fältet Sex01. Vi löser detta genom att konstruera en IIF-sats. Nedanstående IIF-sats kanske upplevs som avancerad, men egentligen är det enkel logik. Det som är viktigt är att man måste vara noga med de olika tecknen, t.ex parenteser och citat-tecken så man har lika många vänster som höger parenteser i uttrycket. (se nedanstående skärmbild)

IIF-satsen Kön från PNR

 

Steg4 – slutresultatet

I nedanstående skärmbild ser vi den färdiga lösningen med fältet Sex01 som har den elfte siffran i personnumret, udda eller jämn, och fältet Sex02 där vi har utvärderat om det är en man eller kvinna, genom IIF-satsen i Steg3. Notera att fältet Sex02 har ”m” om det är en man och ”kv” om det är en kvinna.

IIF-satsen Kön från PNR - 2

Kommentar

Genom att först bryta ner frågeställningen och översätta den i tre delsteg kan vi tämligen enkelt konstruera en lösning, som skapar en individs kön i ett personnummer, genom att använda funktionerna Left, Right och IIF i Access.

Share

Låt Access skriva dokumentationen till ett Excel-ark

Nivå: Avanderad

Inledning

Jag har i ett tidigare inlägg visat principen för hur man kan göra för att automatiskt skriva sin dokumentation till ett Word-dokument.  I den här bloggposten tänkte jag visa hur man skriver sin dokumentation till ett Excelark istället. Något som är nog så viktigt, men ack så tråkigt, är att skriva dokumentation för de projekt du arbetar med. Jobbar du med projekt, så är dokumentation en viktig sak att lägga ner tid på. Anledningen är enkel: man glömmer ganska fort vad man gjort! Att ha färdiga rutiner för hur man skall dokumentera viktiga delar i projektet är helt avgörande, om dokumentationen skall bli av eller inte. Man kan dokumentera på flera olika sätt.  I den här artikeln ska jag beskriva principen för hur det går till.

Antag följande. vi har en Access-databas med dagsnoteringar över börspriser för råolja. Vi har lagrat alla våra data i en Access-tabell som heter Crude2013. Tabellen innehåller fältnamn, antal poster, värden etc. Vad vi vill göra är att dokumentera följande:

  • Datum och klockslag när vi gjorde dokumentationen.
  • Databasens namn och sökvägen dit
  • Tabellens namn och när den skapades
  • Tabellens namn och när den senast uppdaterades
  • Antal poster i tabellen
  • Antal fält
  • Fältens namn

Programkoden i Access

När du startat Access går du in i kodeditorn genom att trycka tangentenkombinationen ALT+F11. Väl inne i editorn är det första som måste göras är sätta referenserna. Förutom de sedvanliga referenserna, måste man sätta följande referenser:

  • Microsoft DAO 3.6 Object Library 
  • Microsoft Excel 12 Object Library  (i detta fall Excel 2007).

Nu är de dags att titta på koden!

AccessExcel1

 

Kommentar: I det första kodblocket  händer inte så mycket, vi definierar de olika objekten som skall användas för DAO och Excel. Vi talar också om var Excelarket finns, genom att ange sökvägen till katalogen. Vi anger också att data skall skrivas in på rad två i Excelarket. Notera att i detta exempel måste Excelfilen finnas i aktuell katalog.

AccessExcel2

Kommentar: Nu är det dags att skriva ut data till Excelarket.  Genom att använda IsEmpty och Offset kan man styra Excel så att data kommer att skrivas till en på raden med den första tomma cellen. På så sätt kan man dokumentera flera händelser till ett och samma Excelark. När data är utskrivet skall data sparas Excelarket, vidare skall vi ta bort objektvariablerna.

AccessExcel3

Kommentar: Nu återstår bara att meddela användaren resultatet och hur det gått. Om vi lyckas, så får användaren ett meddelande om detta. Koden avslutas med sedvanlig felhantering.

Slutresultatet i ACCESS

I nedanstående skärmdump kan du se hur slutresultatet ser ut när vi kört ovan beskrivna procedur från ett Access-formulär.

AccessExcel4

 Slutresultatet i Excel

Nedan ses hur data är skrivet till Excearket!

AccessExcel5

Slutsats

Både Access och Excel är mycket kraftfulla program som fungerar utmärkt tillsammans.  Excel fungerar utmärkt om man vill använda programmet när man skall dokumentera sitt projekt.

 

Referenser på nätet

VBA Language Reference

Share

Låt Access automatiskt skapa din dokumentation som ett Word-dokument

Nivå: Avancerad

Inledning

Något som är nog så viktigt, men ack så tråkigt, är att skriva dokumentation för de projekt du arbetar med. Jobbar du med projekt, så är dokumentation en viktig sak att lägga ner tid på. Anledningen är enkel: man glömmer ganska fort vad man gjort! Att ha färdiga rutiner för hur man skall dokumentera viktiga delar i projektet är helt avgörande, om dokumentationen skall bli av eller inte. Man kan dokumentera på flera olika sätt. En metod jag själv använder och trivs med är att låta Word vara min rapportgenerator. Word är som de flesta Office-programmen oerhört kraftfulla och man kan få dem att göra nästan vad som hels.  För att göra det enkelt: jag låter Access skriva min tekniska dokumentation automatiskt som ett Word-dokument!  I den här artikeln ska jag beskriva principen för hur detta går till. I slutet av artikeln kan du se ett videoklipp, för hur applikationen fungerar.

Antag följande. vi har en Access-databas med dagsnoteringar över börspriser för råolja. Vi har lagrat alla våra data i en Access-tabell som heter Crude2013. Tabellen innehåller fältnamn, antal poster, värden etc. Vad vi vill göra är att dokumentera följande:

  • Datum och klockslag när vi gjorde dokumentationen.
  • Databasens namn och sökvägen dit
  • Tabellens namn och när den skapades
  • Antal poster i tabellen
  • Antal fält
  • Fältens namn

Programkoden i Access

När du startat Access går du in i kodeditorn genom att trycka tangenten ALT+F11. Det första som måste göras är sätta referenserna. Dessa är Microsoft DAO 3.6 Object Library och en referens måste sättas till Word, leta upp Microsoft Word 11 Object Library  i listan(i detta fall Word 2003).

Nu är de dags att titta på koden.
+++++++++++ kodstart+++++++++++

On Error GoTo PROC_ERR
If MsgBox(”Make sure that Word is closed before proceeding. ” & _
”” & vbCrLf & _
vbCrLf & ”Do you really want to continue?”, _
vbYesNo + vbExclamation + vbDefaultButton2, ”Current status; ” & Now) = vbYes Then

+++++++++++ kodslut+++++++++++

Kommentar: Det första som händer är användaren ges en möjlighet att ångra sig, genom att klicka JA eller NEJ. Klickar användaren NEJ skall ingen dokumentation skrivas och inget dokument skapas. Det som skapar detta är IF-satsen i början av kodblocket och Then i slutet av kodblocket.

+++++++++++ kodstart+++++++++++

Define objects for DAO…
Dim dbs As Database, tdf As TableDef
Dim fld As Field

   ’Set references to the current database…
Set dbs = CurrentDb

   ’Table to be examined in the databse…
Set tdf = dbs.TableDefs!Crude2013

+++++++++++ kodslut+++++++++++

Kommentar: I detta kodavsnitt så är det definitioner av objektvariabler. Vad gäller DAO 3.6, så används klasserna Database, TableDef och Field.Notera att när vi skapar instansen för TableDef, [objektvariabeln tdf], så definierar vi vilken tabell i databasen vi vill undersöka. Tabellen vi ville undersöka i databasen heter som bekant Crude2013.

+++++++++++ kodstart+++++++++++

’Define an object variable and start Word application…
Dim MyWordobj As Word.Application
Set MyWordobj = New Word.Application
MyWordobj.Documents.Add

+++++++++++ kodslut+++++++++++

Kommentar: …och i detta avsnitt definieras objekt och objektvariabler  för Word.

+++++++++++ kodstart+++++++++++
’In this section we define what data to be written to the document

MyWordobj.Selection.TypeText (”DOCUMENTATION FOR THE TABLE.”)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Date: ” & Now())
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Description: This documentation is automatically generated by Access. It presents important information about the table.”)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Data base: ” & dbs.Name)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Dataset: ” & tdf.Name)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Dataset created: ” & tdf.DateCreated)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Number of records: ” & tdf.RecordCount)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Number of fields: ” & tdf.Fields.Count)
MyWordobj.Selection.TypeParagraph
MyWordobj.Selection.TypeText (”Fieldnames:”)
MyWordobj.Selection.TypeParagraph

+++++++++++ kodslut+++++++++++

Kommentar: I detta avsnitt skapar vi själva mallen, lägger ut variabler och skapar formatering av det kommande Word-dokumentet, som ska skrivas.

+++++++++++ kodstart+++++++++++

’Time to print out all variable names with data…
For Each fld In tdf.Fields
MyWordobj.Selection.TypeText (” ” & fld.Name & vbCrLf & ” ”)
Next fld
MyWordobj.Selection.TypeParagraph

’Save the document
MyWordobj.ActiveDocument.SaveAs FileName:=”c:\rapporter\crudeprize2013.doc”
’Close the document
MyWordobj.ActiveDocument.Close

+++++++++++ kodslut+++++++++++

Kommentar: Här skrivs alla data ut, varefter Worddokumentet sparas på hårddisken, för att därefter stängas.

+++++++++++ kodstart+++++++++++

’Prompt the user…

Dim lngRetval As Long

lngRetval = MsgBox( _
”Your documentation could be created as a Word Document!” & vbCrLf & ””, _
vbOKOnly + vbInformation + vbDefaultButton1, _
”Current status; ” & Now)

’Delete the instance of Word and DAO objects…
Set MyWordobj = Nothing
Set dbs = Nothing

Else
Call MsgBox( _
”No documentation could be created.” & vbCrLf & ”” & vbCrLf & ”” & vbCrLf & ””, _
vbOKOnly + vbInformation + vbDefaultButton2, _
”Current status: SPCD”)

End If

+++++++++++ kodslut+++++++++++

Kommentar: I detta avsnitt meddelas användaren om vi har varit framgångsrika med att skapa dokumentet eller inte, vidare raderas instanserna av objektvariablerna.  Notera att vi också hanterar och meddelar användaren om användarenvalde att inte skapa dokumentationen. ELSE och End If hanterar detta i programkoden.

+++++++++++ kodstart+++++++++++
PROC_EXIT:
Exit Sub

PROC_ERR:
MsgBox ”Error: ” & Err.Number & ”.” & vbCrLf & ” ” & Err.Description, , _
”StartWord”
Resume PROC_EXIT
End Sub
+++++++++++ kodslut+++++++++++

Kommentar: Sista delen är sedvanlig felhantering.

Slutasats

Både Access och Word är mycket kraftfulla program som fungerar utmärkt tillsammans.  En bra metod när man skall dokumentera sin projekt är försöka göra detta så automatiskt som möjligt.

Referenser på nätet

VBA Language Reference

 

Se hur den fungerar i en live-demonstration!

Avslutningsvis visas hur VB-koden implementerad fungerar i en Access databas.

Share

Hur man skapar slumptal i ett datamaterial med hjälp av ACCESS

Nivå: Avancerad nivå

Förutsättningar: Det här exmplet förutsätter att du är mycket förtrogen med hur man arbetar med egentillverkade funktioner skrivna VB (Visual Basic programmering) och hur du implementerar dessa funktioner i en ACCESS-fråga, som sedan exekveras.

Inledning
Antag att vi har ett stort datamaterial, i en Access-tabell, och att vi vill kunna förbereda datamaterialet, så att vi kan dra ett ett stickprov från datamaterialet. Datamaterialet består av data från 22 olika enheter som har olika betäckningar, ”enhet1”, ”enhet2” osv. I vårt datamaterial har vi över 10 000 fakturor som alla har ett fakturanummer (ID). Vi vill nu genomföra ett stickprov för att t.ex genomföra en kvalitetsgranskning. Vårt stickprov ska vara enligt klassisk statistisk teori, enligt principen: ”obundet slumpmässigt urval utan återläggning (OSU)”.

En strategi till lösning
En strategi är att använda den inbyggda slumpgeneratorn RND (se referens till funktionen nedan) i Access. Sedan måste vi programmera en funktion som skapar våra slumptal. Vad våran funktion kommer att göra är att skriva ett slumptal mellan 1-22 för varje faktura, utifrån den enhet som fakturan kommer ifrån.

Nedan framgår hur VB-koden ser ut, när den implementeras i en VB-funktion:

++++++++++++++++++++ Kodstart i funktionen+++++++++++++++++++++
Option Compare Database

Function Sample(SampleValue As Variant)

Dim SampleOut As Integer

If SampleValue = ”enhet1” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet2” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet3” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet4” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet5” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet6” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet7” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet8” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet9” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet10” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet11” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet12” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet13” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet14” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet15” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet16” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet17” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet18” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet19” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet20” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet21” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
ElseIf SampleValue = ”enhet22” Then
SampleOut = Int((22 – 1 + 1) * Rnd + 1)
End If

Sample = SampleOut

End Function
++++++++++++++++++++ Kodslut i funktionen+++++++++++++++++++++

Kommentar till VB-koden:
Koden i funktionen ovan gör följande: När strängen ”enhet1” hittas, generera ett slumptal mellan 1-22; När strängen ”enhet2” hittas, generera ett slumptal mellan 1-22 osv. Beroende på vad VI sedan har för statistiska preferenser, kan man välja sitt stickprov från t.ex alla som har siffran 4, skall vara med osv.

I nedanstående skärmdump visas resultatet, när vi kör funktionen i en ACCESS-fråga:

dataslumptal

 

 

 

 

 

 

 

 

Slutsatser: Användning av funktionen RND är smidigt och ganska enkelt, eftersom den är inbyggd och redan finns i ACCESS och därför kräver lite kod. OBS! Man bör vara obeservant på att de statistiska preferenserna är korrekta och hur man vet hur stickprovet skall genomföras. Annars finns en risk för att man gör antingen en överskattning eller underskattning av antalet element som ska vara med i stickprovet. I exemplet ovan hade det bästa alternativet troligvis varit att dela in datamaterialet i olika stratum. Hur man gör detta ligger utanför denna artikel.

 

Referens:
RND Function (Visual Basic)
http://msdn.microsoft.com/en-us/library/f7s023d2(v=vs.90).aspx

Share

Hur man kör EpiInfo 6.04d på en Windows7-dator

Svårgihetsgrad: Avancerad datoranvändare

Detta tips är i första hand avsedd för DOS-versionen av statistikprogrammet EpiInfo version 6.04d och som ska köras på en dator med operativsystemet Windows7.  Notera att detta tips vänder sig i första hand till dig som är en avancerad och erfaren datoranvändare. Lösningen som presenteras nedan fungerar, men jag kan inte garantera att det fungerar på just din dator. Du använder detta tips helt på egen risk!

Tipset finns som ett PDF-dokument, som du kan ladda ner genom att klicka länken DOSbox_EpiInfo6_Windows7.

Share