Hilfe! Mein Listenfeld zeigt keine Daten an

Von: , Frage gestellt am Mi, 10. Dez 2008

Hallo,

Ich habe eine Suche nach vier Kriterien (Matrikelnummer, Name, Vorname, Ort), die im Formular eingegeben werden können und will die Ergebnisse im selben Formular in einem Listenfeld erscheinen lassen. Nach meinem Code tun sie das aber nicht. Woran liegt es? Die Trefferzahl wird angezeigt. Hier mein Code:

Private Sub Datensatz_suchen_Click()

Dim Krit(1 To 4) As String
Dim SQL As String
Dim Anz As Byte, i As Long, treffer As Long 'Anz zählt mit, wieviele Bedingungen es gibt
Dim ergebnis As Control

'bis zu vier Suchfelder als Kriterien merken

If Not IsNull(Me!Matrikelnummer) Then
Anz = Anz + 1
Krit(Anz) = "MNr LIKE '" & Me!Matrikelnummer & "%'"
End If

If Not IsNull(Me!Name) Then
Anz = Anz + 1
Krit(Anz) = "strApplicantName LIKE '" & Me!Name & "%'"
End If

If Not IsNull(Me!Vorname) Then
Anz = Anz + 1
Krit(Anz) = "strApplicantVorname LIKE '" & Me!Vorname & "%'"
End If

If Not IsNull(Me!Ort) Then
Anz = Anz + 1
Krit(Anz) = "strApplicantOrt LIKE '" & Me!Ort & "%'"
End If




Select Case Anz
Case 0 'es sind keine Kriterien erfaßt
MsgBox "Sie haben keine Suchkriterien erfasst!", vbExclamation, "Eingabefehler"
Me!Matrikelnummer.SetFocus
Exit Sub

Case 1 'es ist ein Kriterium erfaßt
SQL = SQL & "WHERE " & Krit(1)

Case Else 'es gibt mehr als ein Kriterium
SQL = SQL & "WHERE " & Krit(1)
For i = 2 To Anz
SQL = SQL & " AND " & Krit(i)
Next
End Select

treffer = GetTreffer(SQL)

Set ergebnis = Me!lstSuchergebnis

Select Case treffer
Case 0
MsgBox "Leider keine Treffer.", vbInformation, "Antragsuche"
Me!txtTreffer = treffer
ergebnis.RowSource = ""

Case Is > 100
MsgBox "Es können maximal 100 Treffer ausgegeben werden, Ihre Kriterien würden" & _
"aber " & treffer & " Treffer ergeben." & vbCrLf & vbCrLf & "Geben Sie genauere" & _
" Kriterien ein!", vbExclamation, "Antragsuche"

Me!txtTreffer = 0
ergebnis.RowSource = ""

Case Else

SQL = "SELECT MNr as Matrikelnummer, strApplicantName as Nachname," & _
" strApplicantVorname as Vorname, lngClaimAntrag_fuer as Semester," & _
"strClaimBearbeiterkürzel as Aktenzeichen FROM qry_frm_antrag" & SQL & _
SQL = SQL & "ORDER BY strApplicantName"


ergebnis.RowSource = SQL
Me!txtTreffer = treffer
End Select

End Sub

'Trefferanzahl prüfen
Public Function GetTreffer(ByVal Krit As String) As Long

Dim SQL As String
Dim dbcon As ADODB.Connection
Dim rs As ADODB.Recordset
SQL = "SELECT Count(*) as treffer from qry_frm_Antrag "
SQL = SQL & Krit

Set dbcon = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open SQL, dbcon
GetTreffer = rs!treffer

rs.Close
Set dbcon = Nothing

End Function

