Avatar billede _petrucci Nybegynder
16. januar 2002 - 13:16 Der er 13 kommentarer og
3 løsninger

Finde det laveste ledige nummer

Hejsa :)

Jeg har lavet et login system, der går på at administratoren i en virksomhed opretter brugere med et 4-cifret idnummer. F.eks. kan han oprette en bruger med ID \"0001\" og en bruger med \"7616\".

Disse data bliver så lagret i en database og lagt sammen med virksomhedens id som f.eks. kunne være \"100250\" dvs.

Bruger1 ID:  1002500001
Bruger2 ID:  1002507616

Nu skal adminstratoren så oprette endnu en bruger. Og for at undgå at han skal huske de andre brugeres 4-cifrede ID - skal jeg have lavet en funktion(knap) der ved klik, automatisk skriver det første ledige 4-cifrede ID i input feltet, dvs. i dette tilfælde skal den skrive \"0002\" når jeg klikker på knappen.

Hvordan fikses dette bedst?
Avatar billede sone Nybegynder
16. januar 2002 - 13:24 #1
Vil brugerne ikke typisk blive oprettet 0001, 0002, 0003 osv.
Avatar billede _petrucci Nybegynder
16. januar 2002 - 13:25 #2
nej det er ikke en autonummering. administratoren skal selv bestemme deres id. f.eks. kan der være en bruger der insisterer (hvis det er ledigt) på at få et id der er let at huske, f.eks. 9999.
Avatar billede sone Nybegynder
16. januar 2002 - 14:12 #3
Det vil være MEGET nemmere hvis du havde ID og virksomhedsnummer i hvert sit felt...
Avatar billede _petrucci Nybegynder
16. januar 2002 - 14:16 #4
Det er desværre ikke muligt, da man skal logge sig ind med f.eks. 1002500001 :/

Er det ikke muligt på en måde at lave en Right(*,4) og så gå videre derfra? Kunne forestille mig den så kunne loope igennem kolonnen (+1) indtil den ikke finder en record - hvilket vil sige det nummer er ledigt?

Spørgsmålet er bare...hvordan ser det ud i asp?
Avatar billede chris Nybegynder
16. januar 2002 - 14:31 #5
det er meget let hvis det er i sql.

SELECT MIN(BRUGERID)
FROM TABEL

det retunere det laveste tal. så trækker du det ud og plus\'er med 1.

noget i stil med

NytBrugerID = RS(\"BrugerID\") +1

Avatar billede _petrucci Nybegynder
16. januar 2002 - 14:40 #6
Det kan jeg ikke helt bruge. Eksempel:

Bruger1 ID:  0001
Bruger2 ID:  0002
Bruger3 ID:  7616

Hvis jeg tager det laveste tal - er det 0001.
Plusser jeg det med 1 får jeg 0002 - som jo også er taget :/
Avatar billede chris Nybegynder
16. januar 2002 - 15:05 #7
så tjekker du om NytBrugerID findes i forvejen. :-)

SQL = \"SELECT BrugerID from TABEL where Brugerid = &NytbrugerID\"

Set rs = Conn.Execute(SQL)

If RS.EOF or BOF then
[her kan du så lave en ny sql der opretter den bruger]
End if

og du kan jo lave et loop indtil at den finder næste ledige nummer.
Avatar billede _petrucci Nybegynder
16. januar 2002 - 15:10 #8
dvs. hele 3 sql sætningen til det? først select min(brugerid) - så den nye sql der tjekker om NytBRugerID findes...og så den sidste oprettelses-SQL? wow...prøver lige
Avatar billede sone Nybegynder
16. januar 2002 - 15:12 #9
Hvis de logger ind med 10 cifre, så kan du da adskille dem inden du laver et DB-opslag - så du kan faktisk godt lave 2 kolonner.
Avatar billede _petrucci Nybegynder
16. januar 2002 - 15:15 #10
Mystisk nok giver den fejl når jeg prøver dette:

SQLSelect = \"SELECT MIN(BRUGER_ID) FROM BRUGERE WHERE BRUGER_VIRKSOMHED=\" & ID
Set rsSelect = myConn.Execute(SQLSelect)

NytBrugerID = rsSelect(\"Bruger_ID\")

Hvis jeg udfører SQL formlen i Query Analyzer finder den fint det første ID....
Avatar billede _petrucci Nybegynder
16. januar 2002 - 15:16 #11
sone, bliver lidt for meget arbejde for jeg har mange sider hvor det 10-cifrede id bliver brugt i en Session - alle de sider skal jeg så til at udskifte adskillelses kode på :/
Avatar billede chris Nybegynder
16. januar 2002 - 15:48 #12
noget helt andet er hvor går du så ikke bare efter MAX istedet ?
Altså MAX +1..... det er der ihvertfald ingen der har
Avatar billede chris Nybegynder
16. januar 2002 - 15:49 #13
SELECT MAX(BRUGERID)
FROM TABEL

det retunere det højeste tal. så trækker du det ud og plus\'er med 1.

noget i stil med

NytBrugerID = RS(\"BrugerID\") +1
Avatar billede _petrucci Nybegynder
16. januar 2002 - 15:55 #14
problemet opstår hvis der er en der vil have id= 9999 :)

men jeg kan sgi ikke helt få det loop til at hænge sammen. gider du udpensle det lidt mere præcist? :)
Avatar billede coltau Juniormester
16. januar 2002 - 22:31 #15
Hermed den korteste kode jeg kan finde på:

  strFirma = \"10025\"
  Set Conn = Server.CreateObject(\"ADODB.Connection\")
  Conn.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & \"data.mdb\"
  Set RS = Conn.Execute(\"SELECT Right(Nummer, 5) FROM test WHERE Left(Nummer, 5) = \'\" & strFirma & \"\' order by Right(Nummer, 5)\")
\' Vis listen
\'  Do While Not RS.EOF
\'    Response.Write(\"Nr:\" & RS(0) & \"<br>\")
\'    RS.MoveNext
\'  Loop

  intCnt = 1
  RS.MoveFirst
  Do While Not RS.EOF and (CInt(RS(0)) = intCnt)
    intCnt = intCnt + 1
    RS.MoveNext
  Loop
 
  Response.Write(\"Nyt: \" & CStr(intCnt))
 
intCnt indeholder herefter det næste ledige nummer for det firma. De foranstillede nuller skal blot tilføjes.
Hvis du skal bruge koden i flere ASP-filer kan du jo lave en funktion og includere den.
Avatar billede _petrucci Nybegynder
21. januar 2002 - 09:46 #16
Har mere eller mindre opgivet funktionen, så jeg fordeler pointene ligeligt mellem de 3 der kom med svarforslag :)
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
Kurser inden for grundlæggende programmering

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