Hallo,
ich möchte per Button mehrere Datensätze von einer Tabelle kopieren und diese am Ende einfügen.
Die Tabelle tAngebotsPositionen hat cID als Primärschlüssel.
Mein Code lauft ohne Fehler, eingefügt wird über den INSERT-Befehlt jedoch nichts. Leider finde ich den Fehler nicht und freue mich über eure Hilfe.
Vielen Dank!
Marcel
'Positionen aus altem Angebot übernehmen: Kopiere Positionen, füge am Ende ein und ändere AngebotsID
Dim i As Integer
Dim AnzahlPos As Integer
Dim strSQL As String
i = 1
AnzahlPos = 5
Do While i <= AnzahlPos
strSQL = "INSERT INTO tAngebotsPositionen " & _
"SELECT * " & _
"FROM tAngebotsPositionen " & _
"WHERE [cAngebotsID]=" & Me!txtRevAngebID & " " & _
"AND [cPositionsNr]=" & i & ";"
CurrentDb.Execute strSQL
i = i + 1
Loop
Nach weiterer Online-Recherche nun doch die kurzfristige Lösung gefunden:
INSERT INTO kann kein Feld mitkopieren, welches einen Auto-Wert enthält. Daher muss man jedes Feld einzeln (ohne den den Autowert) auswählen und kopieren:
strSQL = "INSERT INTO tAngebotsPositionen (cAngebotsID, cPositionsNr, cArtikelNr, cMenge, cPreis) " & _
"SELECT cAngebotsID, cPositionsNr, cArtikelNr, cMenge, cPreis " & _
"FROM tAngebotsPositionen " & _
"WHERE [cAngebotsID]=" & Me!txtRevAngebID & " " & _
"AND [cPositionsNr]=" & i & ";"
CurrentDb.Execute strSQL
@Newermaint Und wie man das ohne Schleife machen kann, kannst du hier nachlesen (https://www.ms-office-forum.net/forum/showthread.php?t=298414).
gruss ekkehard
Wenn man dbFailOnError ergänzt, bekommt eine greifbare Fehlermeldung:
CurrentDb.Execute strSQL, dbFailOnError
Danke für eure Anregungen.
Tatsächlich stehe ich nach dieser Umsetzung nun vor dem Problem, das sich mein Unterformular nicht updaten lässt.
Folgendes habe ich getan, nach dem per Formular eine Revision für ein bestehendes Angebot erstellt werden soll:
- Neues Angebot erstmal ohne Feldinhalte speichern
- Feldwerte des alten Angebots in die Felder des neuen Datensatzes eintragen: per sql Funktion "UPDATE"
- Positionen in der Tabelle tAngebotspositionen wie oben beschrieben kopiert und mit dem neuen Angebot verknüpft.
Das alles passiert, während das Formular für das Angebot noch offen ist.
In dem Formular befindet sich ein UFO, was die Positionen als Endlosformular anzeigt und die Möglichkeiten bietet, diese nun noch zu bearbeiten.
Die DS werden alle prima aktualisiert und gespeichert. Leider bleibt das UFO leer.
Es basiert auf einer Abfrage über alle Positionen mit dem Kriterium für cAngebotsID: [Formulare]![frmAngebotNeu]![txtAngebotsID]
In diesem Feld steht auch die richtige ID drin. Wenn ich die Abfrage öffne, zeigt sie auch die richtigen Positionen an.
Versucht habe ich leider jeweils erfolglos:
Me!subfrmAngebotsPos.Requery
Me.subfrmAngebotsPos.Form.Requery
Me!subfrmAngebotsPos.SourceObject = "subfrmAngebotsPos"
Hat jemand noch eine Idee?
@Newermaint ZitatHat jemand noch eine Idee?
Nein. Was siehst du denn zu dem Zeitpunkt im HFo?
edit: Ich formuliere klarer, - welches Angebot siehst du im HFo wenn das
UFo nach dem INSERT leer bleibt?
Im HFO sehe ich das zuletzt erstellte Angebot, die Revision, sagen wir mal mit der cAngebotsID = 100.
Diese ID steht im Textfeld im HFO: Me!txtAngebotsID
Das UFO ist leer.
Die Abfrage AbfAngebotsPos für das UFO ist jedoch nicht leer, wenn ich sie normal öffne.
Nebenbei: Das Unterformular funktioniert sonst super, wenn ich ein neues Angebot ohne die Revision erstelle.
Zitatdas zuletzt erstellte Angebot
Also das neue mit den kopierten Positionen?
Dann sollte ein Requery auf das UFo nach dem INSERT eigentlich
ausreichen.
Du könntest aber auch mal versuchen die ID des neuen Angebots
(FK im UFo) zu merken und im HFo noch einmal explizit darauf zu
navigieren
Me.Recordset.FindFirst "ID = " & DieNeueAngebotsNrAnsonsten müsste man die DB mal sehen. Kannst du ein Beispiel
hochladen?
gruss ekkehard