Hi. Ich möchte über einen VBA Code in einer Tabelle Informationen aus einer anderen Tabelle ergänzen... also wie eine Aktualisierungsabfrage..
Dabei soll bei einem bestimmten Datensatz in Tabelle A Name und die Anrede aus Tabelle B eingefügt werden. Die ID des Eintrags aus Tabelle B ist in einer Variablen vorgegeben. Ich kenne leider bisher nur eine Art Anfügeabfrage nach dem Beispiel:
CurrendDB.Execute "Insert into TabelleA (AName,AAnrede) Select BName,BAnrede from TabelleB Where IDB=" & p_Variable"
Gibt es sowas auch für Aktualisierungsabfragen?
Hallo,
abgesehen davon, dass der rechte (letzte) Gänsefuß überflüssig (falsch) ist, ist dieses "Prinzip" genauso gut für Aktualisierungs-Abfragen (Insert into ....) anzuwenden.
Okay... Aber wie wähle ich in Tabelle A dann den Datensatz aus, welcher aktualisiert werden soll? So in etwa:
CurrendDB.Execute "Insert into TabelleA (AName,AAnrede) Where IDA = Formular.IDFeld Select BName,BAnrede from TabelleB Where IDB=" & p_Variable
??
Hallo,
versuch mal:
CurrentDB.Execute "UPDATE TabelleA SET AName='" & DLookup("BName","TabelleB","IDB=" & p_variable & "'), AAnrede='" & DLookup("BAnrede","TabelleB","IDB=" & p_variable & "') WHERE IDA=" & Me.IDFeld , dbFailOnError
oder
Dim strBName as String, strBAnrede as String
strBName = DLookup("BName","TabelleB","IDB=" & p_variable)
strBAnrede = DLookup("BAnrede","TabelleB","IDB=" & p_variable)
CurrentDB.Execute "UPDATE TabelleA SET AName='" & strBName & "', AAnrede='" & strBAnrede & "' WHERE IDA=" & Me.IDFeld , dbFailOnError
Hallo Peter, besten Dank. Habe mich für erste Variante entschieden. Angepasst auf meine tatsächlichen Tabellen müsste der Code wie folgt aussehen:
CurrentDB.Execute "UPDATE Verkaufschancen SET Kunden_ID='" & DLookup("ID_Kunde","Kundenliste","ID_Kunde=" & p_ClientID & "'), AP_Anrede='" & DLookup("Anrede","Kundenliste","ID_Kunde=" & p_ClientID & "') WHERE IDVerkaufschance=" & Me.ID_Verkaufschancen, dbFailonError
Leider erhalte ich den Fehler:
"Fehler beim Kompilieren: Erwartet: Listentrennzeichen oder )"
Hier fehlt sicher irgend ein kleines " oder ein '... oder?
Hallo,
nimm doch die erste Variante, die wäre übersichtlicher..
Ansonsten:
CurrentDB.Execute "UPDATE Verkaufschancen SET Kunden_ID=" & DLookup("ID_Kunde","Kundenliste","ID_Kunde=" & p_ClientID ) & ", AP_Anrede='" & DLookup("Anrede","Kundenliste","ID_Kunde=" & p_ClientID ) & "' WHERE IDVerkaufschance=" & Me.ID_Verkaufschancen, dbFailonError
DF6GL: Welche Erste Variante meinst Du denn? Auf jeden Fall hat es dann mit Deiner Codezeile geklappt.
Besten Dank .)
Falls Du meine "erste Variante" meinst, so habe ich den Code nun so umgesetzt:
CurrendDB.Execute "Insert into Verkaufschancen (Kunden_ID,AP_Anrede,AP_Vorname) Select ID_Kunde,Anrede,Vorname from Kundenliste Where ID_Kunde=" & p_ClientID
erhalte hier aber einen "Laufzeitfehler 424 Objekt erforderlich"
Hallo,
ich meinte eigentlich die "oder"-Variante von Database....
desweiteren:
CurrentDB.Execute ....
Ok.... verstanden..
Dim strBName as String, strBAnrede as String
strBName = DLookup("BName","TabelleB","IDB=" & p_variable)
strBAnrede = DLookup("BAnrede","TabelleB","IDB=" & p_variable)
Die o.g. Variante mit den Variablen funktioniert leider nicht, wenn ein Tabellenfeld leer ist. Hier bekomme ich den Laufzeitfehler 94 - unzulässige Verwendung von NULL. Wie lässt sich dies vermeiden? Es ist normal, dass mal nicht alle Felder ausgefüllt sind.
.. Wenn ich die Variablen-Deklinarition weg lasse... Also.. Dim as String... Funktioniert es..
Hat das irgendwelche negativen Auswirkungen?
Hallo,
Variablen sollte man immer deklarieren. Erstens ist das Datentyp sicher und zweitens führen undeklarierte Variablen wenn unbekannt zu Laufzeitfehlern.
Man sollte auch unbedingt in den Optionen Variablendeklaration erforderlich setzen, das heißt, OPTOION EXPLICIT in jedem Modulkopf.
In deinem Fall ist es so, wenn DLookup nichts findet wird NULL zurückgegeben. Aber ein String kann nicht NULL sein. Du muss entweder als Variant deklarieren (DIM strBName as Variant)
oder als String lassen, aber dann NZ verwenden.
strBName = Nz(DLookup("BName","TabelleB","IDB=" & p_variable),"")
Also, in jedem Modul unbedingt OPTION EXPLICIT setzen und alle Variablen grundsätzlich deklarieren.
Ok danke. Dann noch eine Frage dazu.
Die Insert Into Funktion übergibt ja Daten von Tabelle A zu Tabelle B.. Nun soll aber bei einem Feld in Tabelle B nur das aktuelle Datum eingefügt werden. Eine Datenquelle gibt es da nicht. Wie ist dies in diese Funktion noch unterzubringen?
Hi,
dazu schreibst du an der Stelle wo das Datum eingefügt werden soll einfach Date() hin.
Ok. und wenn ein Bestimmter Text in die Zelle soll.. z.B. das Wort "Angebot"?
Dann schreibst du das Wort "Angebot" in die Werteliste. Innerhalb eines Strings kannst du auch Hochkommata anstelle der Gänsefüßchen verwenden.
Ok super... Mit Hochkomma ging es .. mit den normalen Anführungszeichen nicht... Perfekt..