Avatar billede jobb Nybegynder
13. februar 2003 - 00:40 Der er 27 kommentarer og
1 løsning

først ledige plads !

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
Denne kode finder det største tal i databasen.
det er oxe fint nok så skal man bare tal+1
for ikke at ramme nogle andre tal.
MEN
hvad nu hvis den springer med 1 cifre hvordan definere man at den så skal springe ud.
listen
1
2
3


6

8
så skal den gerne komme og sige at "4" ikke findes og man kan bruge "4" til den nyoprettet titel. og ikke det største tal+1
Avatar billede brobaek Nybegynder
13. februar 2003 - 00:53 #1
lige et par småting - det du sikkert skal bruge, er et unikt id. I de fleste databaser kan du bruge en autonummer funktion. Iøvrigt, er det nødvendigt at lukke huller i nummereringen ?

I din forespørgsel, hvor du finder rs kan du tilføjer "order by nr". Derved får du dem ud i rækkefølge.

Dernæst:

rs.movefirst
i=1 'Hvis det mindste tal i rækken er 1
Do Until rs.EOF
If Val(rs("nr") =  i
  i = i + 1
  rs.Movenext
Else
  Exit Do
End If
Loop
Msgbox i

Dette burde virke... (hvis du kan sortere din forespørgsel stigende)

Mvh
Brobæk
Avatar billede brobaek Nybegynder
13. februar 2003 - 00:56 #2
har lige glemt et then efter "if val..."
Avatar billede martin_moth Mester
13. februar 2003 - 09:40 #3
Avatar billede martin_moth Mester
13. februar 2003 - 09:40 #4
Sikke jeg vrøvler - Exit Do, ikke Exit Loop. Kik i linket for den præcise syntaks
Avatar billede jobb Nybegynder
13. februar 2003 - 09:50 #5
Det er ikke det jeg skal bruge.
den skal bare fortælle at tallet 4 ikke bilver brugt.
og hvis tallet 4 havde været der skulle den sige tallet 5 ikke bliver
brugt og hvis 5 havde været der så skal den sige 7 er fridt.
listen
1
2
3


6

8
Avatar billede martin_moth Mester
13. februar 2003 - 09:59 #6
rs.MoveFirst
  i = val(rs("nr"))
  rs.MoveNext
  Do Until rs.EOF
    If val(rs("nr")) > i+1 Then
      msgbox "Tallet " & i+1 & " bliger ikke brugt!"
      Exit do 
    End If
    i = val(rs("nr"))
    rs.MoveNext
  Loop

Ovenstående udskriver 4 som det ledige tal i en masbox, hvis recordsættet indeholder de tal du har vist ovenfor
Avatar billede jobb Nybegynder
13. februar 2003 - 10:10 #7
hvordan smelter jeg så de her 2 sammen så den tjekker samtidige
først siger den hvis tallet eksisterer og så kommer den med et forslag om hvilken der er ledig.
rs.MoveFirst
  i = Val(rs("nr"))
  rs.MoveNext
  Do Until rs.EOF
    If Val(rs("nr")) > i + 1 Then
      MsgBox "Tallet " & i + 1 & " bliger ikke brugt!"
      Exit Do
    End If
    i = Val(rs("nr"))
    rs.MoveNext
  Loop

   
    rs.MoveFirst
    Do Until rs.EOF
    If rs("nr") = Text2.Text Then
    MsgBox rs("nr") & " eksisterer intast nyt!", , "Tilføj"
    Exit Sub
    End If
    rs.MoveNext
    Loop
Avatar billede mikkelpr Nybegynder
13. februar 2003 - 10:29 #8
Nu fremgår det jo ikke, hvad du skal bruge ovenstående til, men jeg forudser nogle seriøse performanceproblemer på et tidspunkt.

Hvis der kun er 10-100 rækker i din tabel, er det ok, men hvis der er flere, har du problemer, når du åbner dine connections + der bliver ventetid for brugeren.

Jeg gætter, at årsagen til at hullerne opstår er én af følgende:
1) Der bliver slettet rækker i tabellen
2) Der bliver indsat vilkårlige ID's

ad 1) Hvad med at oprette en tabel over ledige ID's, indexeret efter ID's numeriske størrelse. Når der skal forslås et ny ID, kan det vælges fra denne tabel (første række, even) og når der slettes en række, kan ID'et sættes tilbage i tabellen. Det eneste, der skal tænkes lidt over, er et fylde tabellen med ledige ID's ud. og sørge for passende håndtering af samtidige indsættelser.

