Access97: Abfrage mit Trefferquote

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?

cu
raiko

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?

Komplizierter konnte ich es nicht
ausdrücken…

Wohl wahr.

Oder muß ich das ganze „per Hand“
programmieren?

Werden wir sehen…

Gruß

J.

Hi!

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]

Danke,
in der Zwischenzeit habe ich es doch noch mit einer SELECT Count Abfrage hinbekommen…

cu
raiko

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi!

Könntest mir mal interessehalber die Abfrage posten?!?

Gruß

Bernd

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

If check_change Then
Call speichern_frage
End If

images.RowSourceType = „Wertliste“
'images.ColumnHeads = False
images.ColumnCount = 4
images.ColumnWidths = „0,81cm;4cm;1,103cm;0,801cm;0cm“

Set db = CurrentDb

Sqlstring = "SELECT Count(Image_Content.ImageID) AS Anzahl, "
Sqlstring = Sqlstring + "Image_Content.ImageID AS ID, Image_List.Name AS Name, Image_List.Version AS Version "
Sqlstring = Sqlstring + "FROM Image_List INNER JOIN Image_Content ON Image_List.ImageID = Image_Content.ImageID WHERE "

For i = 0 To (sw_suchen_selected.ListCount)

If i = (sw_suchen_selected.ListCount) Then
Exit For
End If

Sqlstring = Sqlstring + "Image_Content.SoftwareID = " + sw_suchen_selected.Column(1, i)

If i

Vier Anmerkungen dazu:

  1. 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

  1. Wenn du deinen Code mit dem Pre-Tag formatiert hättest, könnte man ihn auch lesen…

Reinhard

  1. 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…:wink:

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.

  1. 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.

cu
raiko

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.)

Reinhard