Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: AnnaWJ am November 22, 2019, 12:40:24

Titel: Unterabfrage in einer execute
Beitrag von: AnnaWJ am November 22, 2019, 12:40:24
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
Titel: Re: Unterabfrage in einer execute
Beitrag von: PhilS am November 22, 2019, 13:22:16
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.
Titel: Re: Unterabfrage in einer execute
Beitrag von: AnnaWJ am November 24, 2019, 20:41:52
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

Titel: Re: Unterabfrage in einer execute
Beitrag von: DF6GL am November 25, 2019, 08:34:38
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.
Titel: Re: Unterabfrage in einer execute
Beitrag von: AnnaWJ am November 25, 2019, 11:00:31
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
Titel: Re: Unterabfrage in einer execute
Beitrag von: DF6GL am November 25, 2019, 11:17:22
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