none
Bereits erstellten Datensatz (noch nicht gespeichert ) wieder löschen

    Frage

  • Klingt etwas kompliziert ...

    Ein Access-Formular erzeugt in einer SQL-Server-Tabelle einen neuen Datensatz.

    Dann ist ja eigentlich noch nichts gespeichert - Richtig?

    Ausserdem ist der PrimaryKey (auto in Access) noch nicht gesetzt. Das passiert erst nach dem Speichern - richtig ?

    Solange ich brav im Formular alle Felder ausfülle und den DS dann speichere ist alles in Ordnung

    An einer bestimmmten Stelle wird jedoch angeboten, einen bereits vorhandenen DS zu kopieren (mit vorgegebenen Abänderungen) und ihn dann zu bearbeiten.

    D.h. per Code wird ein Recordset basierend auf dem Quelldatensatz erzeugt und dessen Felder in einen neu erzeugten DS (ebenfalls Recordset) kopiert.

    Jetzt habe ich also meinen neuen Datensatz , frage dann den Primarykey ab und biete an ein Formular zur weitergehenden Bearbeitung zu öffnen.

    1. Frage: Geht das auch eleganter ? Recordsetclone des Quellsatzes -eher nicht, oder ?

    2. Frage: Mit dem skizzierten Vorgehen habe ich meinen neuen DFS erzeugt - vielleicht etwas kompliziert aber immerhin.

    Nur habe ich ja jetzt noch meinen angefangenen DS, der eigentlich überflüssig ist und noch nicht gespeichert wurde.

    Wie kann ich jetzt das Formular schliessen und den angefangenen DS löschen oder zumindest verhindern, daß er gespeichert wird ?

    Donnerstag, 21. August 2014 11:13

