Avatar billede kalle_mod Nybegynder
25. februar 2006 - 21:16 Der er 9 kommentarer og
1 løsning

"Expected function or variable"-fejl?

Hejsa eksperten.dk

jeg har for første gang i 3 år sat mig til at lave et lille program i vb, og nu er jeg stødt på denne fejl når jeg forsøger at teste mit program...

Compile error:
Expected Function or variable

Min kode er som følger:

Option Explicit
Dim conn As connection
Dim rs As Recordset
Dim arrListe(100) As String
Function CreateList(Liste() As String)
List1.Clear
For i = 0 To 100
If Liste(i) = "" Then
Exit For
Else
List1.AddItem Liste(i)
End If
Next
End Function
Function connection()
conn.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & App.Path & "\items.mdb"
End Function
Private Sub Combo1_Click()
If Combo1.Text = "Armors" Or Combo1.Text = "Weapons" Or Combo1.Text = "Belts" Or Combo1.Text = "Boots" Or Combo1.Text = "Gloves" Or Combo1.Text = "Shields" Or Combo1.Text = "Helms" Then
Combo2.Visible = True
Else
Combo2.Visible = False
connection
If Combo1.Text = "Runewords" Then
Set rs = conn.Execute("select navn from runewords, runes order by navn")
Else
Set rs = conn.Execute("select navn from uniques where type='" & Combo1.Text & "' order by navn")
End If
If Not rs.EOF Then
iTal = 0
Do While Not rs.EOF
arrListe(iTal) = rs("navn")
iTal = Val(iTal) + 1
Loop
Set iTal = Nothing
End If
Set rs = Nothing
conn.Close
CreateList (arrListe)
Set arrListe = Nothing
End Sub
Private Sub Combo2_click()
connection
Set rs = conn.Execute("select navn from uniques where type='" & Combo1.Text & "' and subtype='" & Combo2.Text & "' order by navn")
If Not rs.EOF Then
iTal = 0
Do While Not rs.EOF
arrListe(iTal) = rs("navn")
iTal = Val(iTal) + 1
Loop
Set iTal = Nothing
End If
CreateList (arrListe)
Set arrListe = Nothing
Set rs = Nothing
conn.Close
End Sub
Private Sub Command1_Click()
Dim iTal As Integer
Dim rs2 As Recordset

If Combo3.Text = "Søgeemne" Then
MsgBox "Du skal vælge et søgeemne først"
Else
connection
If Combo3.Text = "Stats" Then
Set rs = conn.Execute("select subid from weapon, armor, other, runes where stats like *" & Text1.Text & "*")
If Not rs.EOF Then
iTal = 0
Do While Not rs.EOF
Set rs2 = conn.Execute("select navn from uniques, runewords where id=" & rs("subid") & " order by navn")
arrListe(iTal) = rs("navn")
iTal = Val(iTal) + 1
Loop
Set rs2 = Nothing
Set iTal = Nothing
End If
Else
Set rs = conn.Execute("select navn from uniques, runewords where " & Combo3.Text & " like *" & Text1.Text & "* order by navn")
If Not rs.EOF Then
iTal = 0
Do While Not rs.EOF
arrListe(iTal) = rs("navn")
iTal = Val(iTal) + 1
Loop
Set iTal = Nothing
End If
End If
CreateList (arrListe)
Set rs = Nothing
Set arrListe = Nothing
conn.Close
End If
End Sub
Private Sub Form_Load()
Combo1.AddItem "Itemtype"
Combo1.AddItem "Amulets"
Combo1.AddItem "Armors"
Combo1.AddItem "Belts"
Combo1.AddItem "Boots"
Combo1.AddItem "Charms"
Combo1.AddItem "Circlets"
Combo1.AddItem "Class specific"
Combo1.AddItem "Gloves"
Combo1.AddItem "Helms"
Combo1.AddItem "Jewels"
Combo1.AddItem "Rings"
Combo1.AddItem "Runes"
Combo1.AddItem "Runewords"
Combo1.AddItem "Shields"
Combo1.AddItem "Weapons"

