Dynamische Access Abfrage

Hallo!

Ich möchte eine Abfrage erstellen, bei der man dynamisch angeben kann, an welcher Stelle welche Spalte der Tabelle zu sehen ist.

Die Reihenfolge der Spalten soll nach Möglichkeit zuvor in einem Formular eingegeben werden.

Hat jemand von Euch eine Idee wie man so etwas lösen kann?
Schon mal danke im Voraus.

MfG

Peter

Hallo Peter!

Ich möchte eine Abfrage erstellen, bei der man dynamisch
angeben kann, an welcher Stelle welche Spalte der Tabelle zu
sehen ist.
Die Reihenfolge der Spalten soll nach Möglichkeit zuvor in
einem Formular eingegeben werden.

Das ist doch schon was. Nimm eine Liste mit den vorhandenen Feldern (z. B. als Datenquelle der Liste Deine Abfrage/Tabelle, dann „Feldliste“ setzen). Dann ein weiteres Listenfeld, in dem Du z. B. per Doppelklick die gewünschten Felder aus der Liste der vorhandenen Felder übernehmen kannst. Hier am besten mit einer temporären lokalen Tabelle arbeiten, in die Du neben dem Feldnamen auch die Reihenfolgeposition speicherst. Die Reihenfolgeposition blendest Du in der zweiten Liste am besten aus.

Dazu noch Schaltflächen „nach oben/unten“ und „an den Anfang/ans Ende“, um die Reihenfolge schön komfortabel einstellen zu können.

Abschließend rennst Du über diese Liste rüber und hängst die gefundenen Feldnamen in der angegebenen Reihenfolge in ein SQL-Statement, welches dann etwa so aussieht: SELECT FeldnameAusListe2_1, FeldnameAusListe2_2, FeldnameAusListe2_3, … FROM DeineAndereAbfrageOderTabelle

Gruß, Manfred

Hallo!

Jetzt hab ich noch eine blöde Frage. Versuche vergeblich meine SQL Statements mit Docmd.RunSQL aufzurufen.

Das funktioniert aber leider nicht.

wie rufe ich die Tabelle auf und baue die SQL Statements im VBA Code ein?

Danke

peter

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

Hallo Peter!

Jetzt hab ich noch eine blöde Frage. Versuche vergeblich meine
SQL Statements mit Docmd.RunSQL aufzurufen.
Das funktioniert aber leider nicht.

Wie der Name vermuten lässt: RunSQL führt Aktionsabfragen durch (Löschen oder Aktualisieren). Eine Auswahl funktioniert nicht über RunSQL.

wie rufe ich die Tabelle auf und baue die SQL Statements im
VBA Code ein?

Ich nehme jetzt mal beispielsweise an, Du hast eine Tabelle, z. B. „Tabelle1“, mit folgenden Feldern: Feld1, Feld2, Feld3, Feld4. Mit dem Formular hast Du Dir die folgende Reihenfolge zusammengebastelt: Feld3, Feld2, Feld4. Feld1 willst Du nicht anzeigen lassen.

Dann sähe Dein SQL-Statement wie folgt aus: SELECT Feld3, Feld2, Feld4 FROM Tabelle1.

Das kannst Du Dir als Abfrage wie folgt zusammenbauen und dann in der „Tabellenansicht“ wie folgt darstellen:

Public Sub TemporaereAbfrageAnzeigen(pstrSQL as String)
 Dim dbMdb as Database
 Dim qryAbfrage as Querydef
 Const TEMP\_ABFRAGE as String="TempAbfrage"
On Error GoTo ErrorHandler

 Set dbMdb=currentdb()
 docmd.DeleteObject acQuery, TEMP\_ABFRAGE
 Set qryAbfrage = dbMdb.CreateQuerydef(TEMP\_ABFRAGE, pstrSQL)
 ' hier ggf. noch Ansichten usw. nach Belieben einstellen, s. Hilfe zu OpenQuery:

 Docmd.OpenQuery TEMP\_ABFRAGE 

ErrorHandler:
 Select Case Err.Number
 Case 0
 Case 7874
 ' und weitere Codes, die das DeleteObject erzeugt, wenn Abfrage
 ' nicht vorhanden (was auch egal ist)
 Resume Next
 Case Else
 Resume ErrorHandler
 End Select
End Sub

Code übrigens nicht compiliert, solltest Du Dir mal genauer anschauen. Die temporäre Abfrage kannst Du dann auch als Datenquelle für Berichte/Formulare oder so weiterverwenden. Ggf. kannst Du sie auch wieder löschen; dazu kenne ich Dein Programm aber nicht…

Gruß, Manfred

Hallo!

mal ne grundsätzliche Antwort. Wieso verkünsteln mit SQL und nix geregelt bekommen.
Einfach mit dem Assistenten die Abfrage erstellen und dann mit einer Prozedur aufrufen. Wenn’s denn Schon SQL sein soll, einfach den Code aus der ABfrage auslesen mit „Ansicht - SQL“. Das war’s dann doch schon.
Da passt alles und die Syntax ist geprüft.

Gruß Hans

Hallo, Hans!

mal ne grundsätzliche Antwort. Wieso verkünsteln mit SQL und
nix geregelt bekommen.
Einfach mit dem Assistenten die Abfrage erstellen und dann mit
einer Prozedur aufrufen. Wenn’s denn Schon SQL sein soll,
einfach den Code aus der ABfrage auslesen mit „Ansicht - SQL“.
Das war’s dann doch schon.
Da passt alles und die Syntax ist geprüft.

Die Frage zielt mir aber eher dahin, dass ein Anwender (der als DAU angenommen werden muss) sich seine Abfrage/Tabelle zusammen basteln soll. Sag dem, der soll das Ding mit dem Assistenten generieren und dann ins Programm einbinden, und er bekommt Mordgedanken…

Als Entwickler stimmt natürlich, was Du sagst: Entwerfen und über SQL-Ansicht einfügen, wenn man schon mit SQL spielt. Aber auch das ist eben nicht wirklich „dynamisch“.

Gruß, Manfred