Alle Antworten

  • Am 21.08.2014 schrieb NicoNi:

    Klingt etwas kompliziert ...

    Ein Access-Formular erzeugt in einer SQL-Server-Tabelle einen neuen Datensatz.

    Dann ist ja eigentlich noch nichts gespeichert - Richtig?

    Kommt drauf.

    Ausserdem ist der PrimaryKey (auto in Access) noch nicht gesetzt. Das passiert erst nach dem Speichern - richtig ?

    Ist das eine verknüpfte Tabelle, die eigentlich vom SQL-Server kommt?

    An einer bestimmmten Stelle wird jedoch angeboten, einen bereits vorhandenen DS zu kopieren (mit vorgegebenen Abänderungen) und ihn dann zu bearbeiten.

    Von wem wird das angeboten? Von deinem Formular oder popt da plötzlich
    eine Meldung von Access auf?

    D.h. per Code wird ein Recordset basierend auf dem Quelldatensatz erzeugt und dessen Felder in einen neu erzeugten DS (ebenfalls Recordset) kopiert.

    Wenn der DS im SQL Server noch nicht gespeichert ist, wie machst Du
    dann eine Kopie davon?

    Jetzt habe ich also meinen neuen Datensatz , frage dann den Primarykey ab und biete an ein Formular zur weitergehenden Bearbeitung zu öffnen.



    1. Frage: Geht das auch eleganter ? Recordsetclone des Quellsatzes -eher nicht, oder ?

    Möglich, wobei mir noch nicht klar ist was Du da machst, was der Sinn
    dahinter sein soll.

    Wie kann ich jetzt das Formular schliessen und den angefangenen DS löschen oder zumindest verhindern, daß er gespeichert wird ?

    Bei einem Standard Formular in Access kannst Du jetzt die ESC-Taste
    drücken, dann wird der aktuell noch nicht gespeicherte DS nicht
    gespeichert und alles wieder rückgängig gemacht.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Donnerstag, 21. August 2014 16:23
  • Ich bin ein bisschen weitergekommen.

    Das Duplizieren des DS mache ich wohl am besten mit einer stored procedure und einer INSERT INTO... Anweisung.

    Die Variante INSERT INTO [View] (SELECT * from [view] WHERE ...) scheint nicht zu funktionieren, da die Identitästspalte wohl auch in der View vorhanden ist.

    Ich mache das jetzt mit einzeln benannten Spalten. Eine Heidenarbeit, dei ganzen Spalten 2x eintippenzu müssen - aber naja. geht das eleganter ?

    Bliebe eigentlich nur die Simulation der ESC-Taste im Formular.

    Was würde z.B. in diesem Szenario passieren wenn der DS nicht gespeichert ist, eine Kopie eines existiuerednen DS mit Abänderungen angelegt wird und  ich dann kurzerhand per Code im Formular zu diesem neuen DS springe?

    Freitag, 22. August 2014 07:55
  • Am 22.08.2014 schrieb NicoNi:

    Das Duplizieren des DS mache ich wohl am besten mit einer stored procedure und einer INSERT INTO... Anweisung.

    Die Variante INSERT INTO [View] (SELECT * from [view] WHERE ...) scheint nicht zu funktionieren, da die Identitästspalte wohl auch in der View vorhanden ist.

    Ich mache das jetzt mit einzeln benannten Spalten. Eine Heidenarbeit, dei ganzen Spalten 2x eintippenzu müssen - aber naja. geht das eleganter ?

    IMHO nein.

    Was würde z.B. in diesem Szenario passieren wenn der DS nicht gespeichert ist, eine Kopie eines existiuerednen DS mit Abänderungen angelegt wird und  ich dann kurzerhand per Code im Formular zu diesem neuen DS springe?

    Wieso das alles? Wenn der DS nicht gespeichert werden soll, weshalb
    willst Du ihn dann speichern?


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Freitag, 22. August 2014 12:27
  • Wie es scheint erkennst du nach der Eingabe von einigen Felder dass es in der DB bereits einen ähnlichen Datensatz gibt. Ist das richtig?

    Somit könntest du jetzt die via Recordset die Daten von diesem Datensatz lesen und direkt in die Felder des vom Benutzer angefangenen neuen Datensatzes schreiben. Dies hätte den Vorteil dass auf der DB noch keine Kopie erstellt wurde. Der Bneutzer könnte jetzt noch mit 2 mal drücken von ESC die Eingabe abbrechen.

    Wenn er noch eine Aenderung an nur 1 Feld vornehmen möchte so wäre dies ebenfalls möglich.

    Dies erscheint mir der einfachste Weg zu sein wenn ich Dein Vorgehen richtig verstanden haben

    Gruss Markus

    Freitag, 22. August 2014 12:38
  • Im Grunde geht es nur noch um das 2x ESC drücken per Code.

    Das Duplizieren des DS erfolgt mittlerweile per stored procedure. Als Rückgabewert bekomme ich die neue Identität.

    Mit der weiderum kann ich den DS in einem anderen Bearbeitungsformular öffnen.

    Schön wäre aber ...

    - wenn ich im ersten Formular (von dem aus die Duplizierung eingeleitet wurde) gleich zum neuen Datensatz springen könnte

    - und dabei die bereits gemachten EIngaben verwerfen könnte.

    Samstag, 23. August 2014 04:40
  • Am 23.08.2014 schrieb NicoNi:

    Im Grunde geht es nur noch um das 2x ESC drücken per Code.

    Zweimal hintereinander SendKeys mit ESC schicken.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Samstag, 23. August 2014 08:51
  • >Wie kann ich jetzt das Formular schliessen und den angefangenen DS löschen
    >oder zumindest verhindern, daß er gespeichert wird ?

    Schau mal, welche Wirkung in VBA die Zeile

    Me.Undo

    hat.

    HTH


    Thomas@Team-Moeller.de
    Blog: Blog.Team-Moeller.de
    Homepage: www.Team-Moeller.de


    Samstag, 30. August 2014 06:49