Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

SQL-Statement in VBA: wie ist die Syntax?

Begonnen von JLK, April 05, 2011, 14:54:14

⏪ vorheriges - nächstes ⏩

JLK

Guten Tag,

ich habe ein SQL-Statement in meinem VBA-Code eingebaut (DoCmd.RunSQL...). Das klappte alles ganz gut bis zu dem Zeitpunkt, an dem ich meine Abfrage erweitert habe und den daraus resultierenden SQL-Code in den VBA-Code einbauen wollte.

Das Kriterium in der Abfrage ist:

Wie [Formulare]![Formular1]![HWKonfauswahl] & "*"

Wie wird das umgesetzt im SQL-Statement innerhalb eines VBA-Codes?

Like [Formulare]![Formular1]![HWKonfauswahl]  ?X?X?

Da ja " im SQL-Statement nicht erlaubt sind, habe ich nun ein Problem.

Habt Ihr die Lösung?

Danke,
Gruss
JLK

MzKlMu

Hallo,
versuche es so:
Like '" & Me![HWKonfauswahl] & "*'"

Es wäre besser gewesen, wenn Du den ganzen SQL String gezeigt hättest und nicht nur ab Like.
Gruß Klaus

bahasu

Servus

JLK

Die beiden Tipps führten nicht zum Erfolg

Hier mal der ganze SQL-Ausdruck:

sql100 = "INSERT INTO [*T_Top10_Artikel6] ( SAISNR, Art6, SummevonSTCKG, HwKonf )  " & _
"SELECT TOP " & Nz([Forms]![Formular1]![Werteauswahl], "10") & "  [AUSAP_Lager1+2].SAISNR, Left([Artde],6) AS Art5, Sum([AUSAP_Lager1+2].STCKG)  " & _
"AS SummevonSTCKG, IIf([KONF/HW]=1, 1 , 2 ) AS HWKonf1 FROM [AUSAP_Lager1+2] GROUP BY [AUSAP_Lager1+2].SAISNR,  " & _
"Left([Artde],6), IIf([KONF/HW]=1, 1 , 2) HAVING ((([AUSAP_Lager1+2].SAISNR) Like [Formulare]![Formular1]![Saison])  " & _
"And ((IIf([KONF/HW] = 1, 1 , 2 )) Like [Formulare]![Formular1]![HWKonfauswahl]   )) ORDER BY Sum([AUSAP_Lager1+2].STCKG) DESC;"


bahasu

Zitat von: JLK am April 05, 2011, 15:13:17
"And ((IIf([KONF/HW] = 1, 1 , 2 )) Like [Formulare]![Formular1]![HWKonfauswahl]  

Hi
Ich interpretiere diesen Teil so:
Wenn [..] = 1 dann: and 1 like Formular...
ansonsten and 2 like Formular...

Soll das so sein oder liege ich hier falsch?
Harald
Servus

JLK

so, hier mal ein Bild meiner Abfrage. Ich habe diese Abfrage als SQL-Code in VBA eingefügt. Wenn ich die Abfrage (also auch den SQL-Code) um das rot Umkringelte ergänze, gibt es bei Ausführung des VBA-Codes einen Fehler weil der Ausdruck nicht erkannt wird.

[Anhang gelöscht durch Administrator]

DF6GL

Hallo,

Du solltest erst die Fragen beantworten...


was soll das bedeuten:

"And ((IIf([KONF/HW] = 1, 1 , 2 )) Like [Formulare]![Formular1]![HWKonfauswahl]    ))

bahasu

Hi

.. und auch erklären, was HWKonfauswahl für ein Typ ist (Zahl, String)

Harald
Servus

database

Hallo,

und interessant wäre dann auch noch ob du diesen Tabellennamen wirklich ernst meinst

INSERT INTO [*T_Top10_Artikel6]

und ob dieser Vergleich auch überhaupt möglich ist

