Avatar billede kalle_mod Nybegynder
01. september 2007 - 22:16 Der er 9 kommentarer og
1 løsning

Problemer med udskrivning af databasefelt

Hej eksperter

Nu sidder jeg her og har problemer med at finde fejlen i min kode. Jeg sidder og laver et lille program til en ven som gerne vil have styr på hans dvd-film.

Mit problem er at mit program åbenbart ikke forstår at læse udgivelsen for filmen(udgivelses år) hvis feltet er "tomt"(indeholder værdien "0") så fungerer det fint men så snart der kommer et årstal så går det helt galt. I mit listefelt skal den skrive filmtitel(udgivelsesår) men den skriver kun filmtitel() - hvis der ikke er et årstal skriver den kun filmtitel - ganske som den skal.

Ud over at den ikke udskriver feltet så går programmet helt ned hvis man klikker på filmen for at få vist detaljerne i en label. Hvis jeg udfylder feltet instruktør sker der ikke det store, linien hvor instruktøren skulle stå er tom(hvis der står "0" i databasen skriver den blot "(ikke angivet)")

Her følger koden til command1_click og filmliste_click():

command1_click:
Private Sub Command1_Click()

If searchtext.Text = "" Then
MsgBox "Du skal skrive et søgeord først!", , "Filmliste"
ElseIf searchtheme.Text = "Vælg kategori" Then
MsgBox "Du skal vælge en kategori først!", , "Filmliste"
Else
sql = "select titel, udgivet from film where [" & searchtheme.Text & "] like '%" & searchtext.Text & "%' order by titel"
Set rs = conn.execute(sql)
filmliste.Clear
If rs.EOF Then
MsgBox "Der blev ikke nogen film der matcher søgekriterierne!", , "Filmliste"
Else
Do Until rs.EOF
If rs("udgivet") = "0" Then
strTekst = rs("titel")
Else
strTekst = rs("titel") & "(" & rs("udgivet") & ")"
End If
filmliste.AddItem (strTekst)
rs.movenext
Loop
End If
End If
End Sub

og filmliste_click():
Private Sub filmliste_Click()

iPar = 0
For i = 1 To Len(filmliste.Text)
If Mid(filmliste.Text, i, 1) = "(" Then
iPar = iPar + 1
End If
Next

If iPar = 0 Then
strTekst = filmliste.Text

ElseIf iPar = 1 Then
For i = 1 To Len(filmliste.Text)
If Mid(filmliste.Text, i, 1) = "(" Then
If IsNumeric(Mid(filmliste.Text, i + 1, 4)) Then
strTekst = Left(filmliste.Text, i - 1)
Else
strTekst = filmliste.Text
End If
Exit For
End If
Next

ElseIf iPar > 1 Then
i = InStrRev(filmliste.Text, "(")
strTekst = Left(filmliste.Text, i - 1)
End If

sql = "select * from film where titel='" & strTekst & "'"
Set rs = conn.execute(sql)

If rs.EOF Then
MsgBox "Filmen " & strTekst & " blev ikke fundet", , "Filmliste"
Else
strTekst = ""
strTekst = strTekst & rs("titel")
If rs("udgivet") <> "0" Then
strTekst = strTekst & "(udgivet i " & rs("udgivet") & ")"
End If
strTekst = strTekst & Chr(13) & Chr(13)
strTekst = strTekst & "Sprog: "
If rs("sprog") = "0" Then
strTekst = strTekst & "(ikke angivet)"
Else
strTekst = strTekst & rs("sprog")
End If
strTekst = strTekst & Chr(13)
strTekst = strTekst & "Undertekster: "
If rs("undertekster") = "0" Then
strTekst = strTekst & "(ikke angivet)"
Else
strTekst = strTekst & rs("undertekster")
End If
strTekst = strTekst & Chr(13)
strTekst = strTekst & "Format: "
If rs("format") = "0" Then
strTekst = strTekst & "(ikke angivet)"
Else
strTekst = strTekst & rs("format")
End If
strTekst = strTekst & Chr(13)
strTekst = strTekst & "Genre: "
If rs("genre") = "0" Then
strTekst = strTekst & "(ikke angivet)"
Else
strTekst = strTekst & rs("genre")
End If
strTekst = strTekst & Chr(13)
strTekst = strTekst & "Instruktør: "
If rs("instruktør") = "0" Then
strTekst = strTekst & "(ikke angivet)"
Else
strTekst = strTekst & rs("instruktør")
End If
strTekst = strTekst & Chr(13)
strTekst = strTekst & "Filmselskab: "
If rs("filmselskab") = "0" Then
strTekst = strTekst & "(ikke angivet)"
Else
strTekst = strTekst & rs("filmselskab")
End If
strTekst = strTekst & Chr(13)
strTekst = strTekst & "Indsat i systemet: "
If rs("indsættelses dato") = "0" Then
strTekst = strTekst & "(ikke angivet)"
Else
strTekst = strTekst & rs("indsættelses dato")
End If
strTekst = strTekst & Chr(13)
strTekst = strTekst & "Kommentar: "
If rs("kommentar") = "0" Then
strTekst = strTekst & "Ingen kommentarer"
Else
strTekst = strTekst & rs("kommentar") & "."
End If
slet.Visible = True
filmID.Caption = rs("ID")
listeID.Caption = filmliste.ListIndex
filmdata.Caption = strTekst
strTekst = ""
End If
rs.Close
End Sub