ad 2) Den er lidt sværere. Du kan genbruge ideen fra 1), men der skal laves lidt flere check på om værdien er brugt i din tabel. (og værdien under osv.) Derefter kan du udvidde "ledigID"-tabellen til at omfatte alle tal mellem det tidligere maximum og det nye. Første gang et kæmpe tal indtastes bliver der lidt ventetid, men ellers er det også hurtigt nok.
Avatar billede brobaek Nybegynder
13. februar 2003 - 10:38 #9
jobb >> Hvad mener du med, at det ikke er det du skal bruge?
Min kode sætter i lig den første ledige plads - var det ikke det du ville ?
Avatar billede jobb Nybegynder
13. februar 2003 - 10:49 #10
Private Sub Command1_Click()

    Set conn = CreateObject("ADODB.Connection")
    conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & App.Path & "\dvd.mdb"
    SQL = "Select * FROM dvdfilm"
    Set rs = conn.Execute(SQL)
   
    rs.MoveFirst
    i = 1 'Hvis det mindste tal i rækken er 1
    Do Until rs.EOF
    If Val(rs("nr")) = i Then
    i = i + 1
    rs.MoveNext
    Else
    Exit Do
    End If
    Loop
    MsgBox i

   
If Text1.Text = "" Then
    MsgBox "Intast titel!", , "Tilføj"
    Text1.SetFocus
    SendKeys "{Home}+{End}"
ElseIf Text2.Text = "" Then
    MsgBox "Intast Nr!", , "Tilføj"
    Text2.SetFocus
    SendKeys "{Home}+{End}"
Else
   
    Set conn = CreateObject("ADODB.Connection")
    conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & App.Path & "\dvd.mdb"
   
    inSQL = "insert into dvdfilm (film, nr, image, udlån) values ('" & Text1.Text & "', '" & Text2.Text & "', '" & Text3.Text & "', 'Nej');"
    conn.Execute (inSQL)
   
    SQL = "Select * FROM dvdfilm"
    Set rs = conn.Execute(SQL)
   
    maindvdliste.List1.Clear
    Do Until rs.EOF
    maindvdliste.List1.AddItem rs("film")
    rs.MoveNext
    Loop
    rs.MoveFirst
    maindvdliste.txtfilm.Text = "" & rs("film") & ""
    maindvdliste.txtnr.Text = "" & rs("nr") & ""
    maindvdliste.txtudlon.Text = "" & rs("udlån") & ""
    maindvdliste.txtnavn.Text = "" & rs("navn") & ""
    maindvdliste.txtimage.Text = "" & rs("image") & ""
    maindvdliste.id.Text = "" & rs("id") & ""
    maindvdliste.Text2.SetFocus
    Unload Me
    End If

End Sub
Jeg kan ikke sotere efter ID.
Der er tilfældige Nr. da det er brugerne der selv vælger dem.
og når den kommer med det første ledige nr. opretter man safølig det nr.
men når man så køre koden igen forslår den det nr. der lige har været ledigt.
det er jo heller ikke mange der har mere end 100 film.
Avatar billede jobb Nybegynder
13. februar 2003 - 10:52 #11
jeg ved godt at den skal hoppe ud når den har fundet et ledigt nr.
men den skal da også søge alle nr. igennem for at se om det nr brugerne har valgt findes hvis det findes først der skal den søge efter det første ledige nr.
ps. har prøvet og leje med begge jeres koder.
:( -->HULK
Avatar billede martin_moth Mester
13. februar 2003 - 10:58 #12
Jamen - det er altså ikke så svært. Sid ned, og tænk dig om:

Først skal du tjekke om et nummer allerede er brugt? Ja, så looper du gennem recordsættet og ser om det allerede findes.

Derefter vil du finde det første ledige nummer, som jeg forstår det? Det har jeg allerede vist i et af svarene overfor...

/Martin

PS: Du har altså allerede fået svar på hvad du spørger om oprindeligt ;o)
Avatar billede jobb Nybegynder
13. februar 2003 - 11:44 #13
det med at loope kan jeg godt
men det med at finde det første ledige virker ikke som det skal.
det den kommer og siger 2 er fridt selv om jeg har tastet noget ind på plads 2.
Avatar billede arnvig Nybegynder
13. februar 2003 - 11:49 #14
pseudokode

hent bruger indtastning
Hvis findes i forvejen ?
Ja
    gør hvad skal gøres
else
    find første ledige
            - select nr+1
              from dvdfilm a
              where not exists (select *
                                from dvdfilm b 
                                where b.nr = a.nr + 1
                                order by nr )
    indsæt på første ledige
end hvis
Avatar billede jobb Nybegynder
13. februar 2003 - 13:45 #15
jeg har fået den til at loope men den vil ikke finde første ledige nr.
Avatar billede martin_moth Mester
13. februar 2003 - 13:48 #16
Min kode fra 09:59:54 finder første ledige nummer

Tjek nu, at tingene indholder det som du forventer (noget debug.print og et par messageboxex vil afklare det...)
Avatar billede jobb Nybegynder
13. februar 2003 - 13:55 #17
rs.MoveFirst
  i = 1
  rs.MoveNext
  Do Until rs.EOF
    If i > Val(rs("nr")) Then
      MsgBox "Tallet " & i & " bliver ikke brugt!"
      Exit Sub
    End If
    i = i + 1
  Loop
den gør ikke som den skal.
den ser ikke om der er nogle i tabellen som der er den samme som i.
Avatar billede jobb Nybegynder
13. februar 2003 - 13:56 #18
koden 09:59:54 virker ikke som den skal den tjekker ikke det som den skal.
Avatar billede martin_moth Mester
13. februar 2003 - 14:25 #19
Der er intet i vejen med princippet med min løsning, men hvis du har Dim'met f.ekx. vatiablen "i" som fx. en String eller en Date, ja så virker det naturligvis ikke. Derfor gentager jeg:

