Neuigkeiten:

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

Mobiles Hauptmenü

Unterabfrage in einer execute

Begonnen von AnnaWJ, November 22, 2019, 12:40:24

⏪ vorheriges - nächstes ⏩

AnnaWJ

Hallo,
ich lerne gerade Unterabfragen.
Jetzt möchte ich Daten aus einer Spalte aus der Tabelle x in eine andere Tabelle y übergeben. Beide haben eine IDNr als vergleich.
Ich habe jetzt schon viel ausprobiert und irgendwie verstehe ich nicht ganz warum das Zusammenspiel zwischen beiden Abfragen nicht funktioniert, mitlerweile bin ich bverzweifelt und es wird chaotisch.

CurrentDb.Execute "Update User Set Notiz= (SUM(Preis) as SUMPreis FROM Bestand) Inner Join User ON Bestand.UserNr = User.UserNr WHERE Bestand.Usernr = User.UserNr"

Also in der Theorie total einfach gedacht, ich will die SUmme der Preis auf die Notiz pro User :(
Vielen Dank, wenn mir da jemand helfen kann, das zu sortieren, die ganzen Seiten im Internet haben mir da noch nicht aufschlauen können.
Viele Grüße An

PhilS

1. Eine Unterabfrage beginnt immer mit dem SELECT Schlüsselwort.
2. Access ist leider dämlich und denkt eine Abfrage mit einer Unterabfrage wäre nicht aktualisierbar. Daher wirst du in deinem Beispiel die DSum-Funktion anstelle der Unterabfrage verwenden müssen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

AnnaWJ

Hallo,
danke für die Antwort, DSUM habe ich noch nicht kennen gelernt, ich verstehe jetzt auch noch nicht ganz, wie das funktioniert.
Wenn ich es mit einer Variable (curX As Currency) versuche, dann funktioniert es schon, aber nicht wenn ich es mit dem Execute und Update verbinden will, dann werden mir die "" direkt angezählt und ohne erhalte ich die Fehlermeldung, dass dort zwei Parameter fehlen. ???

CurrentDb.Execute "Update UserSET Notiz=DSum(Preis, Bestand, UserNr = '1')"

Dabei will ich ja nicht jeden User einzeln abfragen, kann man das auch ohne eins machen, also ich habe ja die User Nr 1, 2, 3 und ich möchte dass nicht alle User zusammengefasst werden, sondern ich die Preise pro User habe, also 1 = 50 €, 2 =55 € etc.
Viele Grüße


DF6GL

Hallo,

heißer Tipp:  Cursor auf die Funktion stellen und F1 drücken.  Die (VBA-) Hilfe hilft manchmal   ;)


Ansonsten die Syntax beachten:

CurrentDb.Execute  "Update User Set Notiz= DSum('Preis', 'Bestand', 'UserNr =""' &  UserNr &'""')

wobei UserNr als Text angenommen ist.  Es wäre vorteilhaft, hier (Primär-/Fremd-)Schlüsselfelder zu benutzen, die vom Datentyp Long sein sollten.

Zudem führt eine Speicherung von berechneten Ergebnissen in Tabellenfelder in den meisten Fällen zu Chaos und Irreführung.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

AnnaWJ

Hallo,
danke, diese ganzen Möglichkeiten mit "[ oder doch ' habe ich einfach noch nicht ganz durchblickt.

in der Form
CurrentDb.Execute  "Update User Set Notiz= DSum('Preis', 'Bestand', 'UserNr =' &  UserNr)

hat es nun funktioniert, warum keine Ahnung, aber ich bin echt beeindruck wie super das funtkioniet, nur mit einer Zeile und ganze ohne Schleife ;)

Vielen Dank

DF6GL

Hallo,

umschließende Eckklammern müssen bei solchen Namen verwendete werden, die Leer- oder Sonderzeichen enthalten oder die reservierte Wörter sind (z. B. "Name" )

Das Hochkomma kann als Ersatzzeichen an solchen Stellen eingesetzt werden, wenn ein Anführungszeichen (") zur Abgrenzung einer Zeichenfolge innerhalb eines Strings stehen muss, der ja selbst durch Anführungszeichen definiert wird.

Muss ein Anführungszeichen als solches in einem String auftauchen, so muss ein verdoppeltes Anführungszeichen ("")geschrieben werden.


Dim strString as String
strString = "Das ist ein ""String"", der selbst Anführungszeichen enthält"
Debug.Print strString


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access