10 Antworten zu dieser Frage

  1. Antwort von nach 2 Stunden 0 hilfreich
    Re: Hilfe! Mein Listenfeld zeigt keine Daten an

    Hallo,
    auf den ersten Blick:

    ersetz mal "%'" durch "*'"


    und ohne den kompletten Code analysiert zu haben.



    Viele Grüße vom Bodensee
    Franz , DF6GL

    PS: Feedback erwünscht!

    • Antwort von nach 19 Stunden 0 hilfreich
      Platzhalter

      Hallo Franz,

      Danke für die Antwort.
      Ich arbeite mit Access-Projekt und Sql-Server, daher % statt * als Platzhalter.
      Gruß
      Roter Adler

  2. Antwort von nach 7 Stunden 0 hilfreich
    Re: Hilfe! Mein Listenfeld zeigt keine Daten an

    Hallo, Woran liegt es?
    - deine Artikelnummer ist ein Text oder eine Zahl?
    - du führst kein Requery aus
    - Me.NAME ist der Name des Formular und eine geschützter Begriff
    http://support.microsoft.com/kb/286335/de

    Frage: warum machst du es nicht einfacher:
    - alle Suchfelder mit "*" vorbelegen
    - eckige Klammern verwenden für Feldbezeichnungen der Tabelle
    - SQL-Kriterium fest programmieren, da du ja nur AND verwendest:

    Beispiel:
    SQL_Kriterium = _
    "([MNr] LIKE '" & Me!Matrikelnummer & "') and " & _
    "([strApplicantName] LIKE '" & Me!xName & "') and " & _
    "([strApplicantVorname] LIKE '" & Me!Vorname & "') and " & _
    "([strApplicantOrt] LIKE '" & Me!Ort & "')"

    Die Eingabe würde dann z.B. so aussehen:
    MNr = "123456"
    xName = "*"
    Vorname = "*"
    Ort = "*"

    So ist auch die Suche nach z.B. "*meier*" möglich und nicht nur wie bei dir "meier*". Das Sternchen muss halt vom User mit eingegeben werden!

    Grüße aus Schönberg (Lübeck)
    Wolfgang
    (Netwolf)

    • Antwort von nach 21 Stunden 0 hilfreich
      Re^2: Hilfe! Mein Listenfeld zeigt keine Daten an

      Hallo Netwolf,

      danke für die Anregungen.

      Name, da hast Du Recht, das habe ich übersehen

      und Matrikelnummer ist eine Zahl, aber wenn nicht LIKE, was dann für ein Operator, damit auch Nummern, die nur mit der z.B. "1" anfangen genommen werden?

      An welcher Stelle sollte ein Requery hin?

      Die Sache mit den Sternchen überall eingeben wollte ich meinen Nutzern ersparen und eigentlich liefert die Abfrage (zumindest die GetTreffer) auch jedesmal eine richtige Trefferzahl. Nur die Abfrage in der "Case Else"-Bedingung wird nicht als Datensatzherkunft(ergebnis.rowsource) genommen, so daß das Listenfeld nur eine leere Tabelle mit vorgezeichneter Überschriftseinteilung anzeigt. Woran aber liegt das? (Fehlendes Requery?)

      Gruß
      Roter Adler

      • Antwort von nach 22 Stunden 0 hilfreich
        Re^3: Hilfe! Mein Listenfeld zeigt keine Daten an

        Hallo Roter Adler, und Matrikelnummer ist eine Zahl, aber wenn nicht LIKE, was
        dann für ein Operator, damit auch Nummern, die nur mit der
        z.B. "1" anfangen genommen werden?
        wandele die Artikelnummer in einen String, dann kannst du sie mit einem String vergleichen.

        STR(Artikelnnr) like "1*" An welcher Stelle sollte ein Requery hin?
        ans Ende, nach dem END CASE Woran aber liegt das? (Fehlendes Requery?)
        ganz sicher, da ja die Ansicht aktualisiert werden muss

        Grüße aus Schönberg (Lübeck)
        Wolfgang
        (Netwolf)

        • Antwort von nach einem Tag 0 hilfreich
          Listenfeld immernoch leer

          Hallo Netwolf,

          danke für Deine Beiträge, aber mein Listenfeld zeigt immernoch nicht die Suchergebnisse an.

          Noch eine Idee?

          Gruß
          Roter Adler

          • Antwort von nach einem Tag 0 hilfreich
            Re: Listenfeld immernoch leer

            Hallo Roter Adler, Noch eine Idee?
            wie sieht dein Code jetzt aus?


            Grüße aus Schönberg (Lübeck)
            Wolfgang
            (Netwolf)

            P.S. schick mal die MDB rüber, dann kann ich mal prüfen

            • Antwort von nach einem Tag 0 hilfreich
              Re^2: Listenfeld immernoch leer

              Hallo Netwolf,

              Das Problem ist eingegrenzt. Es ist diese Anweisung. Man kann wohl in die "Rowsource" das SQL (mit der Where-KLausel) nicht so einschließen. Ohne das Fettgedruckte bekomme ich eine Listenanzeige, allerdings berücksichtigt sie die Where-Klausel nicht und damit werden alle 24000 Datensätze in die Liste geschrieben.

              ergebnis.RowSource = "SELECT [MNr] as Matrikelnr, [strApplicantName] as Nachname," & _
              " [strApplicantVorname] as Vorname, [lngClaimAntrag_fuer] as Semester," & _
              "[strClaimBearbeiterkürzel] as Aktenzeichen FROM qry_frm_antrag" & SQL && _
              "ORDER BY strApplicantName"

              Geht das anders? Diese SQL ist ja ein case:

              Case 1 'es ist ein Kriterium erfaßt
              SQL = "WHERE " & Krit(1)

              Case Else 'es gibt mehr als ein Kriterium
              SQL = "WHERE " & Krit(1)
              For i = 2 To Anz
              SQL = SQL & "AND " & Krit(i)
              Next

              Gruß
              Roter Adler

            • Antwort von nach einem Tag 0 hilfreich
              Re^3: Listenfeld immernoch leer

              Hallo Roter Adler, Das Problem ist eingegrenzt. Es ist diese Anweisung. Man kann
              wohl in die "Rowsource" das SQL (mit der Where-KLausel) nicht
              so einschließen. Ohne das Fettgedruckte bekomme ich eine
              Listenanzeige, allerdings berücksichtigt sie die Where-Klausel
              nicht und damit werden alle 24000 Datensätze in die Liste
              geschrieben.
              auch wenn du nur ein Kriterium hast? Dein SQL-String wird nicht größer als 255 Zeichen? ergebnis.RowSource = "SELECT [MNr] as Matrikelnr,
              [strApplicantName] as Nachname," & _
              -> kein Leerzeichen am Ende! " [strApplicantVorname] as Vorname,
              [lngClaimAntrag_fuer] as Semester," & _
              -> kein Leerzeichen am Ende! "[strClaimBearbeiterkürzel] as Aktenzeichen FROM
              qry_frm_antrag" & SQL && _
              -> hier sind zwei & Zeichen!?
              -> kein Leerzeichen am Ende! "ORDER BY strApplicantName"
              -> kein Leerzeichen am Anfang! (weil es in der Where-Klausel nicht drin ist) Geht das anders? Diese SQL ist ja ein case:

              Case 1 'es ist ein Kriterium erfaßt
              SQL = "WHERE " & Krit(1)

              Case Else 'es gibt mehr als ein Kriterium
              SQL = "WHERE " & Krit(1)
              For i = 2 To Anz
              SQL = SQL & "AND " & Krit(i)
              -> kein Leerzeichen am Anfang von AND! Next
              lasse dir doch einfach mal den kompletten SQL-String vor der Ausführung mal anzeigen, häufig sieht man dann schon die kleinen Flüchtigkeitsfehler :-)

              z.B. das fehlende Semikolon am Ende der SQL-Anweisung!

              Grüße aus Schönberg (Lübeck)
              Wolfgang
              (Netwolf)



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!