Autowert ermitteln

Von: , Frage gestellt am Do, 26. Aug 1999

Hallo,

eine Datenbank unter Access 97 arbeitet mit Auto-Werten als Schlüssel im Multi-User-Zugriff.

Ich muß nun nach erfolgreicher Speicherung des Datensatzes den Auto-Wert ermitteln (Alle Daten werden über VBA eingetragen, der Datensatzzeiger steht nach dem Speichern möglicherweise nicht mehr auf dem zuletzt gesicherten Datensatz).

Gibt es in Access eine Möglichkeit den eingetragenen Auto-Wert abzufragen?

Dirk

10 Antworten zu dieser Frage

  1. Antwort von nach 2 Tagen hilfreich
    Re: Autowert ermitteln

    Du könntest in Deiner Tabelle ein Hilfsfeld anlegen, in das Du beim AddNew eine Mehrstellige Zufallszahl (z.B. auf Grundlage der Systemzeit) ablegst oder einen anderen eindeutigen Wert. Anschließend liest Du den Recordsatz auf Grundlage dieses Feldes wieder aus und erhälst damit auch den entsprechenden Autowert.

    Mitsch

    • Antwort von nach 2 Tagen hilfreich
      Re^2: Autowert ermitteln

      Du könntest in Deiner Tabelle ein
      Hilfsfeld anlegen, in das Du beim AddNew
      eine Mehrstellige Zufallszahl (z.B. auf
      Grundlage der Systemzeit) ablegst oder
      einen anderen eindeutigen Wert.
      Anschließend liest Du den Recordsatz auf
      Grundlage dieses Feldes wieder aus und
      erhälst damit auch den entsprechenden
      Autowert.
      Wenn man einen eindeutigen Schlüssel selbst vergibt, ist das in einer normalisierten Tabelle auch gleichzeitig der Primärschlüssel - wozu braucht man dann noch den Autowert?

      Reinhard

      • Antwort von nach 3 Tagen hilfreich
        Re^3: Autowert ermitteln

        Wenn man einen eindeutigen Schlüssel
        selbst vergibt, ist das in einer
        normalisierten Tabelle auch gleichzeitig
        der Primärschlüssel - wozu braucht man
        dann noch den Autowert?

        Reinhard
        Da gebe ich Dir grundsätzlich recht. Allerdings gehe ich aufgrund der Problemschilderung davon aus, dass es sich um eine 'gewachsene' DB-Anwendung handelt, deren Tabelle(n) nun mal mit Autowert-Primärschlüssel aufgebaut wurde(n). Da kann man nicht einfach zwischendurch den Primärschlüssel ändern. Unter Umständen muss man danach die gesamte Anwendung anpassen. Ein zusätzliches Hilfsfeld ist dabei das kleinere Übel und könnte dem Anfrager bei seinem konkreten Problem hilfreich sein.

        Mitsch

        • Antwort von nach 3 Tagen hilfreich
          Re^4: Autowert ermitteln

          Na ja, wenn Dirk erst jetzt überlegt, wie er den Primärschlüssel wieder in die Applikation bekommt, kann da wohl noch nicht so viel gewachsen sein.
          Aber wie so oft: Wir sind mal wieder am mutmaßen ;=)

          Reinhard

  2. Antwort von nach 8 Minuten hilfreich
    Re: Autowert ermitteln

    Ich muß nun nach erfolgreicher Speicherung
    des Datensatzes den Auto-Wert ermitteln
    (Alle Daten werden über VBA eingetragen,
    der Datensatzzeiger steht nach dem
    Speichern möglicherweise nicht mehr auf
    dem zuletzt gesicherten Datensatz).
    Direkt nach dem Aufruf von AddNew kannst du das Feld auslesen, in dem der AutoWert steht. Gilt IMHO allerdings nur für Jet-Datenbanken, beim SQL Server sieht das anders aus (Reinhard, dein Einsatz...).

    Gruß Tobias

    • Antwort von nach einer Stunde hilfreich
      Re^2: Autowert ermitteln

      Ich muß nun nach erfolgreicher
      Speicherung
      des Datensatzes den Auto-Wert ermitteln
      (Alle Daten werden über VBA eingetragen,
      der Datensatzzeiger steht nach dem
      Speichern möglicherweise nicht mehr auf
      dem zuletzt gesicherten Datensatz).

      Direkt nach dem Aufruf von AddNew kannst
      du das Feld auslesen, in dem der AutoWert
      steht. Gilt IMHO allerdings nur für
      Jet-Datenbanken, beim SQL Server sieht das
      anders aus (Reinhard, dein Einsatz...).

      Gruß Tobias
      So ist es, bei SQL Server empfiehlt sich folgendes (geht auch bei Jet):

      Dim RS As Recordset
      Set RS = ...
      RS.AddNew
      '...
      RS.Update
      RS.MoveLast
      Ergebnis = RS!MeinAutowertFeld

      Reinhard

      • Antwort von nach 15 Stunden hilfreich
        Re^3: Autowert ermitteln

        Hallo,

        erst mal vielen Dank für eure Antworten. Mein Problem ist aber der Multi-User-Zugriff.
        Es kann also sein, daß ein anderer Benutzer auch bereits einen neuen Datensatz eingefügt hat. In diesem Fall würde das mit MoveLast nicht funktionieren.
        Gibt es noch eine andere Lösung?

        Dirk Ich muß nun nach erfolgreicher
        Speicherung
        des Datensatzes den Auto-Wert ermitteln
        (Alle Daten werden über VBA eingetragen,
        der Datensatzzeiger steht nach dem
        Speichern möglicherweise nicht mehr auf
        dem zuletzt gesicherten Datensatz).

        Direkt nach dem Aufruf von AddNew kannst
        du das Feld auslesen, in dem der AutoWert
        steht. Gilt IMHO allerdings nur für
        Jet-Datenbanken, beim SQL Server sieht
        das
        anders aus (Reinhard, dein Einsatz...).

        Gruß Tobias

        So ist es, bei SQL Server empfiehlt sich
        folgendes (geht auch bei Jet):

        Dim RS As Recordset
        Set RS = ...
        RS.AddNew
        '...
        RS.Update
        RS.MoveLast
        Ergebnis = RS!MeinAutowertFeld

        Reinhard

        • Antwort von nach 16 Stunden hilfreich
          Re^4: Autowert ermitteln

          Hallo,

          erst mal vielen Dank für eure Antworten.
          Mein Problem ist aber der
          Multi-User-Zugriff.
          Es kann also sein, daß ein anderer
          Benutzer auch bereits einen neuen
          Datensatz eingefügt hat. In diesem Fall
          würde das mit MoveLast nicht
          funktionieren.
          Wenn Du den Recordset mit dbSeeChanges öffnest, solltest Du die Änderungen des anderen Benutzers mitbekommen...

          Ansonsten würde ich die Schlüsselvergabe halt ohne Autowert realisieren - dann ist man ohnehin flexibler.

          Reinhard

          • Antwort von nach 16 Stunden hilfreich
            Das war nix...

            Pardon, da hab ich nicht nachgedacht - Du willst die Änderungen des anderen Benutzers ja gerade nicht mitbekommen...

            Du könntest die Tabelle solange exklusiv sperren, wie das Eintragen dauert - dann kannst Du sicher sein, daß kein anderer etwas hinzugefügt hat, müßtest dann aber auch den Sperrfall abfangen, damit die Benutzer nicht irritiert werden.

            Einfacher ist es aber wohl, die Nummernvergabe selbst vorzunehmen, und auf die dämlichen Autowerte zu verzichten ...

            Reinhard



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!