ms access sql abfrage sortiert inkonsistent

Zornbringer

Captain
Registriert
Mai 2011
Beiträge
3.903
ich habe hier eine abfrage in meiner datenbank, die ich über ein suchformular per vb aufrufe. sieht in etwa so aus:

SQL:
str_sql = "SELECT * into tabelle_suche FROM Literatur_Tabelle WHERE Titel like '*' + Forms![Suchformular]![text_suche_klasse1] + '*' and Klasse like Forms![Suchformular]![combo_klasse] ORDER BY Autor, Jahr;"
DoCmd.RunSQL str_sql
DoCmd.OpenReport "bericht_suche_klasse", acViewPreview

ich wähle also daten aus meiner "haupt-tabelle" in eine sozusagen temporäre tabelle "tabelle_suche". diese dient dann als datengrundlage für einen bericht, den ich anschließen öffne.

das funktioniert grundsätzlich auch. nur gibt es da inkonsistenzen, wenn ich die selbe suchanfrage schnell mehrmals hintereinander ausführe. die daten in der "tabelle_suche" sind noch die gleichen mit jeder abfrage. aber die sortierung ist nicht mehr korrekt und ich habe keine ahnung wieso.

jemand eine ahnung?
 
Wie sieht denn die Datenquelle deines Berichtes aus? Steht hier: Select * from tabelle_suche Order by Autor, Jahr?
 
genau, "order by" funktioniert bei der ersten suchanfrage korrekt und danach dann nicht mehr.

die datenquelle des berichts ist die tabelle "tabelle_suche" in die ich die daten der haupt-tabelle quasi rein selektiere.

ich habe nun einen work-around gefunden, der funktioniert. man kann im bericht die sortierung festlegen. da sie in diesem fall immer gleich ist, funktioniert das auch. nur bin ich trotzdem neugierig, warum die abfrage mal richtig sortiert und mal nicht. wie gesagt, die daten bleiben die gleichen. ich habe extra noch mal kontrolliert. aber die sortierung stimmt nicht mit der abfrage überein.
 
Zur Vermeidung von Inkonsistenzen sollte vor einer erneuten Abfrage ein Datenherkunft.Requery abgesetzt werden.
 
Deine anfrage in str_sql befüllt die Tabelle tabelle_suche. Dort ist es vollkommen egal, ob du das ORDER BY verwendet oder nicht, da die Daten so in die Tabelle eingefügt werden, wie das DBMS es für nötig hält. Daten werden nicht sortiert gespeichert und auch nur sortiert ausgegeben, wenn du es abfragst. Es gibt keine Garantie, dass die Datenreihenfolge immer gleich ist, wenn du kein Kriterium angibst.

Wenn du jetzt die Daten aus tabelle_suche abfragst, solltest du ein ORDER BY verwenden, um die Ergebnisse korrekt sortiert zu erhalten. Die Abfrage der Daten aus tabelle_suche hast du leider nicht hier genannt.

Kleines Edit: Kann sein, dass du die Abfrage nicht direkt beeinflussen kannst in Access. In diesem Fall wäre die Sortierung am Report genau die richtige Einstellung und kein Workaround. Weil es wie gesagt egal ist, in welcher Reihenfolge du Daten in eine Tabelle schreibst, wichtig ist nur, wie du (bzw. dein Report) sie rausholst.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Zornbringer
ella_one schrieb:
Zur Vermeidung von Inkonsistenzen sollte vor einer erneuten Abfrage ein Datenherkunft.Requery abgesetzt werden.
nur der neugier halber. vor jeder neuen abfrage schließe ich per vb den geöffneten bericht. entspricht das auch einem requery?
Ergänzung ()

SoDaTierchen schrieb:
Die Abfrage der Daten aus tabelle_suche hast du leider nicht hier genannt.

die gibt es auch nicht. ich nehme für die berichte die tabelle als datengrundlage, keine abfrage. ich führe unterschiedliche abfragen per vb aus und fülle diese tabelle dann entsprechend mit jeder neuen abfrage. es dient quasi als liste für suchergebnisse.

wenn ich wüsste, bzw. wenn es möglich wäre, die datengrundlage per vb zu setzen, bzw. zu ändern, würde ich wahrscheinlich ehr diese methode wählen.
 
Zornbringer schrieb:
...
wenn ich wüsste, bzw. wenn es möglich wäre, die datengrundlage per vb zu setzen, bzw. zu ändern, würde ich wahrscheinlich ehr diese methode wählen.
Im Open o. Load-Event des Reports kannst du die Datenquelle ändern:

Code:
Private Sub Report_Open(Cancel As Integer)
         me.recordsource="Select * from tabelle_suche Order by Autor, Jahr"
End Sub

P.S.: Du kannst an dieser Stelle auch auf dein Formular verweisen, so dass du die Zwischentabelle weglassen könntest.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Zornbringer und SoDaTierchen
hier stand unsinn.
 
Zurück
Oben