Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: JLK am April 05, 2011, 14:54:14

Titel: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: JLK am April 05, 2011, 14:54:14
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
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: MzKlMu am April 05, 2011, 14:58:20
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.
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: bahasu am April 05, 2011, 14:59:43
.
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: JLK am April 05, 2011, 15:13:17
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;"

Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: bahasu am April 05, 2011, 15:25:49
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
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: JLK am April 05, 2011, 15:34:23
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]
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: DF6GL am April 05, 2011, 15:44:15
Hallo,

Du solltest erst die Fragen beantworten...


was soll das bedeuten:

"And ((IIf([KONF/HW] = 1, 1 , 2 )) Like [Formulare]![Formular1]![HWKonfauswahl]    ))
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: bahasu am April 05, 2011, 18:22:50
Hi

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

Harald
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: database am April 05, 2011, 18:51:26
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.
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: JLK am April 06, 2011, 07:20:18
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
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: bahasu am April 06, 2011, 07:32:21
Moin,

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

Harald
Titel: Re: SQL-Statement in VBA: wie ist die Syntax?
Beitrag von: JLK am April 06, 2011, 07:59:56
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