Geister? lst.removeitem aber der lst.listcount bleibt bei gefundenen Einträgen

zioProduct

Erfahrenes Mitglied
Ok, nun hab ich für mich, ein fast unlösbares Problem:

Ich habe die Such_Form, wo ich aus einer Listbox einen Prospekt auswählen kann; Bei Doppelklick öffnet sich die EditierForm, bei welcher eine Liste ist, die mir das Fachgebiet und das dazugehörige Stichwort anzeigt. Aus dieser Listbox kann ich vorhandene Einträge löschen, welches ich mit:
Code:
Private Sub BtnDelStichworte_Click()
Dim i As Integer
Dim sBuf As String

On Error GoTo Err_BtnDelStichworte_Click


LstAusgewaehlteStichworte.RemoveItem (LstAusgewaehlteStichworte.ListIndex)


Exit_Sub:
    Exit Sub

Err_BtnDelStichworte_Click:
    MsgBox "Fehler in BtnDelStichworte_Click", vbOKOnly
    Resume Exit_Sub
    
End Sub
mache. Nun kann ich in dieser Listbox, neue Einträge hinzufügen, oder einfach einen oder mehrere Löschen, und anschliessend Speichern.

Speichern erfolgt mit:
Code:
                       sqlDelStich = "DELETE * FROM Stichworte WHERE ProspektId = " + TxtID.Value
                       db.Execute (sqlDelStich)
                       
                       i = LstAusgewaehlteStichworte.ListCount - 1
                       While i > -1
                        sqlStich = "INSERT INTO Stichworte (ProspektId,Fachgebiet,Stichworte) VALUES(" + TxtID.Value + ",'" + LstAusgewaehlteStichworte.Column(0, i) + "','" + LstAusgewaehlteStichworte.Column(1, i) + "')"
                        db.Execute (sqlStich)
                        i = i - 1
                       Wend
Nach dem Speichern kehre ich sofort wieder in die SuchenForm zurück. Nun wenn ich meinen Prospekt nochmals editieren will, sollte er mir ja nur noch die Prospekte zeigen, die ich vor dem Speichern in der Listbox hatte. Beim Debuggen findet er auch nur diese,
(btnsuchen)
Code:
sql4 = "SELECT * FROM Stichworte WHERE ProspektId =" + s
            Set rs4 = db.OpenRecordset(sql4, dbReadOnly)
            Set lst = Form_Editieren![LstAusgewaehlteStichworte]
            
            While Not rs4.EOF
            
            sBuf2 = rs4.Fields("Fachgebiet") + ";" + rs4.Fields("Stichworte") + ";"
            sBuf3 = sBuf3 + sBuf2
            rs4.MoveNext
            Wend
                      
            ReadStichworte lst, sBuf3
Bis Hier hin würde noch alles Stimmen, doch dann ruft er mir die ReadStichworte auf, und hier kommt das Problem:
Code:
Sub ReadStichworte(lst As ListBox, sIns As String)
Dim sBuf As String
Dim i, k As Integer
Dim bNotInsert As Boolean
    
    If Len(sIns) > 0 Then
        sBuf = ""
        'Testen ist Eintrag schon vorhanden
        bNotInsert = True
        For i = 0 To lst.ListCount - 1
            For k = 0 To lst.ColumnCount - 1
                sBuf = sBuf + lst.Column(k, i)
                If (k <> lst.ColumnCount - 1) Then
                    sBuf = sBuf + ";"
                End If
            Next k
            If sBuf = sIns Then
                bNotInsert = False
            End If
            sBuf = ""
        Next i
    
        If bNotInsert Then
            For i = 0 To lst.ListCount - 1
                For k = 0 To lst.ColumnCount - 1
                    sBuf = sBuf + lst.Column(k, i) + ";"
                Next k
            Next i
    
            sBuf = sBuf + sIns
            lst.RowSource = sBuf
            'lst.ListIndex = 1
            '.TabIndex = 1  'lst.ListCount - 1
        End If
    End If

End Sub

Er findet bei btnedit nur die Einträge die auch da sind, jedoch ist der lst.listcount immer noch so hoch, wie bevor ich in FormEditieren gespeichert habe, und aus weiss ich nicht was für Gründen, Schreibt er mit die Daten, die ich schon gelöscht habe, wieder in die ListBox im EditierForm, plus die neuen, falls Vorhanden oO

Für mich ist das Magie :) Wie kann ich den lst.listcount vor dem ReadStichworte vernichten, dass er mir dort nur die aktuellen Werte besorgt, und nicht den ListCount von ursprünglicher Liste

Danke jetzt schon an die GhostBusters :)

mfg zioP
 
Du machst die Listbox nicht leer sondern schaust nur nach ob du die Einträge die hinzugefügt wurden schon da sind.
Mach am Anfang deiner Routine ReadStichworte ein lst.clear dann hast du die die gelöschten schon mal raus und die anderen items kannst du dann eigentlich ohne weitere Prüfungen reinschreiben


Gruß bb
 
Zurück