Moin Gemeinde,
ich habe ein Problem bei dem ich leider alleine nicht weiterkomme.
Gegeben ist eine Tabelle 'tblKartenBilder'. Diese enthält relative Pfade zu Bilddateien.
Hier mal der Aufbau:
ID ID_Haupttabelle Bildpfad
1 1 \Anlagen\Karten Bilder\LS 001\LS 001 - 00001.jpg
2 1 \Anlagen\Karten Bilder\LS 001\LS 001 - 00001_01.jpg
3 2 \Anlagen\Karten Bilder\K 001\K 001 - 00059.jpg
4 3 \Anlagen\Karten Bilder\K 001\K 001 - 00060.jpg
5 4 \Anlagen\Karten Bilder\K 001\K 001 - 00061.jpg
6 5 \Anlagen\Karten Bilder\K 001\K 001 - 00053.jpg
7 6 \Anlagen\Karten Bilder\K 001\K 001 - 00052.jpg
8 7 \Anlagen\Karten Bilder\K 001\K 001 - 00051.jpg
9 8 \Anlagen\Karten Bilder\K 001\K 001 - 00058.jpg
10 9 \Anlagen\Karten Bilder\K 001\K 001 - 00056.jpg
.
.
.
ID ID_Haupttabelle Bildpfad
134 110 \Anlagen\Karten Bilder\PO 001\PO 001 - 00001.jpg
135 110 \Anlagen\Karten Bilder\PO 001\PO 001 - 00001_01.jpg
136 110 \Anlagen\Karten Bilder\PO 001\PO 001 - 00001_02.jpg
137 110 \Anlagen\Karten Bilder\PO 001\PO 001 - 00001_03.jpg
138 111 \Anlagen\Karten Bilder\PO 001\PO 001 - 00002.jpg
139 111 \Anlagen\Karten Bilder\PO 001\PO 001 - 00002_01.jpg
140 111 \Anlagen\Karten Bilder\PO 001\PO 001 - 00002_02.jpg
141 111 \Anlagen\Karten Bilder\PO 001\PO 001 - 00002_03.jpg
142 112 \Anlagen\Karten Bilder\PO 001\PO 001 - 00003.jpg
143 112 \Anlagen\Karten Bilder\PO 001\PO 001 - 00003_01.jpg
144 112 \Anlagen\Karten Bilder\PO 001\PO 001 - 00003_02.jpg
In einem Kombinationsfeld soll der entsprechende Suchbegriff ausgewählt werden. Also z.B. 'K 001' oder 'G 001' oder 'P 001' usw.
Es sollen dann nur die Bilder in einem Endlosformular angezeigt werden die dem Suchbegriff entsprechen.
Für einen ersten Test habe ich mir einen Code aus dem Internet gesucht der zwar ohne Fehlermeldung durchläuft aber auch kein Ergebins bringt.
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim suchBegriff As String
' Suchbegriff aus einem Formularfeld nehmen
suchBegriff = Karton.Value ' Sucht nach Einträgen, die mit "Test" beginnen
' SQL-String erstellen (LIKE verwenden)
strSQL = "SELECT * FROM tblKartenBilder WHERE Bildpfad LIKE '*" & suchBegriff & "';"
' Recordset öffnen
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
' Ergebnisse durchlaufen
Do While Not rs.EOF
Debug.Print rs!Bildpfad
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
Was mache ich falsch?
Ich füge eine Testdatei mal an.
Wünsche allen ein schönes Wochenende
Jörg
https://www.transfernow.net/dl/20260418PmnlYLE2 (https://www.transfernow.net/dl/20260418PmnlYLE2)
Hallo Jörg,
Dein SQL String ist nicht ganz korrekt. So wie Du es geschrieben hast, werden nur Begriffe am Ende des betreffenden Zellenfeldes gesucht.
Es muss so aussehen:
LIKE '*" & suchBegriff & "*';"
Dann klappt es auch.
Michael
Hallo Jörg,
es ist nicht notwendig ein neues Recordset mit Do While zu durchlaufen um dann die Zeilen des Formulars zu füllen. Ein einfacher Filter tuts auch.
Erstelle Dir mit Hilfe des Formulargenerators ein Formular (tabellarisch=Endlosformular) zur Tabelle tblKartenBilder.
Dann setzt Du in den Kopf des Formulars das Kombinationsfeld, welches als Datenquelle die Tabelle mit den Abkürzungen hat.
Achte bei den Einstellungen auf Anzahl Spalten 2, gebundene Spalte 2, Spaltenbreiten 0;2cm
Setze in das Click-Ereignis des (Kombinations)Suchfeldes folgenden Code:
Private Sub Suchfeld_Click()
Dim strFilter As String
Me.FilterOn = False
strFilter = "[Bildpfad] LIKE '*" & Me.Suchfeld & "*'"
Me.Filter = strFilter
Me.FilterOn = True
End Sub
Hallo Jörg,
ich weiß jetzt nicht, ob es Zufall ist, aber Informationen in Ordnernamen und Dateinamen zu verwalten, ist keine gute Idee. Eine Kategorisierung gehört als Fremdschlüssel in deine Bilddatenbank und damit entfallen sowohl die Abhängigkeiten zu den Ordnernamen als auch dem besonderen Format der Dateinamen. Das solltest du ändern.
Anbei jedoch mal eine Lösung auf Basis des vorgegebenen Dateiformats.
Knobbi38
PS:
Bitte lade deine Beispieldatenbanken nächstes mal hier im Forum hoch - auf unbekannte Filehoster wird nicht gerne zugegriffen.
@andyfau Danke. Auf den Filter bin ich kurz vorher auch gekommen :-D
@Knobbi38 Danke für die Zip. Werde ich mir anschauen. Das mit dem hochladen hatte ich iwie nicht hinbekommen.
@andyfau Wenn man schon eine Kombo so einsetzt, sollte tatsächlich auch eine Beziehung zwischen den Tabellen bestehen und dann braucht nicht mehr mit Like und Platzhaltern hantiert werden, sondern kann direkt mit den Fremdschlüssel auf Gleichheit gefiltert werden. Leider wurde das in der Beispieldatenbank falsch implementiert bzw. der Fremdschlüssel fehlt noch.
Übrigens kann das Suchmuster mit den Platzhaltern so nicht richtig funktionieren, weil z.B. diese Suchmuster "S 001" und "LS 001" in Verbindung mit den Platzhaltern keine eindeutigen Ergebnisse liefern. Hier müsste das Suchmuster entsprechend geändert werden:
strFilter = "[Bildpfad] LIKE '*[\]" & Me.Suchfeld & "*'"
Das Muster wird somit nur auf den Anfang des Ordner- bzw. Dateinamens angewendet - ebenfalls ein Designfehler beim Datenmodell.
Wie bereits angedeutet, sollte das Datenmodell dahingehend von Jörg noch geändert werden, denn das würde einiges vereinfachen.
Gruß Knobbi38