2.5k Aufrufe
Gefragt in Datenbanken von
Hallo Leute,

ich lasse mir in Access 2010 einen SQL-String aus einem Memofeld einer Tabelle
übergeben. Jetzt möchte ich jedoch in diesen String noch eine Variable einfügen, die
zur Laufzeit abgefragt/übernommen wird. Normalerweise wäre die Lösung ja:
"stringteil1" & var & "stringteil2"

Aber da ich den SQL-String aus einem Tabellenfeld übernehme, wird dieser immer
als kompletter String interpretiert. Also wenn ich in das Feld den Code:

SELECT feld1, " & var & ", feld3 FROM Tabelle

eingebe, wird das alles als String gesehen!

Hat irgendjemand eine Idee? Ich könnte natürlich mit zwei Tabellenfeldern arbeiten
und den String dann ganz normal zusammenfügen, aber ich wüsste gern, ob es
auch so geht.

Gruß
Ole

6 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Ole,

Ich verstehe die Frage nicht ganz, was konkret soll durchgeführt werden und wie soll es aussehen, wenn es fertig ist.

Gruß

Paul1
0 Punkte
Beantwortet von
Hallo Paul,

sorry, dass ich erst jetzt antworte. Ich war bis heute im Urlaub...

Ich habe in einer Tabelle verschiedene SQL-Abfragen in einem
Memo-Feld gespeichert. Per Knopfdruck in einem Formular wird ein
ausgewählter SQL-String ausgelesen und per ODBC auf einer
AS/400 ausgeführt. Das Ergebnis wird in eine Excel-Datei exportiert.

Bisher konnten diese Abfragen nach zwei verschiedenen Kriterien
gefiltert werden, indem ich um den SQL-String einfach VOR der
Ausführung ein "SELECT * FROM <Abfrage> WHERE ..." gebastelt
habe. Da die beiden gefilterten Spalten in allen Abfragen den
gleichen Namen haben war das kein Problem.

Jetzt möchte ich jedoch ein drittes Feld (Datumsfeld) filtern lassen,
welches jedoch nicht in allen Abfragen denselben Namen hat und
dazu noch mittendrin abgefragt werden muss (aufgrund von
Gruppierungen). Daher kann ich diese Filterbedingung nicht am
Ende um den SQL-String herum legen. Deswegen suche ich nach
einer Möglichkeit, diesen Filter bereits in den SQL-String in der
Abfragentabelle einzubauen. Aber wie kann ich dort eine Variable
platzieren, die anschließend bei der Ausführung (mit myquerydef.sql
= sql1) auch als Variable und nicht als String interpretiert wird?

Reicht das als Erklärung?

Gruß
Ole
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Ole,

So ganz verstehe ich es zwar noch immer nicht, nach welchen Kriterien soll das dritte Feld gefiltert werden.

Wenn es sich um mehrere Abfragen handelt probier es mit einer Union-Abfrage.

http://www.software-chuchi.ch/praxis/microsoft_access_abfragen_union_abfragen.htm

Gruß

Paul1
0 Punkte
Beantwortet von
Hallo Paul,

Einfaches Beispiel:
Ich habe folgende Text in einem Memo-Feld in einer Tabelle:

"Select spalte1 from tabelle1 where spalte1=1"

Diesen SQL-String lese ich aus der Tabelle aus und führe ihn aus.
So weit so gut. Jetzt möchte ich aber den Filterwert aus einem
Formularfeld auslesen. Dazu würde ich mir den SQL-String wieder
auslesen lassen und dann per VBA folgendes dazubasteln:

sql1 = <SQL aus Tabelle ausgelesen mit Befehl dlookup>
danach:
sql1 = "select * from (" & sql1 & ") where spalte1 = " & feld1.value

Bei komplexeren Abfragen mit Gruppierungen kann ich aber nicht
erst am Ende filtern!
Bsp:
select feld1 from (select feld1,feld2, jahr from tabelle1) group by feld1

Wenn ich jetzt auf das Jahr filtern möchte, müsste ich dieses in der
inneren Abfrage machen. Daher wollte ich in diese innere Abfrage
eine Variable "einbauen", die dann bei der Ausführung ersetzt wird.

Nach dem Motto:
select feld1 from (select feld1,feld2, jahr from tabelle1 where
jahr=VARIABLE) group by feld

Aber egal wie ich VARIABLE einbinde, es wird immer als Teil des
Strings interpretiert...

Mittlerweile habe ich mir mit dem Befehl REPLACE ausgeholfen und
lasse mir das Wort VARIABLE durch den gewünschten Filterwert
ersetzen...

Gruß
Ole
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Ole,

Das ist sehr kompliziert, nachdem jetzt noch ein Formularfeld hinzukommt.

Ich glaube nicht, dass ich hier in deinem Sinn effektiv helfen kann.

Gruß

Paul1
0 Punkte
Beantwortet von
Alles klar.

Trotzdem danke...
...