November 30, 2020, 14:18:33

Neuigkeiten:

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


CurrentDb.Execute INSERT INTO

Begonnen von Newermaint, September 23, 2020, 09:53:39

⏪ vorheriges - nächstes ⏩

Newermaint

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

Newermaint

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

Beaker s.a.

@Newermaint
Und wie man das ohne Schleife machen kann, kannst du hier nachlesen.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

PhilS

Wenn man dbFailOnError ergänzt, bekommt eine greifbare Fehlermeldung:
CurrentDb.Execute strSQL, dbFailOnError
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

Newermaint

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?

Beaker s.a.

September 23, 2020, 14:40:12 #5 Letzte Bearbeitung: September 23, 2020, 14:46:13 von Beaker s.a.
@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?
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Newermaint

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.

Beaker s.a.

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 = " & DieNeueAngebotsNr
Ansonsten müsste man die DB mal sehen. Kannst du ein Beispiel
hochladen?

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.