HAVING ((([AUSAP_Lager1+2].SAISNR) Like [Formulare]![Formular1]![Saison]) 
die Frage stelle ich deshalb, weil es in der Tabelle das Feld SAISNR sowie SAISON gibt und ich mal davon ausgehe, dass das Formularfeld
an SAISON gebunden ist und ich weiter meine, dass in den beiden Tabellenfeldern NICHT das Gleiche stehen wird.

...und das da
And ((IIf([KONF/HW] = 1, 1 , 2 )) Like [Formulare]![Formular1]![HWKonfauswahl]   ))
haben Franz und Harald schon zu Recht bekritelt

Wenn du den Tabellenfeld-Wert mit einem Formularfeld-Wert vergleichen willst musst du schon den Wert nehmen, der in der Tabelle steht und nicht
versuchen diesen vor dem Vergleich noch schnell künstlich zu ändern - was auf die Weise ja - wie du bemerkt hast - in die Hose geht  :-\

Also wenn dann KÖNNTE das am Ehesten so funktionieren:
And [KONF/HW] Like " & [Formulare]![Formular1]![HWKonfauswahl] & " ORDER BY Sum([AUSAP_Lager1+2].STCKG) DESC;" 

Die eckigen Klammern um KONF/HW darfst du aber auch NIEMALS vergessen sonst versucht die Abfrage KONF durch HW zu dividieren.
Ähnlich verhält es sich dann auch mit diesem Tabellennamen AUSAP_Lager1+2
... der ja im Fall eines Vergessens der eckigen Klammern eine Rechenoperation darstellt.

JLK

Alle Anmerkungen zu den Benennungen usw. sind natürlich begründet. Die Bezeichnungen sind teils ungeschickt gewählt, was allerdings nichts daran ändert, dass die Abfrage einwandfrei tut, was sie soll. Nur wenn ich im entsprechenden Feld & * eingebe, damit bei der Abfrage auch Datensätze angezeigt werden, wenn nichts ausgewählt wurde, dann gibt es Probleme mit der Umsetzung des SQL-Statements. Ich habe das Gefühl, wir haben uns hier von meiner Ausgangsfrage entfernt, nämlich die Problemstellung, wie ich & * in SQL eingebe, damit es funktioniert.

Gruss
JLK

bahasu

Moin,

... und die Antworten auf die obigen Fragen lauten????

Harald
Servus

JLK

Zitat von: bahasu am April 06, 2011, 07:32:21
... und die Antworten auf die obigen Fragen lauten????

...die spare ich mir, denn jetzt geht alles so wie es soll. Keine Ahnung warum, aber es klappt. Interessant ist, dass sich gestern genau das, wie es jetzt im Code steht, schon probiert hatte und es nicht funktionierte. Man sollte vllt. mal die DB komprimieren, wenn sich Dinge seltsam verhalten. Die Sequenz ((IIf([KONF/HW] = 1, 1 , 2 ))  war in der Tat Quatsch bzw. ein Überbleibsel aus einem anderen Code, der hier nichts mehr zu suchen hatte. Hier der nun laufende Code:

DoCmd.RunSQL "DELETE [*T_Top10_Artikel6].* FROM [*T_Top10_Artikel6];"

sql100 = "INSERT INTO [*T_Top10_Artikel6] ( SAISNR, Art6, SummevonSTCKG, HwKonf ) " & _
"SELECT TOP " & Nz([Forms]![Formular1]![Werteauswahl], "10") & " [AUSAP_Lager1+2].SAISNR, Left([Artde],6) AS Art5, Sum([AUSAP_Lager1+2].STCKG) AS SummevonSTCKG, [AUSAP_Lager1+2].[KONF/HW] " & _
"FROM [AUSAP_Lager1+2] " & _
"GROUP BY [AUSAP_Lager1+2].SAISNR, Left([Artde],6), [AUSAP_Lager1+2].[KONF/HW] " & _
"HAVING ((([AUSAP_Lager1+2].SAISNR) Like [Formulare]![Formular1]![Saison]) And (([AUSAP_Lager1+2].[KONF/HW]) Like [Formulare]![Formular1]![HWKonfauswahl] & '*' )) " & _
"ORDER BY Sum([AUSAP_Lager1+2].STCKG) DESC; "


Trotzdem vielen Dank für Eure Bemühungen.
Gruss
JLK