Avatar billede jobb Nybegynder
27. januar 2003 - 00:39 Der er 16 kommentarer og
1 løsning

se om list også findes i database

Hej med jer alle sammen.

Nu har jeg kæmpet i 2 dage og vil nu krybe til jer som har arfaringen.

jeg har en database og en list
og jeg vil så gerne se om nogle titler i listen også findes i databasen hvis de gør så må den ikke gøre noget andet end og komme med en msgbox og sige at den findes og at man skal finde en anden titel.
hvis der ikke findes nogle titler i listen som er magen til databasens så må den gerne oprette en med det navn.
HVORDAN GØR MAN DET ??????

kode :
Private Sub Command1_Click()
If Text1.Text = "" Then
    MsgBox "Intast titel!", , "Tilføj"
    Text2.SetFocus
    SendKeys "{Home}+{End}"
ElseIf Text2.Text = "" Then
    MsgBox "Intast Nr!", , "Tilføj"
    Text2.SetFocus
    SendKeys "{Home}+{End}"
Else
    rsSQL = "Select * FROM dvdfilm"
    Set rs = Conn.Execute(rsSQL)
   
    SQL = "insert into dvdfilm (film, nr, image, udlån) values ('" & Text1.Text & "', '" & Text2.Text & "', '" & Text3.Text & "', 'Nej');"
    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
Avatar billede martin_moth Mester
27. januar 2003 - 11:33 #1
Er der ikke bare at loope over alle poster i dit recordset (databasen), og for hver post se om den findes på listen. Findes den ikke, opretter du den (såvidt jeg forstår spørgsmålet, er det det du vil

PS: I stedet for alle de messageboxes, kan du lade din command1 have enabled=false, indtil der står noget i både text1 og text2 - bare en ide :o)
Avatar billede jobb Nybegynder
27. januar 2003 - 11:44 #2
har prøvet med loope men kan ikke få den hægtet sammen så det virker har du en god ide.

med hensyn til msgbox er det sådanne du mener :
If (Text1.Text = "") or (text2.text = "") Then
    MsgBox "Intast i begge felter!", , "Tilføj"
    Text1.SetFocus
    SendKeys "{Home}+{End}"
end if
Avatar billede martin_moth Mester
27. januar 2003 - 12:00 #3
Det sidste først: Det er bare en ide, men du kan jo putte følgende ind i _change-eventen for Text1 og Text2 :

  command1.enabled = false 
  If text1.text <> "" and textt.text <> "" then
    command1.enabled = true
  end if

Og så droppe msgboxene - brugere (eller rettere - jeg) hader alle de pop-up beskedder ;o)

Mht til at loope over et recordset er der masser at godbidder på Eksperten, fx. følgende kode der er snuppet fra www.eksperten.dk/spm/302362 (der er masser af andre eksempler - men ovenstående lavede jeg, derfor tog jeg den :o)

Dim recBruger As Recordset
  Dim m_DB As Database
  Set m_DB = Workspaces(0).OpenDatabase("C:\projectx\projectx6_0\User.mdb")
  Set recBruger = m_DB.OpenRecordset _
    ("SELECT brugernavn, password FROM users ORDER BY brugernavn", dbOpenSnapshot)
   
  Do While Not recBruger.EOF 'Looper over alle poster i tabellen brugernavn og password
    If strBrugerID = recBruger!Brugernavn Then
      If strBrugerPW = recBruger!Password Then
        KontrolAfLogon = True
      End If
    End If
    recBruger.MoveNext
  Loop
  recBruger.Close
  Set m_DB = Nothing

Den kan du jo bare ændre så den åbner din database, vælger den rigtige tabel, og tjekker op mod din list :o)
Avatar billede jobb Nybegynder
27. januar 2003 - 12:54 #4
Det ser fint ud men hvordan får jeg så list1 til at løbe med så den tjekker
om en fra listen = den fra databasen.
Avatar billede jobb Nybegynder
27. januar 2003 - 12:55 #5
ps det med msgbox vil jeg gerne beholde. ;-)
Avatar billede martin_moth Mester
27. januar 2003 - 13:18 #6
Loope gennem en list:

For i = 0 To List1.ListCount - 1
  List1.List(i)
Next i

i er indexet, linie 1 har index 0 og så fremdeles. Hvis du fx. vil se linie 5 i en msgbox, kan du altså skrive Msgbox List1.List(4)
Avatar billede martin_moth Mester
27. januar 2003 - 13:26 #7
Og når du sætter det sammen, kommer det til at linen noget i retning af:

  Do While Not recBruger.EOF 'Looper over alle poster i tabellen brugernavn og password
    For i = 0 To List1.ListCount - 1
      if recBruger!Brugernavn = List1.List(i) Then
        MsgBox "Den findes allerede"
      End if
    Next i
    recBruger.MoveNext
  Loop

