Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: T417 am März 17, 2011, 12:41:26

Titel: Den ersten Datensatz auf 1 setzten
Beitrag von: T417 am März 17, 2011, 12:41:26
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.
Titel: Re: Den ersten Datensatz auf 1 setzten
Beitrag von: database am März 17, 2011, 13:59:14
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
Titel: Re: Den ersten Datensatz auf 1 setzten
Beitrag von: T417 am März 17, 2011, 14:10:00
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.
Titel: Re: Den ersten Datensatz auf 1 setzten
Beitrag von: imp666 am März 17, 2011, 15:53:47
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
Titel: Re: Den ersten Datensatz auf 1 setzten
Beitrag von: T417 am März 17, 2011, 16:16:45
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. :)
Titel: Re: Den ersten Datensatz auf 1 setzten
Beitrag von: ulli am März 17, 2011, 18:14:41
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.
Titel: Re: Den ersten Datensatz auf 1 setzten
Beitrag von: MzKlMu am März 17, 2011, 18:17:02
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.
Titel: Re: Den ersten Datensatz auf 1 setzten
Beitrag von: database am März 19, 2011, 08:21:04
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.
Titel: Re: Den ersten Datensatz auf 1 setzten
Beitrag von: T417 am März 21, 2011, 10:58:54
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. ;)