Tjek nu, at tingene indholder det som du forventer (noget debug.print og et par messageboxex vil afklare det...)
Avatar billede jobb Nybegynder
13. februar 2003 - 21:11 #20
jeg har ikke dimmet noget lol behøvet ikke den aksepterede i uden.
den inde holder det som jeg forventer men gør bare ikke som jeg gerne vil have prøv du om du kan få skittet til at virke for jeg gir snart op.

ps. hvad VB program er det bedste jeg bruger VB 6.0 og syntes jeg har mange problemer med det især hvis jeg henter lidt kilde kode her inde og prøver at sætte dem ind
eks. dim conn as new con..... --> virker ikke siger at conn er forkert
havde hentet en kode til systray --> fik jeg heller ikke til at virke *grr*
så nu dimmer jeg ikke noget det virker *lol*
HJÆLP MIG
Avatar billede martin_moth Mester
13. februar 2003 - 21:33 #21
Hvis du ikke dimmer det bliver det automatisk opfattet som en variant... Det er ikke altid hensigtsmæssigt - især ikke når du sammenligner forskellige variabler. En god programmeringsskik er ALTID (!!!) at erklære alle variable (du kan indstille VB til at kræve dette - det er en god ide)

Hvad mener du med "hvad vb-program er det bedste jeg bruger VB6.0" - hvad i alverden ville du ellers bruge - VB.5.0?

"eks. dim conn as new con..... --> virker ikke siger at conn er forkert"
Hvad mener du "at conn er forkert"?

Jeg tror du måske skulle sætte dig bedre ind i VB inden du går i gang med at lave et større program, der endda skal håndtere databaser. Nu har du efterhånden brugt laaaang tid på dette spørgsmål (som ER besvaret), og du ville selv kunne svare på det på ganske få minutter hvis du forstod VB bedre, og du vidste hvad du lavede (et absolut velment råd :o)

Søg på Tutorial her på eksperten, og du får alle links du kan ønske dig. Endnu bedre - køb en bog. Den tid du bruger på at lære VB ordentligt er givet 100 gange igen, ved at du ikkehænger fast i små detaljer som f.eks. i dette spørgsmål.
Avatar billede jobb Nybegynder
14. februar 2003 - 00:44 #22
det er meget fint at komme med den fine hentydning at jeg ikke kan VB.
FINT jeg er ikke god til VB og hvad så.

JA du har ret en bog har jeg et par stykker af men mit dilemma har altid været at jeg lære af kode/felj og ikke af at begrave sig i bøger (vi skal alle ikke være ens)

JA og lære VB bedre som sagt kan jeg ikke med bøger så derfor prøver jeg her er det ikke ok :)

jeg giver op det her er ikke en hjælp til mig og gidder ikke tovtrækkeri.
nu ved ikke med point i har jo hjulpet mig men ved ikke hvem der skal have pointene. så jeg vil dele dem er det ok ????
Avatar billede martin_moth Mester
14. februar 2003 - 00:56 #23
Helt fint - som jeg skrev, så var ovenstående ment som et velment råd - man kan bruge laaaang tid på at rette småting, der ikke virker, som ville virke, hvis man havde lært det ved f.eks. at læse en bog e.l.

Jeg er selv i samme situation i ASP.NET, hvor jeg famler mig frem - HAR dog købt en bog, og er i fuld gang med at læse:o)
Avatar billede jobb Nybegynder
14. februar 2003 - 01:31 #24
ok for at sætte en stopper for denne her ? så har jeg fået det til at virke ved bare at tænke mig lidt om den kode du gav mig virkede og virker nu men er løbet ind i 2 cifrede problem virker fint fra nr 1-9 men kommer jeg op i 10 og op efter siger den 2 er fridt er der andre mulighedder har prøvet val(i) men det skal være en variant eller et opjekt tænkte på at give nr 0001 /0002 /0003 osv men kærver en rep af database:(

ps har fået "Dim conn As New Connection" til at virke ved at LÆSE I MIN BOG
den skulle hedde "Dim conn As New ADODB.Connection" tak for hjælpen og et dunk i nakken for at sætte tænkeren igang :)
Avatar billede martin_moth Mester
14. februar 2003 - 09:42 #25
he he :o)
Avatar billede arnvig Nybegynder
14. februar 2003 - 11:45 #26
Hvis du nu havde kigget på de svar du har fået, så ville du have fundet en løsning som var både mere effektiv, pænere og fremtidssikret. ak,ja
Hvor er det synd at folk har så travlt at de ikke når at få den bedste løsning.
Avatar billede martin_moth Mester
14. februar 2003 - 11:59 #27
arnvig: Hvad er det man siger om hastværk og lastværk ;o)
Avatar billede brobaek Nybegynder
14. februar 2003 - 12:18 #28
Ja, se bare på Amanda ;-)

Man kan så selvfølgelig spørge sig selv, om Amanda var hastværk !!!
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