Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

SQL per VBA funktioniert nicht

Begonnen von Wolfgang, Dezember 15, 2011, 19:54:03

⏪ vorheriges - nächstes ⏩

Wolfgang

Hallo ihr klugen Köpfe

Ich habe eine Abfrage deren SQL deren sql aus der Abfage ist so

SELECT DISTINCTROW Format$([Kassabuch].[Datum],'mm yyyy') AS [Datum nach Monaten], Sum(Kassabuch.BetragEin) AS SUEinz, Sum(Kassabuch.BetragAus) AS SUAusz, Sum(Nz([BetragEin])-Nz([BetragAus])) AS Saldo
FROM Kassabuch
GROUP BY Format$([Kassabuch].[Datum],'mm yyyy'), Year([Kassabuch].[Datum])*12+DatePart('m',[Kassabuch].[Datum])-1
ORDER BY Year([Kassabuch].[Datum])*12+DatePart('m',[Kassabuch].[Datum])-1;

in VBA hab ich folgendes

sql1 = "SELECT DISTINCTROW Format$([Kassabuch].[Datum],'mm yyyy') AS [Datum nach Monaten], Sum(Kassabuch.BetragEin) AS SUEinz, Sum(Kassabuch.BetragAus) AS SUAusz, Sum(Nz([BetragEin])-Nz([BetragAus])) AS Saldo"
SQL2 = "FROM Kassabuch"
SQL3 = "GROUP BY Format$([Kassabuch].[Datum],'mm yyyy'), Year([Kassabuch].[Datum])*12+DatePart('m',[Kassabuch].[Datum])-1"
SQL4 = "ORDER BY Year([Kassabuch].[Datum])*12+DatePart('m',[Kassabuch].[Datum])-1"
SQL = sql1 & SQL2 & SQL3 & SQL4

Fehlermeldung
Die Selectanweisung schließt ein reserviertes Wort oder einen  Argumentnamenein, das/der falsch, mit falscher Zeichensetzung oder überhaupt nicht eingegeben wurde.

Wo ist denn da der Fehler?

Vielen Dank für eure Hilfe
Wolfgang


MzKlMu

Hallo,
da fehlen einige Leerzeichen.
Lasse Dir mit Debug.Print den SQL String im Direktberich ausgeben, dann siehst Du wo.
Und vermeide SQL als Variablenname. Vor Strings macht man ein str, dann hat man dieses Problem nicht.
Dim strSQL As String z.B. Sinngemäß auch für die anderen Variablen.
Gruß Klaus

Wolfgang

Funktioniert leider noch nicht

untenstehender SQL ist aus debug.print

SELECT DISTINCTROW Format$([Kassabuch].[Datum],'mm yyyy') AS [Datum nach Monaten], Sum(Kassabuch.BetragEin) AS SUEinz, Sum(Kassabuch.BetragAus) AS SUAusz, Sum(Nz([BetragEin])-Nz([BetragAus])) AS Saldo FROM Kassabuch GROUP BY Format$([Kassabuch].[Datum],'mm yyyy'), Year([Kassabuch].[Datum])*12+DatePart('m',[Kassabuch].[Datum])-1 ORDER BY Year([Kassabuch].[Datum])*12+DatePart('m',[Kassabuch].[Datum])-1;

Der SQL funktioniert wenn ich ihn in eine Abfrage kopiere.

VB meldet Fehler 2342
Eine ausführen SQL-Aktion erfordrtt ein Argument, das aus einer SQL-Anweisung besteht.

Hab keinen Plan wo es da noch hakt?

Wolfgang

Beaker s.a.

Hallo Wolfgang,

ZitatVB meldet Fehler 2342
Eine ausführen SQL-Aktion erfordrtt ein Argument, das aus einer SQL-Anweisung besteht.

Was machst Du denn in VBA mit dem zusammengesetzten SQL-String?
Will fragen, welche Zeile wird den gelb unterlegt wenn's diesen Fehler wirft?
Kann es sein, dass Du damit ein DoCmd.RunSQL oder ein CurrentDb.Execute fütterst?
Falls Ja, - vergiss es  ;). Das geht nur mit Aktionsabfragen (UPDATE/INSERT).

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
Und wie geht es mit dem SQL String weiter, bzw. was hat er für eine Aufgabe?
Und zeige mal die komplette VBA Prozedur.
Gruß Klaus

Beaker s.a.

ZitatUnd wie geht es mit dem SQL String weiter, bzw. was hat er für eine Aufgabe?

Weiss er wohl selber nicht  ;)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

database

#6
Hallo,


Private Sub cmdAusgabe_Click()


Dim rst As DAO.Recordset

Dim strSQL As String

strSQL = "SELECT DISTINCTROW Format$([Kassabuch].[Datum],'mm yyyy') AS [Datum nach Monaten], " & _
           "Sum(Kassabuch.BetragEin) AS SUEinz, Sum(Kassabuch.BetragAus) AS SUAusz, " & _
           "Sum(Nz([BetragEin])-Nz([BetragAus])) AS Saldo " & _
           "FROM Kassabuch " & _
           "GROUP BY Format$([Kassabuch].[Datum],'mm yyyy'), Year([Kassabuch].[Datum])*12+DatePart('m',[Kassabuch].[Datum])-1 " & _
           "ORDER BY Year([Kassabuch].[Datum])*12+DatePart('m',[Kassabuch].[Datum])-1;"


Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)

Do While Not rst.EOF
   Debug.Print rst![Datum nach Monaten], rst!SUEinz, rst!SUAusz, rst!Saldo
   rst.MoveNext
Loop

Set rst = Nothing

End Sub


Die obenstehende Routine läuft OHNE Fehler ab.
In den Verweisen muß DAO 3.6 gesetzt werden!

ZitatEine ausführen SQL-Aktion erfordrtt ...
Das Absetzen eines 'SELECT-Statements' mit RunSQL oder Execute ist ausgeschlossen, hierbei wird der Fehler 2342 erzeugt.
Dieses ist die Aussage der Fehlermeldung - wenns auch nicht explizit angegeben wird.  ::)

Im Anhang ein kleines Beispiel - setze da einen Haltepunkt auf die Sub und lass den Code schrittweise ablaufen.
Ausgabefenster anzeigen!

ZitatWeiss er wohl selber nicht  
Kann wohl eher nur eine unpassend leichtfertig abgegebene Vermutung sein - hoffentlich

HTH

[Anhang gelöscht durch Administrator]