Combo2.AddItem "Normal unique"
Combo2.AddItem "Exceptional unique"
Combo2.AddItem "Elite unique"

Combo3.AddItem "Søgeemne"
Combo3.AddItem "Class"
Combo3.AddItem "Item-type"
Combo3.AddItem "Ladder-only"
Combo3.AddItem "Navn"
Combo3.AddItem "Patch"
Combo3.AddItem "Stats"

Combo2.Visible = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
conn.Close
Set conn = Nothing
End Sub
Private Sub List1_Click()
Dim rs2 As Recordset
Dim strItem As String
Set rs = conn.Execute("select * from uniques where navn='" & List1.Text & "'")
If rs.EOF Then
Set rs = conn.Execute("select * from runewords where navn='" & List1.Text & "'")
If rs.EOF Then
Set rs = conn.Execute("select * from runes where navn='" & List1.Text & "'")
If rs.EOF Then
MsgBox "Beklager, der findes ingen item med det navn"
Else
'det er en rune
strItem = rs("navn") & Chr(13) & Chr(13) & "Weapons:" & Chr(13) & rs("weapon") & Chr(13) & Chr(13) & "Armor/Helms/Shields" & Chr(13) & rs("armor") & Chr(13) & Chr(13) & "Level Required" & Chr(13) & rs("lvl")
End If
Else
'det er et runeword
strItem = rs("navn") & Chr(13) & rs("item") & Chr(13) & Chr(13) & rs("runer") & Chr(13) & Chr(13) & Replace(rs("stats"), "<br>", Chr(13)) & Chr(13)
If rs("ladder-only") = True Then
strItem = strItem & "OBS: Ladder only runeword!" & Chr(13)
End If
strItem = strItem & Chr(13) & "Virker fra patch " & rs("patch")
End If
Else
'det er et unique item
strItem = rs("navn") & Chr(13) & rs("item-type") & Chr(13) & Chr(13)
If rs("type") = "våben" Then
Set rs2 = conn.Execute("select * from weapon where subId=" & rs("id") & "")
strItem = strItem & rs2("dmg") & Chr(13)
ElseIf rs("type") = "armor" Or rs("type") = "shield" Or rs("type") = "gloves" Or rs("type") = "boots" Or rs("type") = "belt" Or rs("type") = "helm" Then
Set rs2 = conn.Execute("select * from armor where subId=" & rs("id") & "")
strItem = strItem & rs2("def") & Chr(13)
Else
Set rs2 = conn.Execute("select * from other where subId=" & rs("id") & "")
End If
strItem = strItem & Replace(rs2("req"), "<br>", Chr(13)) & Chr(13)
If rs("class") <> "" Then
strItem = strItem & "[" & rs("class") & "]" & Chr(13)
End If
strItem = strItem & Chr(13) & rs2("stats") & Chr(13)
If rs("ladder-only") = True Then
strItem = strItem & "OBS: Ladder only item" & Chr(13)
End If
strItem = strItem & Chr(13) & "Findes fra patch " & rs("patch")
End If
Label2.Caption = strItem
Image1.Picture = LoadPicture(App.Path & "\images\" & List1.Text & ".jpg")
End Sub
Private Sub List1_LostFocus()
Label2.Caption = ""
Image1.Picture = LoadPicture()
End Sub

Når jeg vælger et punkt i Combo1 er det fejlen kommer i Combo1_Click(), hvis jeg trykker på knappen for at søge kommer fejlen i Command1_click()

Kan nogen hjælpe mig med mit lille problem?
Avatar billede kalle_mod Nybegynder
25. februar 2006 - 21:21 #1
Er forresten ikke sikker på om det jeg forsøger i CreateListe(funktionen øverst i min kode) overhovedet er muligt, men hvis det ikke er vil jeg gerne vide om i har andre forslag, ideen er at nogle data(samlet i et array pt.) skal overføres og laves til en liste i et listefelt

Undskylder også lige at der ikke er mellemrum mellem de forskellige funktioner :)
Avatar billede joern Nybegynder
25. februar 2006 - 21:48 #2
Hej.

