Avatar billede agony2 Nybegynder
29. september 2002 - 18:31 Der er 22 kommentarer

AutoNumber > 0

Hejsa
I min access db har jeg en nøgle ved navn 'id' som er af tyen AutoNumber og sat til Random, men hvordan kan jeg sikre mig at dette tal er større end 0 ??
Avatar billede mugs Novice
29. september 2002 - 18:39 #1
Et autonummereingsfelt vil altid starte ved 1, og da feltet ikke vil gentage sin nummerering, kan feltet ikke indeholde 0.
Avatar billede agony2 Nybegynder
29. september 2002 - 18:42 #2
mugs << ja, men det erjo ikke lige det jeg spørg om, og det behøves ikke starte med 1 hvis du det sættes til random. Hvordan sikre jeg mig at tallet bliver større end 0 ved random ?
Avatar billede terry Ekspert
29. september 2002 - 20:01 #3
agony2 I dont think you have MUCH chance of it landing on 0.
This is taken from Access help
"When you replicate a database, AutoNumber field settings are set to Random to ensure that new records entered in different replicas will have unique values."
So although there may be a slim chance I VERY mmuch doubt you will EVERY have problems with this.
Try entering a few records and you will get some idea as to the SIZE of these numbers! I would also think that the algorithm will not allow 0
Avatar billede mugs Novice
29. september 2002 - 20:06 #4
terry > The question is: How to get the values > 0. I don't think it is possible. We kan choose increasing numbers or random.
Avatar billede terry Ekspert
29. september 2002 - 20:10 #5
yes your right mugs, but if you concider what this RANDOM is intended for the chances are almost none existant, and I am also resonably sure that the algorithm for finding this RANDOM number will NOT return 0, although I havent asked Bill if my assumption is right :o)
Avatar billede terry Ekspert
30. september 2002 - 08:10 #6
agony2>do you have any comments?
Avatar billede moses Praktikant
30. september 2002 - 10:17 #7
Hvis du endelig vil have noget, der minder lidt om "ikke negative" tal, så kan du formattere feltet:

format(felt,"0P;0N")

Det giver:

felt    resultat
-1        1N
0        0P
+1        1P
Avatar billede terry Ekspert
30. september 2002 - 10:27 #8
Oh, nu er jeg med! I was thinking that it HAD to be NOT = 0 but you want it to be GREATER than ZERO. Well if you decide to use RANDOM then you CAN NOT! Th epurpose of random is to make sure that the RANDOM number doesnt get duplicated so, if it was possible to manipulate this then Microsoft couldnt guaranty thi . SO, if you want to make sure it is > 0 then use INCREMENT and NOT RANDOM. OR you will have to make your own ID.
What puzzled me is that normally you wouldnt have to worry about what the actual number is, as it is just used as a UNIQUE key.
Avatar billede mugs Novice
30. september 2002 - 16:16 #9
terry > As We say in Danish: "Så faldt 10-øren". Read My Comment 29/09 20:10 :o)
Avatar billede terry Ekspert
30. september 2002 - 18:20 #10
hi mugs, Yes, just wasnt thinking on those lines, it must have been all that whisky at the whisky messe on saturday :o)
I'de still like to know WHY it needs to be >0 though, any coments agony2?
Avatar billede mugs Novice
30. september 2002 - 18:25 #11
Hi terry, maybee I should try a whisky messe one day. Any new interessting sort? My favorite is Lagavulin -And Yours?

It makes no sence to Me too, that the Autonumber has to be > 0, as You wrote 10:27 we don't use it, the database does, but that's is not the same.
Avatar billede moses Praktikant
30. september 2002 - 19:11 #12
Grunden til at jeg engang har benyttet mig af mit forslag er, at det ser lidt dumt ud, når der på svømmeklubbens medlemskort står, at jeg er medlem nummer "-21345653".
Rent visuelt.
Avatar billede terry Ekspert
01. oktober 2002 - 08:17 #13
hi moses> But IF you want a unique "medlems nummer" then it would also be an idea to have a number system which can MAYBE be remembered, in other words I would make my own number system which WILL NOT be auto number.