Jeg ved ikke lige hvad du vil hvis/hvis ikke en post i tabellen er i listen - men nu ved du hvordan du looper gennem et recordset fra en DB og looper gennem en list :o))
Avatar billede jobb Nybegynder
28. januar 2003 - 11:46 #8
Jeg kan ikke få den til at virke som jeg gerne vil have den tager alle som starter med det bogstav som er i listen.
nu har jeg prøvet med koden nedeunder.
og lagt en textbox ind i stedet for.
men den virker heller ikke den tager nummer først i stedet for titel.

Kode:
Do While rs.EOF = False
    If rs("film") = Text1.Text Then
    MsgBox "Titel eksisterer find en anden!", , "Tilføj"
    Text1.SetFocus
    SendKeys "{Home}+{End}"
    Exit Sub
    End If
    If rs("nr") = Text2.Text Then
    MsgBox "Nr. eksisterer find en anden!", , "Tilføj"
    Text2.SetFocus
    SendKeys "{Home}+{End}"
    Exit Sub
    End If
    rs.MoveNext
Loop
Avatar billede martin_moth Mester
28. januar 2003 - 12:05 #9
Jeg forstår ikke hvad du mener. Den kode du har gør ikke andet end at komme med en msgbox hvis nummer eller film eksisterer.

Og så forstår jeg ikke hvad du mener med "men den virker heller ikke den tager nummer først i stedet for titel."

Jeg er vant til at bruge recordsets på en anden måde, men er du i tvivl om hvad fx. rs("film") indeholder, så prøv at skrive
rs("film") ud til en msgbox eller debug.print, og se om den indeholder det du forventer?
Avatar billede jobb Nybegynder
28. januar 2003 - 13:10 #10
det med nummeret først.
en liste.
1
11
111
1111
hvis jeg så skriver i textboxet 111
så kommer den og siger at der findes en (1) og ikke (111) det er det jeg mener

ps. man må ikke kunne taste 2 ens filmtitler ind i listen så fucker databasen op med den autonum (id)
Avatar billede jobb Nybegynder
28. januar 2003 - 13:22 #11
Glem alt det plader op over den her kode jeg har virker efter hensigten men msgboxen med NR. kommer først der efter Mmsgboxen med TITEL kan man lave det sådatta at den tjekker TITLEN først og så tjekker den for NR. (Sådan.) lol :)

Kode:
Do While rs.EOF = False
    If rs("film") = Text1.Text Then
    MsgBox "Titel eksisterer find en anden!", , "Tilføj"
    Text1.SetFocus
    SendKeys "{Home}+{End}"
    Exit Sub
    End If
    If rs("nr") = Text2.Text Then
    MsgBox "Nr. eksisterer find en anden!", , "Tilføj"
    Text2.SetFocus
    SendKeys "{Home}+{End}"
    Exit Sub
    End If
    rs.MoveNext
Loop
Avatar billede martin_moth Mester
28. januar 2003 - 13:33 #12
Den kode du har tjekker jo titlen først - findes den, exit'er den sub'en

Det lyder som om at du kunne blive meget klogere af at smide et par breakpoints ind, og se hvad der egentligt sker :o)
Avatar billede jobb Nybegynder
29. januar 2003 - 10:31 #13
breakpoints ?? lol :) jeg troede også at den tjekkede titlen først men den kommer med msgbox på nr. først.
Avatar billede martin_moth Mester
29. januar 2003 - 10:50 #14
Som sagt - smid et par breakpoints ind på kritiske steder, og se om værdierne er som du forventer - det er de garanteret ikke, da den springer titlen over!
Avatar billede guffas Nybegynder
29. januar 2003 - 21:43 #15
Hvorfor laver du ikke et SQL opslag der spørger sådan her:
"SELECT titel FROM dvdfilm WHERE titel=" & Text1.Text & ";"
Hvis så rs.recordcount = 0 ja så er titlen jo ikke i databasen og kan så insertes...
I øvrigt virker det lidt underligt at titler på film ikke må være ens, det kan da forekomme. Det med at databasen jammer kan måske hænge sammen med at titel-feltet er defineret som unique ?
Avatar billede jobb Nybegynder
11. februar 2003 - 09:43 #16
Kan ikke bruge nogle af svarende takker for jeres insats. Lukker
Avatar billede martin_moth Mester
11. februar 2003 - 10:27 #17
Fin stil

For vi fortjener bestemt ikke nogle points for gode forslag og al den tid vi har brugt ;o)

Selv tak for ingenting, Martin
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