Med debuggeren kan du se, hvor det er, der henvises til en funktion, der ikke er deklareret eller variabel der ikke er dimensioneret.
Avatar billede kalle_mod Nybegynder
25. februar 2006 - 21:51 #3
lige præcis, den giver mig en gul baggrund på linien "Private sub Combo1_click()" når det er Combo1 jeg ændrer ved og "Private sub Command1_click()" når jeg trykker på knappen for at søge :). Mit problem er at jeg ikke kan se hvilken funktion eller variabel den skulle mangle i den linie?
Avatar billede joern Nybegynder
25. februar 2006 - 22:47 #4
Hej.

Ok, du skrev nederst hvor der blev vist fejl.  Det virker bare lidt overvældende med 70 linier kildetekst. Jeg så det ikke.

Jeg har for ganske nylig fået fat i en VB6, men har brugt 5'eren i 5-6 år.
Dér kan man i hvert fald ikke skrive:
If Combo1.Text = "Armors" Or Combo1.Text = "Weapons" Or Combo1.Text = "Belts" Or Combo1.Text = "Boots" Or Combo1.Text = "Gloves" Or Combo1.Text = "Shields" Or Combo1.Text = "Helms" Then

Mon ikke du skal udelade 'combo1.text =' alle de efterfølgende gange?
If Combo1.Text = "Armors" Or "Weapons" Or "Belts" Or "Boots" Or "Gloves" then

Men som nævnt, jeg har aldrig prøvet 'if or'

Ca. i hvilken linie forekommer command(1) ?
Avatar billede kalle_mod Nybegynder
26. februar 2006 - 17:48 #5
i linie 59: "private sub Command1:click()"

Kalle
Avatar billede joern Nybegynder
26. februar 2006 - 18:19 #6
Hej.

Er det hele resten af koden, der hører under Command1_Click ?  Det er ret heftigt.
Jeg kan ikke hjælpe dig, men vil anbefale at du forenkler koden ved en eller anden form for opdeling.  Du kender vel til at indsætte breakpoints ?  Med tasten F8 ka ndu fra et sådant køre én instruks ad gangen.  Det kan tage tid i løkker, men man kan evt. midlertidigt begrænse løkker's omfang.
Avatar billede kalle_mod Nybegynder
27. februar 2006 - 14:36 #7
Nej resten af koden hører ikke til command1_click(), der er en end sub et sted længere nede :)

Prøver lige det med breakpoints og ser hvad det er for noget :)

Kalle
Avatar billede kalle_mod Nybegynder
01. marts 2006 - 10:33 #8
Kunne ikke få breakpoints til at virke, men har selv fundet fejlen, den lå i noget med min connection funktion. Flyttede lidt rundt på tingene og fjernede min funktion connection() og så virkede det :)

Takker for tiden du brugte på at forsøge at hjælpe mig joern
Avatar billede joern Nybegynder
01. marts 2006 - 12:08 #9
Ok.

For at indsætte braekpoint markerer du den linie i kildeteksten, hvor det skal starte.  I menuen vælger du Debug / Toggle breakpoint.  Når du starter programmet stadser udførelsen ved breakpointet og du kan udføre én linie ad gangen med F8-tasten.
Avatar billede kalle_mod Nybegynder
01. marts 2006 - 15:08 #10
jeg prøvede med at højreklikke og vælge "breakpoint" men det var som om den bare ignorerede det totalt og fortsatte til den linie der fejlede(den lå vidst 2 linier længere nede)

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