Marcus: eindeutige ID

Hallo Brettgemeinde !

Ich muß für unser Intranet ein Buchungsformular
erstellen wobei ich eine eindeutige ID brauche.

Die eindeutige ID soll ich aus folgenden Teil
zusammensetzen:

akutelle Datum : z.b. 19991111
Buchstabe:       z.b. A
Buchungsnr:      z.b. 1

Die Buchungsnummer soll nun fortlaufend weitergehen.

Weiß jemand ein Tip wie ich das programmieren kann ??
Oder gibt es die Möglichkeit vorab schon in der Datenbank (Access) nachzuschauen welche ID(Autowert) frei ist und diese dann ins Formular mit zuübernehmen ?

Zwar hätte ich jetzt 2 IDs (den Autowert in access) und dann die eindeutige ID von mir !

Über jeden Tip wäre ich sehr Dankbar

cu

Marcus

  1. Die eindeutige ID soll ich aus folgenden Teil
    zusammensetzen:

    akutelle Datum : z.b. 19991111
    Buchstabe:       z.b. A
    Buchungsnr:      z.b. 1

    Die Buchungsnummer soll nun fortlaufend weitergehen.

    Weiß jemand ein Tip wie ich das programmieren kann ??
    Oder gibt es die Möglichkeit vorab schon in der Datenbank (Access) nachzuschauen welche ID(Autowert) frei ist und diese dann ins Formular mit zuübernehmen ?

    Zwar hätte ich jetzt 2 IDs (den Autowert in access) und dann die eindeutige ID von mir !

    Hallo,

    also wenn Du eine fortlaufende Nummer brauchst, dann ist der Autowert in Access ganz brauchbar. Leg Dir dann einfach einen neuen Satz an (objRS.AddNew), beleg Deine Felder mit Defaultwerten und setze nach dem Update ein objRS.Requery ab.
    Dann kannst Du die ID mit objRS.Fields("Feldname") abfragen und in Dein Formular übernehmen.

    Das ganze funzt natürlich auch so:
    <%
    Set objRS = Server.CreateObject("ADODB.Recordset")
    SQL = "SELECT max(FeldnameID) AS NewID From tblTabelle"
        objRS.Open SQL, objConn
            New_ID = objRS.Fields("NewID") + 1
        objRS.Close
    Set objRS = Nothing
    %>

    Solltest Du innerhalb mehrerer Buchungen auch mehrmals die 1 benötigen (also: 19991111A1, 19991111A2, 19991111B1, ...) solltest Du die Felder trennen in Datum, Buchstabe, ID und dann als zusammengesetzten Primärschlüssel deklarieren. Dann kannst Du die ID auch mit dem o.a. Beispiel abfragen und um 1 erhöhen.

    Tschau, Stefan

    1. Die eindeutige ID soll ich aus folgenden Teil
      zusammensetzen:

      akutelle Datum : z.b. 19991111
      Buchstabe:       z.b. A
      Buchungsnr:      z.b. 1

      Die Buchungsnummer soll nun fortlaufend weitergehen.

      Weiß jemand ein Tip wie ich das programmieren kann ??
      Oder gibt es die Möglichkeit vorab schon in der Datenbank (Access) nachzuschauen welche ID(Autowert) frei ist und diese dann ins Formular mit zuübernehmen ?

      Zwar hätte ich jetzt 2 IDs (den Autowert in access) und dann die eindeutige ID von mir !

      Hallo,

      also wenn Du eine fortlaufende Nummer brauchst, dann ist der Autowert in Access ganz brauchbar. Leg Dir dann einfach einen neuen Satz an (objRS.AddNew), beleg Deine Felder mit Defaultwerten und setze nach dem Update ein objRS.Requery ab.
      Dann kannst Du die ID mit objRS.Fields("Feldname") abfragen und in Dein Formular übernehmen.

      Das ganze funzt natürlich auch so:
      <%
      Set objRS = Server.CreateObject("ADODB.Recordset")
      SQL = "SELECT max(FeldnameID) AS NewID From tblTabelle"
          objRS.Open SQL, objConn
              New_ID = objRS.Fields("NewID") + 1
          objRS.Close
      Set objRS = Nothing
      %>

      Solltest Du innerhalb mehrerer Buchungen auch mehrmals die 1 benötigen (also: 19991111A1, 19991111A2, 19991111B1, ...) solltest Du die Felder trennen in Datum, Buchstabe, ID und dann als zusammengesetzten Primärschlüssel deklarieren. Dann kannst Du die ID auch mit dem o.a. Beispiel abfragen und um 1 erhöhen.

      Tschau, Stefan

      Hi !

      Danke für die schnelle Antwort !

      Ich denke so geht es bestimmt, aber ich hätte da
      noch eine Frage...

      Was ist wenn 2 Leute zeitgleich das Formular öffnen,im
      Bezug auf die Vergabe der IDs ????

      cu

      Marcus

      1. Hi !

        Danke für die schnelle Antwort !

        Ich denke so geht es bestimmt, aber ich hätte da
        noch eine Frage...

        Was ist wenn 2 Leute zeitgleich das Formular öffnen,im
        Bezug auf die Vergabe der IDs ????

        cu

        Marcus

        Hallo Marcus,

        da wäre die erste Lösung wohl doch besser. Leg einen neuen Satz an und frag die ID ab. Dann ist diese schon belegt und der nächste User bekommt eine höhere ID.
        Gleichzeitige (Schreib)Zugriffe innerhalb der DB werden mit kurzzeitigen Locks der Sätze verhindert, so daß dieselbe ID nicht mehrfach vergeben wird.

        Da Problem wird dann nur sein, daß Du keine eindeutigen ID's bekommst, die für jede Buchung immer wieder mit 1 beginnen.
        Hier würde sich mein zweites Beispiel anbieten, mit dem Unterschied, daß Du den Satz direkt anlegst. Da die 3 Felder als PK hinterlegt sind, kann kein anderer User dieselbe ID bekommen.

        <%
        ' --- Ermitteln der max. ID
        SQL = "SELECT max(Feldname) As MaxID From tblTabelle"
        Set objRS = Server.CreateObject("ADODB.Recordset")
            objRS.Open SQL, objConn
                 New_ID = objRS.Fields("MaxID")
            objRS.Close

        ' --- Abfrage mit neuer ID (0 Datensätze)
        SQL = "SELECT * FROM tblTabelle WHERE ID = New_ID"
            objRS.Open SQL, objConn
            objRS.AddNew
                objRS.Fields("Datum") = New_Date
                objRS.Fields("Char") = New_Char
                objRS.Fields("Feldname") = New_ID
                objRS.Update
        ' --- Wiederholem der Abfrage mit neuer ID (1 Datensatz)
            objRS.Requery
            ' --- Zuweisung an die Felder
            ...

        objRS.Close
        Set objRS = Nothing
        %>

        Tschau, Stefan