Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Den ersten Datensatz auf 1 setzten

Begonnen von T417, März 17, 2011, 12:41:26

⏪ vorheriges - nächstes ⏩

T417

Da ich jetzt die ganze Zeit im Kreis programmiere:

Ich will, das der erste Datensatz der in einer Tabelle eingetragen wird immer den Wert 1 hat.
Ich hab soweit auch einen funktionstüchtigen Code:
If CurrentRecord = 1 Then CurrentDb.Execute ("UPDATE Rechnungstabelle SET Index=1")

Der Code funktioniert zwar und schreibt mir auch eine 1 in das Indexfeld, jedoch ist der Code noch nicht optimal.
Er überschreibt gerne mal, alle Index. :-\

Außerdem bekomme ich einfach nicht das richtige Ereignis ausgewählt.
Ich will das der Code nur aktiviert wird, wenn ich einen neuen Datensatz anlegt habe.


Gruß
T.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

database

Hallo,

ZitatIch will, das der erste Datensatz der in einer Tabelle eingetragen wird immer den Wert 1 hat.

Auch wenn mir der tiefere Sinn der Aktion nicht ganz klar sein will...

Wie wäre es, wenn du das ID-Feld als Autowert ausbildest - dann hast du beim ersten Eintrag automatisch 1 drin stehen.
Wenn du bereits Daten eingegeben hast, diese gelöscht hast und nun wiederum mit 1 beginnen willst, musst du die DB
komprimieren/reparieren - danach beginnt die Nummerierung eines Autowert-Feldes einer LEEREN Tabelle wieder bei 1

T417

Der Sinn liegt in einer automatisch erstellten Nummer. ;)
Daher ist AutoWert eher schlecht.
AutoWert lässt keine Änderungen an der Nummerierung zu. Es müssen aber Änderungen an der Nummer durchführbar sein.


Gruß
T.
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

imp666

Wenn du mySQL als Backend verwendest, dann kannst du (auch wenn eine Tabelle einen Index mit Autowert hat) den Index dennoch selbst setzen und du kannst auch den "nächsten" Indexwert festlegen (also wenn z.B. der letzte Datensatz gelöscht wurde und du im Index demnach 1 zurück gehen müsstest).

Bei Access hingegen geht das nicht so einfach.

Den Indexwert eines Autowert-Feldes setzen geht über eine "Anfügeabfrage". Die anzufügende Tabelle muss beim Index kein Autowert sein und wenn diese dann angefügt wird, dann übernimmt der Autowert automatisch den letzten (in diesem Falle den angefügten) Index. Vermutlich ist es aber einfacher, wenn man die Werte selbst ermittelt und kein Autowert-Feld für den Index verwendet. Den nächstmöglichen Indexwert ermittelt man dann mit einer Abfrage:

  NextIndex=CLNG(DLookup("MAX(id)", "Tabellenname"))+1

T417

Nur für den Fall das ich den Wald vor lauter Bäumen nicht gesehen habe.  ;)
Ich zähle den Wert automatisch mittels selbstgebauten Zähler hoch.
Me!Index = DMax("[Index]", "Rechnungstabelle", "") + 1

Ich brauche dafür nur einen Startpunkt, falls der noch nicht vorhanden ist, also logischerweise die 1.

@Imp
Ich verwende zwar gerne SQL-Befehle, arbeite aber nicht mit mySQL.
Aber interessante Infos über AutóWert. Das wusste ich noch nicht alles. :)
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7

ulli

Du kannst im Anzeige-Ereignis des Formulars per DCount prüfen lassen, ob die Anzahl der Datensätze in der Tabelle gleich Null ist und in diesem Fall den Index auf 1 setzen. Ich habe das gerade mal bei mir ausprobiert, scheint zu funktionieren.

MzKlMu

Hallo,
die Nz Funktion erschlägt alles.
Me!Index = Nz(DMax("[Index]", "Rechnungstabelle", ""),0) + 1
Legt den Startwert auf 0 fest wenn nichts vorhanden. 0 +1 = 1, wie gewünscht.
Gruß Klaus

database

Hallo,

ZitatDer Sinn liegt in einer automatisch erstellten Nummer
:D ;D Scherz - oder?
Des Weiteren sollte man bei der Verwendung von Feldnamen und Bezeichnungen ein wenig vorsichtiger sein - Index würde ich persönlich KEIN Feld nennen!

Meine Frage wäre eigentlich in die Richtung angelegt gewesen zu erfahren ob damit etwas zu nummerieren sei, dass der Benutzer zu sehen bekommt wie z.B. eine Rechnungsnummer.
In dem Fall ist ein Autowert natürlich völlig unbrauchbar. Ich bin bei meiner Antwort mehr davon ausgegangen den PK zu definieren!

Die fortlaufende Nummerierung eines Zählerfeldes nach Vorschlag von MzKlMu stellt dabei die BESTE Form dar, da sie auch dann funktioniert wenn im Startwert NULL steht.

T417

Ich wusste nicht das Index ein vordefiniertes Feld ist. Egal, dann werd ich es ändern.
Tja, die Nz Funktion war die Lösung. Hab den Wald vor lauter Bäumen nicht mehr gesehen. :P

Danke für die einfache und effektive Lösung. ;)
Arbeite normalerweise mit Access 2000/2003
In letzter Zeit häufiger mit Access 2007

Sowohl auf WinXP als auch auf Win7