Access-o-Mania

Access-Forum => Tabelle/Abfrage => Thema gestartet von: Newermaint am September 23, 2020, 09:53:39

Titel: CurrentDb.Execute INSERT INTO
Beitrag von: Newermaint am September 23, 2020, 09:53:39
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
Titel: Re: CurrentDb.Execute INSERT INTO
Beitrag von: Newermaint am September 23, 2020, 10:36:22
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
Titel: Re: CurrentDb.Execute INSERT INTO
Beitrag von: Beaker s.a. am September 23, 2020, 11:43:14
@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
Titel: Re: CurrentDb.Execute INSERT INTO
Beitrag von: PhilS am September 23, 2020, 12:09:25
Wenn man dbFailOnError ergänzt, bekommt eine greifbare Fehlermeldung:
CurrentDb.Execute strSQL, dbFailOnError
Titel: Re: CurrentDb.Execute INSERT INTO
Beitrag von: Newermaint am September 23, 2020, 14:29:18
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?
Titel: Re: CurrentDb.Execute INSERT INTO
Beitrag von: Beaker s.a. am September 23, 2020, 14:40:12
@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?
Titel: Re: CurrentDb.Execute INSERT INTO
Beitrag von: Newermaint am September 23, 2020, 14:55:52
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.
Titel: Re: CurrentDb.Execute INSERT INTO
Beitrag von: Beaker s.a. am September 24, 2020, 13:36:46
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