PDA

Vollständige Version anzeigen : Autowert ab 25500


DanTro
08.01.2002, 11:14
Guten Tag

Wie kann ich erreichen, das ich beim Schreiben von Rechnungen die Rechnungsnummer automatisch hochgezählt wird ?

Da die Rechnungsnummern erst ab z.B. 81100 beginnen, kann ich dieses Problem leider nicht mit Autowert lösen.

Nockenwelle
08.01.2002, 11:43
Hi,

bei Accessparadise oder in der knowhow steht folgender Code

<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>

damit du daß nicht am Ende Falsch verstehst:
Die Function errechnet dir die nächste Freie Zahl. Du kannst einen Startwert vorgeben.
Falls Lücken in deiner Laufenden Nummer auftreten, werden diese aufgefüllt und zwar folgendermaßen
Bei der Zahlenreihe
1
2
3
8
9
10
ist die nächste freie Zahl die 7. Die Lücke wird dann bis zur 4 gefüllt. Danach ist die 11 die nächste freie Zahl.

Cu

Mad
08.01.2002, 21:35
Hallo DanTro,
vielleicht hilft das:

<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=53186" target="_blank">nächster freier Zähler????? Wie geht das</a>

Gruß, Dietmar