Hallo,
gibt es eine Möglichkeit eine Abfrage zu erstellen, welche die „Treffer“ sortiert nach der Anzahl der Übereinstimmung mit mehreren OR - Bedingungen in der WHERE-Klausel?
Komplizierter konnte ich es nicht ausdrücken…
Oder muß ich das ganze „per Hand“ programmieren?
gibt es eine Möglichkeit eine Abfrage zu
erstellen, welche die „Treffer“ sortiert
nach der Anzahl der Übereinstimmung mit
mehreren OR - Bedingungen in der
WHERE-Klausel?
Ich habe es ehrlich gesagt nicht verstanden. Geht es vielleicht mit einem Beispiel?
Ich denke, daß Problem läßt sich lösen, indem du die or Bedingungen in einzelne Spalten packst wobei dort dann 1 bzw. 0 steht (true/false)…
Als letztes Feld summierst du dann die Werte aller or-Bedingungen
Nun zeigst du alle Werte an wo mindestens eine 1 (true) erscheint sortiert nach dem letzten Feld…
Gruß
Bernd
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Also mal zur Info:
Ich habe zwei Listenfelder.
Images wird zur Darstellung der Suchergebnisse verwendet. In sw_suchen_selected sind die Programme drinne, nach denen gesucht werden soll.
Desweiteren sind da noch zwei Tabellen die miteinander über ImageID verknüpft sind.
Ich bastel mir also die SQL Anweisung im VBA zusammen und das Ergebnis bastel ich wieder zu einem String zusammen, und gebe ihn in dem Listenfeld „images“ aus.
Wenn du eine einfachere Idee hast, wie man in Access in einem Listenfeld eine Zeile hinzufügen kann, dann wäre ich dir sehr dankbar.
Schau es dir mal an (hier sieht es etwas blöd aus…) und wenn du noch Fragen hast, oder sogar einen Fehler gefunden hast, dann melde dich doch nochmal.
cu
raiko
Private Sub Suchen_Click()
Dim i As Integer
Dim squelle As String
Der String-Verkettungs-Operator ist „&“, nicht „+“ ("+" geht auch - aber nur manchmal - wenn z.B. einer der Operanden numerisch ist, bekommt man Probleme - daher: Finger weg!)
Set qdf = db.CreateQueryDef("",
Sqlstring)
Set rst = qdf.OpenRecordset()
geht einfacher:
Set rst = qdf.OpenRecordset(SQLString, dbopendynaset)
For i = 0 To
(sw_suchen_selected.ListCount)
If i =
(sw_suchen_selected.ListCount) Then
Exit For
End If
heisst doch wohl besser
For i = 0 To(sw_suchen_selected.ListCount) -1
Wenn du deinen Code mit dem Pre-Tag formatiert hättest, könnte man ihn auch lesen…
Der String-Verkettungs-Operator ist
„&“, nicht „+“ ("+" geht auch - aber nur
manchmal - wenn z.B. einer der Operanden
numerisch ist, bekommt man Probleme -
daher: Finger weg!)
Bei Strings hatte ich bis jetzt noch nie Probleme. Wenns andere Variablen sind, dann nehme ich auch &
Set qdf = db.CreateQueryDef("",
Sqlstring)
Set rst = qdf.OpenRecordset()
geht einfacher:
Set rst =
qdf.OpenRecordset(SQLString,
dbopendynaset)
Ich weiß, aber daß ist irgend so eine Macke von mir…
For i = 0 To
(sw_suchen_selected.ListCount)
If i =
(sw_suchen_selected.ListCount) Then
Exit For
End If
heisst doch wohl besser
For i = 0
To(sw_suchen_selected.ListCount) -1
Das ist noch ein überbleibsel aus den Test. Da wurde mal noch etwas anderes gemacht in der Bedingung. Ist inzwischen schon entfernt.
Wenn du deinen Code mit dem Pre-Tag
formatiert hättest, könnte man ihn auch
lesen…
Da hatte ich mal was in der Beschreibung gelesen. Gestern hatte ich es aber nicht mehr gefunden. Deshalb wußte ich nicht mehr genau, wie das Tag hies.
Bei Strings hatte ich bis jetzt noch nie
Probleme. Wenns andere Variablen sind,
dann nehme ich auch &
Nun ja - auf jeden Fall ist „+“ für Strings nicht so recht definiert (wenn man bei VB überhaupt von einer Sprachdefinition sprechen kann) und kann jederzeit bei einer neuen Version wegfallen oder seine Funktionalität ändern. (MS hat die Funktionalität des Operators auch schon in der Vergangenheit geändert, in Access 2.0 verhielt sich „+“ z.B. im Zusammenhang mit Nullwerten anders.)