Mugs>Lagavulin happens to be one of my favorites, in fact almost all whisky's from Islay are VERY good. I would say my favorite is Port Ellen :o) (pity its closed now)
Avatar billede moses Praktikant
01. oktober 2002 - 16:41 #14
Nu ikke så pjattet. Så skriver du da bare:

format(-2341765845,"0 000 000 000P;0 000 000 000N")

så bliver det noget mere læseligt.
Avatar billede moses Praktikant
01. oktober 2002 - 16:55 #15
Eller noget, som f.eks.:

Private Function pyt(tal As Long) As String
    Dim s As String
    Dim x As Integer
    Dim r As String
    Dim f As Integer
   
    f = Sgn(tal)
    tal = Abs(tal)
    s = CStr(tal)
    r = ""
    For x = 1 To Len(s)
        If (x Mod 2) = 0 Then
            r = r & Chr(Val(Mid(s, x, 1)) + 65)
        Else
            r = r & Mid(s, x, 1)
        End If
    Next
    If f < 0 Then
        r = r & "N"
    Else
        r = r & "P"
    End If
    pyt = r
End Function


Det er da også hyggeligt - Og stadig en entydig reference til Autonummeret.
Avatar billede fynbohans Nybegynder
02. oktober 2002 - 15:43 #16
Den indbyggede funktion Rnd() genererer et tal større end eller lig med 0 og
mindre end 1. For at få  helt tal op til en bestemt værdi ganges med dette tal.
På resultetatet bruges funktionen Int(), som giver heltalsdelen. Hvis man
vil sikre sig at resultatet ikke er nul skal der lægges 1 til.
Så teoretisk kunne nul tænkes i Autonummering, men da Default for Autonummering
starter med 1 gør den anden mulighed sikkert også!
Avatar billede moses Praktikant
02. oktober 2002 - 19:07 #17
>>>>> fynbohans
Med Rnd bygget ind i en formel, kan du få resultatet til at ligge, hvorend du vil blot det er et kontinuert interval og de enkelte steps fra begyndelse til slut ikke overstiger opløsningen, hvormed Rnd angives med.
MEN
Rnd er ikke unik, da samme tal sagtens kan forekomme flere gange inden alle tal i den fulde opløsning er brugt.
Avatar billede fynbohans Nybegynder
02. oktober 2002 - 23:39 #18
Hvordan Microsoft gør ved jeg ikke med man kan sagtens lave en funktion, som producerer unike tilfældige tal med Rnd(), hvis intervallet ikke er for stort. Nemmest at forlare med et konkret eksempel, f.eks.100.
Man fylder et array med tallene fra 1 til 100, finder et tilfældigt
tal og bruger indholdet af elementet som resultat. Det brugte
element ombyttes med nr.100 (swap). Næste gang bruges intervallet 1-99 osv. Brugte tal vil altid være uden for funktionens rækkevidde.

Hvis det drejer sig om meget store intervaller, f.eks. de over
2 millarder positive tal, som LONG spænder over ville jeg bruge Rnd()
for hvert ciffer (1-9 f.eks.). Teoretisk kunne man lave en database
over alle brugte tal. Der findes meget hurtige måder at søge i tal
på.

Men Microsoft gør noget andet! I Visual Basic hjælp under
ReplicaId kan man se at Access ser bort fra denne mulighed, fordi
chancen for at få det samme tal 2 gange er forsvindende lille.
Avatar billede terry Ekspert
03. oktober 2002 - 08:17 #19
hi folks! I dont know why everyone is using so much time on this question when the person who placed it doesnt seem to have the time to make any comments. These would more than likley shed some light on to what is actually required.
agony2 lets hear from you!
Avatar billede agony2 Nybegynder
18. oktober 2002 - 10:51 #20
moses << jeg tror du har fat i noget af det rigtige med dit format() men hvis jeg skriver:

format(-2341765845,"0 000 000 000P;0 000 000 000N")

i min Access db under format så skriver den underlige ting og ikke et tal som ønsket.
Avatar billede agony2 Nybegynder
19. oktober 2002 - 10:46 #21
terry < samme grund som moses
Avatar billede terry Ekspert
08. december 2002 - 12:35 #22
agony2 can you close this question now please?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester