Avatar billede jobb Nybegynder
12. februar 2003 - 01:44 Der er 12 kommentarer og
2 løsninger

Finde brugte nr.

Hej eksperter.

Jeg har lavet en dvdliste men er nu løbet ind i problemer.
Når man vil oprette en film vil jeg gerne have en lykke som løber databasen igennem og ser om "nr." er ledig, hvis det ikke er ledigt skal den komme med en msgbox og forslå det laveste ledige tal i databasen.

man kan vælge.
nr. "1"
nr. "2"
nr. "3"
-----> msgbox "forslå (nr. "4")
nr. "6"
nr. "7"
Avatar billede martin_moth Mester
12. februar 2003 - 10:32 #1
Er det ikke bare at loope gennem alle poster i din DB, og sammenligne med det nummer den foreslår? Er det allerede brugt, så loop igen fra første nummer, og stop første gang nummeret springer med mere end een.

En anden ting - hvis det nummer nu var en unik nøgle i din database, ville det jo være smart :o)
Avatar billede joern Nybegynder
12. februar 2003 - 11:02 #2
Hej.

I et gammelt VB3-projekt har jeg lavet sådan en.  Se idéen og se bort fra mine variabel-navne.

Her anvendes en kombination af liste og array, men det kan ligeså gost ske ved direkte læsning i en db.

'procedure for genanvendelse af ledigblevne numre - afstillet 30-01-2001
'-----------------------------------------------------------------------------
  For X = 1 To varer.ListCount - 1
    If Val(Left$(samtlige(X), 3)) > X + 1 Then Exit For
  Next
  If X < varer.ListCount - 2 Then varer.ListIndex = X Else varer.ListIndex = X - 1
  '-----------------------------------------------------------------------------

  'procedure for næste ledige én over det højeste.
  '---------------------------------------------------------------
  ln1 = 0
  For X = 1 To varer.ListCount - 1
    If Val(Left$(samtlige(X), 3)) > ln1 Then ln1 = Val(Left$(samtlige(X), 3))
  Next
  '-----------------------------------------------------------------------------

M.v.h.  Jørn
Avatar billede jobb Nybegynder
12. februar 2003 - 11:05 #3
--> martin jo det har jeg prøvet men ???
listen.
1
2
3
123
så siger den 3 er det højeste.
men da jeg gik i skole var det "123" der var det højeste men det kan jo godt være lavet om *lol**GG*
koden:
rs.MoveFirst
    i = 0
    Do Until rs.EOF
    If rs("nr") > i Then
    i = rs("nr")
    End If
    rs.MoveNext
    MsgBox i
    Loop
Avatar billede jobb Nybegynder
12. februar 2003 - 11:07 #4
---> joern Øhh jeg fatter "klejne" af det.
Avatar billede martin_moth Mester
12. februar 2003 - 11:18 #5
jobb

det er fordi den opfatter det som tekst, at 3 er højere end 123. Brug funktionen Val()
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vafctvalx.asp
Avatar billede jobb Nybegynder
12. februar 2003 - 11:24 #6
mener du
koden:
rs.MoveFirst
    i = 0
    Do Until rs.EOF
    If val(rs("nr")) > i Then
    i = val(rs("nr"))
    End If
    rs.MoveNext
    MsgBox i
    Loop
???????
Avatar billede martin_moth Mester
12. februar 2003 - 11:27 #7
Hvad tror du selv ;o)
Avatar billede joern Nybegynder
12. februar 2003 - 11:31 #8
Hej.

Ok, i mit eksempel indeholder et array nogle strenge, der altid (i filen de læses fra) står i nummerorden.  Nummeret står først og det er altid på 3 tegn, altså højst 999.  Numre under 100 angives '077' og under 10 angives '004'.

Når jeg så læser fra 0 til Ubound array'et - i eksemplet sidste post i en liste, men de er ens - så vokser tælleren i For / Next løkken jo med 1 ad gangen.  Dette tal sammenlignes med Val() af venstre del af strengen i array'et.  Hvis tallet i array'et er større (end X - tælleren) har der altså været et ledigt nummer og derfor 'Exit For'.

Men der kan let laves andre løsninger, og det vil være påkrævet hvis din database ikke er i nummerorden.

M.v.h.  Jørn
Avatar billede jobb Nybegynder
12. februar 2003 - 12:22 #9
Jeg har fået det til at virke men jeg vil gerne give jer begge point.
da i begge har været en utrolig stor hjælp for mig "det er det man kalder eksperter :)".
håber i begge bliver tilfres.
koden : --> til andre der mangler den er.
rs.MoveFirst
    i = 0
    Do Until rs.EOF
    If Val(rs("nr")) > i Then
    i = Val(rs("nr"))
    End If
    rs.MoveNext
    Loop
    MsgBox i
Avatar billede jobb Nybegynder
12. februar 2003 - 12:22 #10
Lukker.
Avatar billede martin_moth Mester
12. februar 2003 - 12:29 #11
PS: der er plads til et par optimeringer af din kode:

Du gemmer jo kun den SIDSTE værdi af "i" (inde i din if-sætning), og kører du loopet igennem fra den anden ende, vil det blive den FØRSTE værdi af i du skal gemme. Altså hvis du bruger movelast i stedet for movefirst og movePrevious i stedet for movenext. Herefter kan du exit dit loop inde i if-løkken lige efter du har givet "i" en værdi, og spare en MASSE gennemløb af dit recordset og dermed gøre programmet mere effektivt (hvis der nu f.eks. er 1000-vis af pladser i din record)
Avatar billede jobb Nybegynder
12. februar 2003 - 12:43 #12
??? vil du være sød og vise det i kode.
Avatar billede martin_moth Mester
12. februar 2003 - 12:46 #13
Kør loopen igennem fra sidste record mod første i stedet for som nu, hvor du kører fra første record mod sidste. Drop ud af loopet når du tildeler "i" en værdi første gang...
Avatar billede joern Nybegynder
12. februar 2003 - 14:54 #14
Hej.

Tak for point, fint du fik en god løsning.  m.v.h. Jørn
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