PDA

Vollständige Version anzeigen : AutoWert


min
08.01.2002, 12:27
Hallo,

mein Problem besteht darin das wenn ich das Feld mit dem Autowert per Function lösche und unter gleichem Namen wieder erzeuge bleibt der Wert erhalten möchte aber bei 1 wieder anfangen.
Bei Acc 2.0 war das so möglich.
Hat einer eine Idee wie ich das Problem lösen kann ohne die MDB zu komprimieren.Tabelle ist eine eingebundene Tab aus einer größeren MDB.

MfG
Michael

A.S.
08.01.2002, 13:01
Hallo Min,

um den Autowert bei 0 aufzusetzen muß zunächst der Tabelleninhalt gelöscht und anschließend die Datenbank über

Extras / Datenbankdienstprogramme

komprimiert werden.

HTH

Arno

Nockenwelle
08.01.2002, 16:21
Hi,

ich hab' zwar das gefühl genau das hier gestern oder heute schon mal gepostet zu haben, aber trotzdem

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="REM">' Normalerweise wird ein Primärschlüsselfeld einer Tabelle vom Datentyp Autowert</span>
<span class="REM">' sein. Beim Löschen von Datensätzen wird danach diese gelöschte Zahl nicht mehr</span>
<span class="REM">' verwendet und bleibt somit frei.</span>
<span class="REM">' Für mich war in einem speziellen Fall sinnvoll, daß die Nummern-IDs, die durch Löschen</span>
<span class="REM">' von Datensätzen frei wurden, auch wieder neu belegt werden.</span>
<span class="REM">' Ich habe daher das Primärschlüsselfeld vom Typ Long oder auch Double definiert und den</span>
<span class="REM">' Index auf 'keine Duplikate' gestellt.</span>
<span class="REM">' Die nachstehende Funktion ermittelt nun in einer beliebigen Tabelle den kleinsten möglichen</span>
<span class="REM">' freien Zahlenwert und benutzt ihn bei der Vergabe bei einem neuen Datensatz.</span>
<span class="REM">' Sind keine Lücken in der Zahlenfolge vorhanden, wird der neue Datensatz einfach am Ende</span>
<span class="REM">' der Tabelle mit der höchsten Zahl+1 erstellt.</span>
&nbsp;
&nbsp;
<span class="TOKEN">Public Function</span> KleinsteFreieZahl(TabName <span class="TOKEN">As</span> String, <span class="TOKEN">Optional</span> x <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>)
<span class="REM">' Ermittelt die kleinste freie Zahl im Feld Nr in der als Argument</span>
<span class="REM">' übergebenen Tabelle oder Abfrage.</span>
<span class="REM">' Das Feld, über das gezählt wird, heißt hier der Einfachheit halber &quot;Nr&quot;.</span>
<span class="REM">' Selbstverständlich könnte man den Feldnamen auch als weiteren Parameter der Funktion</span>
<span class="REM">' übergeben.</span>
<span class="REM">' Abhängig vom Argument x kann man die fortlaufenden Nummern mit einer unteren</span>
<span class="REM">' Grenze versehen, z. B. Nummern erst ab 10000 zulassen.</span>
&nbsp;
<span class="TOKEN">Dim</span> knum <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>
<span class="TOKEN">Dim</span> db <span class="TOKEN">As</span> Database, rs <span class="TOKEN">As</span> Recordset
&nbsp;
<span class="TOKEN">Set</span> db = CurrentDb()
<span class="TOKEN">Set</span> rs = db.OpenRecordset(TabName, DB_OPEN_DYNASET)
&nbsp;
knum = 0
<span class="TOKEN">If</span> IsNull(x) <span class="TOKEN">Then</span> x = 0 <span class="REM">' fehlt das Argument x, wird es auf 0 gesetzt</span>
&nbsp;
<span class="REM"> ' Schleife liest die vorhandenen Nummern aus</span>
<span class="TOKEN">Do</span> <span class="TOKEN">Until</span> knum &gt; x <span class="TOKEN">Or</span> rs.EOF
x = x + 1 <span class="REM">' x = Anfangszahl: wird der Funktion als Parameter &uuml;bergeben,</span>
knum = rs!Nr.Value <span class="REM">' um z. B. Nummern ab 10000 o. a. zu erm&ouml;glichen</span>
rs.MoveNext
<span class="TOKEN">Loop</span>
&nbsp;
<span class="TOKEN">If</span> rs.EOF <span class="TOKEN">Then</span> <span class="REM">' Wenn Ende der Datens&auml;tze erreicht,</span>
knum = knum + 1 <span class="REM">' dann die n&auml;chstgr&ouml;&szlig;ere Zahl anh&auml;ngen</span>
<span class="TOKEN">Else</span>
knum = knum - 1 <span class="REM">' andernfall wird die erste freie Zahl zur&uuml;ckgegeben</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
rs.Close
&nbsp;
KleinsteFreieZahl = knum
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span>
&nbsp;
<span class="REM">' November 1998 (c) Klaus Blum</span>
<span class="REM">' überarbeitet April 1999</span>
<span class="REM">' KBlum@t-online.de</span>
<span class="REM">' KBlum@aol.com</span></pre></div>

nimm halt keinen Autowert, sondern ein Feld mit Datentyp long Integer und pass die Funktion auf deine Bedürfnisse an.

Cu