Jag håller på att skapa en databas i Access, i den databasen så skall det lagras bla. Personnummer (och/med de sista fyra). Eftersom det kan uppstå en del problem om man bara använder två siffror för årtalet så skulle jag använda fyra siffror och jag skulle definitivt deklarera fältet som text. Personnummret skulle alltså lagras på formatet 19750102-3456. Vill man sedan skriva ut personnummret på ett med traditionellt sätt fixar man det med SELECT-satsen, exempel vis: Personnumren som kommer att registreras är både från 2000 och 1900, men du menar att redan vid inläggningen av posten så lägger man till 19 eller 20 före personnumret? Ja det tycker jag är lämpligt. På dom flesta offentliga registren gör man på detta sättet numera. Hur tycker du att jag skall räkna ut åldern sedan för att få ett korrekt svar T ex. att man ställer frågan i månad 2 men personen fyller i månad 12. Nu är det inte så noga i detta fall men kanske i framtiden :-). Jag tror du tjänar på att lagra det som två fält. Var av det första är ett datum och det andra ett tal. Genom att ha två fält. Kan du arbeta mot datum delen i personnummret sepparat utan att behöva bryta upp värdet. Du kan snabbt söka upp personer med en viss ålder. Jag har en tabell där jag har gjort som du beskriver två fält varav det 6 första i datum format. Sedan i en fråga skapat ett fält med värdet En enkel funktion för att fixa datum kan se ut så här: Menar du att man med den funktionen på fältet/textrutan i AddNew rekordset så kan man skriva både 72-01-02 och 720102? Du fick tidigare rådet att kontrollsiffrorna i personnummret skall lagras i ett separat fält som deklarerats som ett tal. Jag tycker fortfarande att detta kommer att ställa till onödiga problem. Vad händer till exempel om kontrollsiffrorna är 0123, dvs har en inledande nolla. Men den borde man kunna ha som ”text” (tycker jag). Funktionen omvandlar 720102, 19720102, 72-01,02 och 1972-01-02 till datum. Problem. Vad är det för problem med det? I format egenskapen för kontrollen kan man ange att tal skall format. Finns desutom inmatningsmasker som förenklar inmatning. Om jag använder mej av formatet text som du beskriver, kan jag då använda mej av det fältet vidare i Access, T ex, om jag vill få ut Min, Max, Medel och Mellan ålder X och X. I de applikationer jag har gjort med liknande konstruktion har jag använt datum för själva födelsedatumet - som ju är ett riktigt datum - och kan då använda alla de inbyggda funktioner för datum som finns. Jag vill inte göra något med de fyra sista, det var ”soa” som tyckte att det var problem att ha dessa som tal. Hej igen... läste kanske de andra inläggen lite slarvigt, sorry :-) Hmmm. Om du kör med Access 2000 eller senare. KAn du testa med:Personnummer-format
Det jag funderar på är vilket format på Personnummer som är mest lämpligt i mitt fall.
Posterna läggs till både från en sida på Intranätet med hjälp av asp och från formulär i databasen.
Det är önskemål om att kunna se ålder i en fråga. (i en urvalsfråga i Access (T ex. DateDiff)) och man skall även kunna söka på personnumret i ett formulär (i Access).
I de rapporter som skall skrivas ut så är det ok med både formatet ”750102-7592” och ”7501027592”.
Mina frågor:
1.) Underlättar det att jag skiljer på de sex första och de fyra sista talen i varsitt fält?
2.)Vilket format på fältet skulle kunna vara lämplig T ex. text, tal eller datum format?
(jag får bara DatumDiff att funka på datum, har försökt omvandla formatet i frågan men får inte till det)
3.)Finns det något bättre sätt att räkna ut åldern på än DatumDiff i en fråga?
Hur skulle du göra? Och gärna varför isf.
(ursäkta att jag använder ordet format med olika innebörd men jag hoppas att du förstår)
Är det någon som vill hjälpa mej att reda ut några frågetecken så skulle jag bli glad
/RoberWSv: Personnummer-format
SELECT MID$(Personnr,3,11) AS Personnummer FROM Anställd;
Hälsningar
SOASv: Personnummer-format
Har jag förstått dej rätt då?
/RobertWSv: Personnummer-format
/SOASv: Personnummer-format
/RobertWSv: Personnummer-format
För att formatera värdet vid raporet och liknande kan du skriva:
<code>
SELECT Year(PersonBirthDate) & Month(PersonBirthDate) & Day(PersonBirthDate) & "-" & PersonNo
FROM Persons
</code>
Att plocka ut åldern är lite klurigt.
Du kan ju lägga in denna funktion i en modul:
<code>
Function CalcAge(Value As Variant) As Variant
If IsDate(Value) Then
CalcAge = DateDiff("yyyy", Value, Date)
CalcAge = CalcAge + (DateAdd("yyyy", CalcAge, Value) > Date)
Else
CalcAge = Null
End If
End Function
</code>Sv: Personnummer-format
<code> DateDiff("m";[persnr];Now())/12 </code>
då tycker jag att jag får en ganska så tillförlitlig ålder (datum format på persnr).
Men jag tycker att det är lite knöligt att hantera datum formatet, både vid registrering av nya och när jag skall söka, jag snubblar hela tiden på avskiljningarna T ex. ”-”.
kan det funka tillförlitligt om jag använder indatamasken och väljer 00/00/00;;_ (72-01-02) eller stöter jag på patrull då från asp sidorna om jag skriver 720102 utan "-"?
/RobertWSv: Personnummer-format
<code>
Function FixDate(Value)
If IsDate(Value) Then
FixDate = CDate(Value)
ElseIf IsNumeric(Value) Then
FixDate = DateSerial((Value \ 10000) Mod 100, (Value \ 100) Mod 100, Value Mod 100)
End If
End Function
</code>
Vilket även fungerar med tvåsifrigt årtal.Sv: Personnummer-format
Sv: Personnummer-format
SOASv: Personnummer-format
Jag tycker att det borde finnas någon konverterare i Access som kunde omvandla ett tal som det är till datumformat, att man alltså kunde skriva 720102 och att man fick välja att det skulle vara datum just i min uträkning, men så lätt får tydligen inte vara :-).
Samtidigt så tycker jag att detta borde vara en vanlig uträkning som många vill göra.
/RobertWSv: Personnummer-format
Sv: Personnummer-format
Sv: Personnummer-format
Jag tycker att det fungerar bra med datum format i Access då kan jag arbeta vidare i programmet utan att behöva programmera olika funktioner.
Men jag tycker att i vissa lägen så är det betydligt enklare med Text format T ex. vid sökning på ett visst Personnummer, vid utskrift av rapporter och vid registrering av nya poster tycker därför att det låter intressant att du föreslår textformat.
Ja jag vet att man inte kan få allt gratis i ett program, men man vill ju att det skall vara så användarvänligt som möjligt för alla som skall använda sig av databasen i Access :-)
Men åter till frågan hur arbetar jag vidare med personnumret i text format?
/RobertWSv: Personnummer-format
För personnummer (de fyra sista) har jag använt text av den enkla anledning att jag inte utför några beräkningar på denna information.
Jag förstår inte vad du vill göra ytterligare med dessa fyra sista siffror... Kan du förklara lite närmare?Sv: Personnummer-format
Själv så är jag inne på att det blir lättare att arbeta vidare med ett personnummer som är formaterat som datum och de fyra som text.
Men jag ser att många använder sig av text på hela personnumret (kan ju iof vara så att de inte använder det till något annat) och eftersom att jag inte är så hemma på att omvandla formaten hit och dit i Access så är jag nyfiken på hur andra gör.
Skall jag använda personnumret till primär nyckel och inget annat så är det ju bra, för det blir ju lite knöligare med datum format+text men det går ju kanske det med.
Vissa använder sig också av fyra fält har jag sett ”åå” ”mm””dd” och de ”fyra sista” (iaf så har de textrutor som så). Varför gör de så tro? Är det bra det kanske, jag vet inte.
Nä jag har ingen ambition att arbeta vidare med de fyra sista mer en att använda dessa i sökningar, men det funkar ju bra med text då också, det skulle vara om man ville kolla om det är en man eller kvinna, men det går väl på datum+text också skulle jag tro.
Kul att du ” Lissu” skrev hur du gör, det är det som jag är ute efter, att få höra hur andra gör och varför.
/RobertW
>>Ser nu i strukturen att det kanske inte var mej du frågade.Sv: Personnummer-format
Men det hela beror ju på vad man vill göra med uppgifterna som sagt. Därför är det allra viktigaste momentet "tänket" i förväg - tycker i alla falla jag. Även om lösningen kanske inte är som experterna tycker...
Lycka till o Glad Påsk!Sv: Personnummer-format
<code> SELECT Year(PersonBirthDate) & Month(PersonBirthDate) & Day(PersonBirthDate) & "-" & PersonNo
FROM Persons </code>
Blev lite tokigt då inte nollorna följer med. Kanske jag gjorde något fel men det resultatet fick jag iaf. men annars så var tanken lysande, den skulle bli ännu bättre om man fick bort 19*** oxå, och det går ju säkert.
/RobertWSv: Personnummer-format
SELECT FormatDate(PersonBirthDate, vbShortDate) & "-" & PersonNo
FROM Persons