Felterne i databasen:
id
titel
udgivet
instruktør
filmselskab
indsættelses dato
undertekster
format
kommentar
genre
sprog

Håber i kan hjælpe mig med at løse mysteriet...

Kalle
Avatar billede supertekst Ekspert
04. september 2007 - 09:02 #1
Prøv at sende din db som.zip til:pb@supertekst-it.dk
Avatar billede nielle Nybegynder
04. september 2007 - 09:11 #2
Indrykninger vil gøre mirakler for læsbarheden af din kode!

Prøv med dette:

Private Sub Command1_Click()
    If searchtext.Text = "" Then
        MsgBox "Du skal skrive et søgeord først!", , "Filmliste"
    ElseIf searchtheme.Text = "Vælg kategori" Then
        MsgBox "Du skal vælge en kategori først!", , "Filmliste"
    Else
        sql = "SELECT titel, udgivet FROM film WHERE [" & searchtheme.Text & "] LIKE '%" & searchtext.Text & "%' ORDER BY titel"
        Set rs = conn.execute(sql)
        filmliste.Clear

        If rs.EOF Then
            MsgBox "Der blev ikke nogen film der matcher søgekriterierne!", , "Filmliste"
        Else
            Do Until rs.EOF
                Dim udgivet = rs("udgivet")
                If udgivet = "0" Then
                    strTekst = rs("titel")
                Else
                    strTekst = rs("titel") & " (" & udgivet & ")"
                End If
                filmliste.AddItem (strTekst)
                rs.movenext
            Loop
        End If
    End If
End Sub
Avatar billede kalle_mod Nybegynder
04. september 2007 - 10:07 #3
det ser ud til at virke nielle, hvad er det præcis du har ændret ud over at du har brugt en variabel til at holde rs("udgivet"), hvilket jeg aldrig før har oplevet skulle have en betydning...Men i hvert fald kommer årstallet med i listen nu så jeg må vel bare igang med at erklære variabler osv. til min filmdata-label også

Kalle
Avatar billede nielle Nybegynder
04. september 2007 - 12:50 #4
Nogen gange - godt nok mest i ASP-sammenhæng - oplever jeg at det giver problemer at kalde f.eks. rs("udgivet") to gange efter hinanden - 1. gang går det godt, men 2. gang fejler den. Det må bestemt være en fejl, men mere kan jeg ikke sige.

Min sædvalige workaround er simplethen at gemme værdien i en variabel og så efterfølgende hente den derfra i stedet.
Avatar billede kalle_mod Nybegynder
05. september 2007 - 17:31 #5
Det virker :)

takker mange gange, men måske kan du lige hjælpe mig med en lille ting mere?

jeg har en form kaldet Editform hvor jeg skal opdatere oplysningerne om filmen. Til at opdatere skal jeg bruge filmens ID som ligger i min label kaldet filmID i frmMain(main-formen)...Når jeg forsøger at kalde ID'et med frmMain.filmID.Caption giver den mig ikke nogen værdi...

Kalle
Avatar billede nielle Nybegynder
05. september 2007 - 20:26 #6
Hvordan ser din kode ud?
Avatar billede kalle_mod Nybegynder
06. september 2007 - 10:32 #7
Editfrm->Opdater_click():

Private Sub Opdater_Click()

filmtitel = filmtitel.Text

If udgivet.Text = "Udgivet" Then
    udgivet = "0"
Else
    udgivet = udgivet.Text
End If

If sprog.Text = "Sprog" Then
    sprog = "0"
Else
    sprog = sprog.Text
End If

If undertekster.Text = "Undertekster" Then
    undertekster = "0"
Else
    undertekster = undertekster.Text
End If

If format.Text = "Format" Then
    format = "0"
Else
    format = format.Text
End If

If genre.Text = "Genre" Then
    genre = "0"
Else
    genre = genre.Text
End If

If instruktor.Text = "Instruktør" Then
    instruktor = "0"
Else
    instruktor = instruktor.Text
End If

If filmselskab.Text = "Filmselskab" Then
    filmselskab = "0"
Else
    filmselskab = filmselskab.Text
End If

If kommentar.Text = "Kommentar" Then
    kommentar = "0"
Else
    kommentar = kommentar.Text
End If

sql = "update film set titel='" & filmtitel & "', udgivet='" & udgivet & "', sprog='" & sprog & "', undertekster='" & undertekster & "', [format]='" & format & "', genre='" & genre & "', [instruktør]='" & instruktor & "', filmselskab='" & filmselskab & "', kommentar='" & kommentar & "' where id=" & frmMain.filmID.Caption
conn.execute (sql)
Unload Me
End If
End Sub
Avatar billede kalle_mod Nybegynder
06. september 2007 - 12:57 #8
nå fandt selv løsningen i mit modul, formen er navngivet frmMain.frm men objektet hedder fMainForm så hvis frmMain i koden erstattes med fMainForm så virker det fint :O)

Hvis du gider smide et svar Nielle, så får du point for det oprindelige spg.

Kalle
Avatar billede nielle Nybegynder
06. september 2007 - 20:35 #9
Svar :^)
Avatar billede kalle_mod Nybegynder
06. september 2007 - 21:00 #10
Takker for hjælpen :O)

Kalle
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