Array-Problem

sunstyle

Mitglied
Halloah!

Ich habe folgendes Problem;

Ich deklariere beim laden meines Form2 ein Array:

Code:
    Dim messageArray As Long
    ReDim messageArray(1 To 1)

Sobald ich auf einen Button klicke wird eine MySQL Abfrage durchgeführt und eine ListBox mit deren Ergebnis (Der name der Nachricht) gefüttert, wobei jede Zeile der ListBox ebenfalls einen index mit i erhält.
Gleichzeitig fülle ich das Array messageArray mit der ID der Nachrichten und dem dazugehörigen i.

Soll heißen ich möchte folgendes verwirklichen:

Eine ListBox die Nachrichten aufzählt mit deren Titel.
Ein Array dass die IDs der Nachrichten enthält.

Beides wird durch die Zahl i "verbunden".

Wenn ich nun auf einen Eintrag der ListBox Doppelklicke soll mir eine Messagebox ausgeben wie die ID der Nachricht lautet.

Das versuch ich folgendermaßen:

Code:
Private Sub List1_DblClick()

    If List1.SelCount <> 0 Then
        
        MsgBox (messageArray(List1.ListIndex))
                
    End If

End Sub

Allerdings liefert er mir ein leeres Ergebnis zurück, keine ID, nichts.

Aber wieso ist das so? Ist meine Methode überhaupt sinnvoll? Weil ich keine andere Idee hatte. Bin noch nicht so versiert in Visual Basic und konnte daher nichts mit dem Tipp eines Freundes anfangen doch Klassen zu benutzen (er sagte mir nur "Nimm doch Klassen", aber erklären konnte er mir nicht wie, denn er hat dafür keine Zeit (...))
Daher wär ich euch dankbar wenn wirs bei dieser Methode belassen können.

Ich nehme an dass mein Array einfach nicht übergeben wird, bzw. dessen Inhalt.

So, ich hoffe auf eure Unterstützung.
 
Also zuerst deklarierst du ein Array:

Code:
Dim messageArray As Long
ReDim messageArray(1)

Als nächstes musst du jedes mal, wenn ein Element dazu kommt, das Array erweitern (außer du weißt von Anfang an wie viele Elemente du hast)
Code:
ReDim Preserve messageArray(UBound(messageArray)+1)

Durch den Zusatz "Preserve" sorgst du dafür, dass die älteren Elemente nicht gelöscht werden.
 
Zuletzt bearbeitet:
Ja, das habe ich so auch gemacht, das Array wird ja auch gefüttert, nur wenn ich es dann bei meinem Doppelklick wieder aufrufen will (z.b. halt messageArray(3)) dann kommt ein leeres Ergebnis.

Mittlerweile kommt aus unerklärlichen Gründen folgender Fehler beim Starten des Programmes;

"Expected Array" und der Mauszeiger springt auf die Zeile

"ReDim messageArray(1)"

Es ist zum verzweifeln.
 
OK, den Array-Fehler hab ich auch gemacht ... Klammern vergessen:

Code:
Dim messageArray() As Long
ReDim messageArray(1)

Hast du das Array auch global definiert? Ein anderer Fehler würde mir spontan nicht einfallen, wenn das Array gefüllt wird, aber gerade in der DblClick-Funktion leer ist :rolleyes:
 
Okay das hätte ich auch selber sehen können, mist.

Nächstes Problem: Bei der Zeile: "ReDim Preserve messageArray(UBound(messageArray) + 1)"

kommt der Fehler: "Invalid ReDim".
 
Hast du die Deklaration auch genauso geschrieben wie ich? Wenn du das hier am Anfang stehen hast, müsste es gehen:
Code:
Dim messageArray() As Long
ReDim messageArray(1)


... wenn du das hier stehen hast:
Code:
Dim messageArray() As Long
ReDim messageArray(1 to 1)
musst du entsprechend auch den ReDim ändern:
Code:
ReDim Preserve messageArray(1 to UBound(messageArray) + 1)
 
Hi, kannst du mal bitte einen größeren codeschnipsel liefern? weil ich kann dein Problem so nicht nachvollziehen, bei mir klappts.
 
Ja, das ganze sieht folgendermaßen aus:

Code:
Sub Form_Load()
    
    Dim i As Integer
    Dim variable1 As String * 100
    Dim variable2 As Long
    Dim messageArray() As Long
    ReDim messageArray(1)
    
End Sub

Code:
Private Sub Image2_Click()
    
    List1.Clear
    i = 0

        connect
        sSQL = "select messagetopic,messageid from fw_messages where usertoid = '" & Image1.Tag & "'"
        Set oRs = oConn.Execute(sSQL)
        If oConn.Error.Number = 0 Then
        While Not oRs.EOF
        variable1 = oRs.Fields(0).Value
        variable2 = oRs.Fields(1).Value
                
        List1.AddItem variable1, i
        ReDim Preserve messageArray(i)
        messageArray(i) = variable2
        i = i + 1
                
        oRs.MoveNext
        Wend
        If variable1 > 0 Then
        List1.Visible = True
        Else
        List1.Visible = False
        Label2.Visible = True
        Label2.Caption = "- Keine Nachrichten vorhanden -"
        End If
        Else
        MySQL_Error
        End If
        oConn.CloseConnection
        Exit Sub
            
End Sub

Code:
Private Sub List1_DblClick()

    If List1.SelCount <> 0 Then
        
        MsgBox (messageArray(List1.ListIndex))
        
    End If

End Sub

Wenn ich jetzt auf den button zum Abfragen drücke kommt bei mir die Meldung "Variable not defined" und es springt auf die Zeile "ReDim Preserve messageArray(i)"
 
"Variable not defined" ist ja schonmal eine schönere Fehlermeldung.

Wie ich bereits sagte musst du die Variablen global deklarieren. Alles, was du im Form_Load als Variable dimensionierst, dürfte in deiner Click-Prozedur schon nicht mehr vorhanden sein.

Globale Variablen werden außerhalb aller Prozeduren deklariert - also quasi direkt nach "Option Explicit"
(falls du das nicht automatisch drin hast, würd ich das immer als erste Zeile schreiben)
 
Zurück