# ACCESS RunSQL



## Slizzzer (19. April 2007)

Hallo Forum!

Ich versuche in Access mit VBA eine Abfrage auszuführen:
...
    SQLxyz = "SELECT @@IDENTITY AS nachweis_id FROM tabNachweise;"
    DoCmd.RunSQL SQLxyz
...

Access meldet immer:
"Eine AusführenSQL-Aktion (RunSQL) erfordert ein Argument, das aus einer SQL-Anweisung besteht."

Ist das denn keine SQL-Anweisung? 
Kennt Access @@IDENTITY nicht? Angeblich doch seit Version 2000?!
Mit LAST_INSERT_ID() geht es auch nicht. An der Syntax ansich scheint ja nichts falsch zu sein. Access akzeptiert den Querystring anscheinend gar nicht.

Gruß
Ralf


----------



## Alex F. (19. April 2007)

das Problem ist, das dein Sql nichts bewirkt das heisst mit doCmd.RunSQL werden zwar abfragen ausgeführt aber nicht angezeigt.

Das was du bräuchtest wäre DoCMD.OpenQuery allerdings muss deine Abfrage dann gespeichert sein.


----------



## Radhad (19. April 2007)

Ich hab das in der MSDN nur beim SQL-Server gefunden. Vielleicht liegt es daran?


----------



## Alex F. (19. April 2007)

Er liefert 0 für @@Identity und vom SQL - her ist es nicht falsch da Access dadurch nicht auf einen Fehler läuft. 
Wie gesagt, er möchte sich ja eigentlich ein Ergebnis anzeigen lassen und dafür ist runsql eigentlich die falsche Methode.
Grüsse bb


----------



## Slizzzer (19. April 2007)

> RunSQL werden zwar abfragen ausgeführt aber nicht angezeigt.



Normalerweise reicht das ja auch, nur Access führt diese nichtmal aus.



> Ich hab das in der MSDN nur beim SQL-Server gefunden. Vielleicht liegt es daran?



Möglich, dass Access das nicht unterstützt. Die Infos zu Access <> SQL sind doch sehr dürftig. Gibt es Alternativen?
Wenn ich einen Datensatz in die Tabelle eingebe, sehe ich ja auch gleich den Autowert.
Da ich diese Abfragen aber im Hintergrund laufen lassen muss, muss ich die ID irgendwie zurückgegeben bekommen zur weiteren Verarbeitung.


----------



## Alex F. (19. April 2007)

Das ist der Grund für deine Fehlermeldung 


> "Eine AusführenSQL-Aktion (RunSQL) erfordert ein Argument, das aus einer SQL-Anweisung besteht."



und diese Frage habe ich beantwortet  

mach ein Update dann funktioniert das RunSql auch aber wie ich bereits sagte benutzt du die falsche Methode wenn du ein select haben möchtest !!


----------



## Slizzzer (20. April 2007)

Hallo Brainbyte!



> mach ein Update dann funktioniert das RunSql auch aber wie ich bereits sagte benutzt du die falsche Methode wenn du ein select haben möchtest !!



Update auf was? SQL-Server? Oder Access2007? Ich brauche eigentlich was bis Access2000 kompatibles.

Welche Methode wäre denn zu empfehlen? Ich such mir fusselig. Die Online-Hilfe ist auch nicht gerade benutzerfreundlich. 
Gib mal nen Tipp bitte.

Gruß
Ralf


----------



## Alex F. (20. April 2007)

Was möchtest du denn genau machen ?

Eine Id in deine Tabelle einfügen ? 
Dann schau mal hier
http://www.donkarl.com/FAQ/FAQ3TAbfragen.htm

eine Abfrage anzeigen ? 

oder deine Werte aktualisieren?


----------



## Slizzzer (20. April 2007)

Also folgendes habe ich vor:

In einem Form werden diverse Kriterien aus Kombinationsfeldern gewählt. Diese werden nach drücken des OK-Buttons per VBA/SQL in eine Tabelle geshrieben. Den daraus resultierenden Autowert brauche ich für weitere Abfragen, Schleifen, etc., die ebenfalls im Hintergrund ablaufen.
Ist alles durchlaufen, wird ein weiteres Formular geöffnet, in dem die Ergebnisse weiter bearbeitet werden können. Aber das ist jetzt auch eigentlich nebensächlich. Ich benötige den gerade erstellten Autowert in einer Variable, die ich weiter verwenden kann. Da häng ich nun fest .


----------



## Alex F. (20. April 2007)

In diesem Fall würde ich folgendes machen:

1. Du bearbeitest deine Tabelle wie gehabt.

du bastelst dir ein sql 

nach dem Schema http://www.donkarl.com/?FAQ3.11 
http://support.microsoft.com/default.aspx?scid=kb;de;D45183

und öffnest dir ein Recordset mit dem du weiterarbeiten kannst.

Wenn du nicht mit dem Recordset arbeiten möchtest musst du die Daten in einer Temptabelle ablegen dies machst du ungefähr so:

```
SELECT DCount("[Artikename]","Artikel","[Artikelname] <'" + [Artikelname]&"'")+1 AS Laufnummer , Artikelname  INTO temptabelle
FROM Artikel;
```

dies könntest du mit runsql ausführen da es sich um eine aktuliesierbare Abfrage handelt. Denn es wird eine neue Tabelle erstellt.

Grüsse bb


----------

