Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: gromax am Juni 02, 2016, 22:53:57

Titel: Zähler in der Zusammensetzung
Beitrag von: gromax am Juni 02, 2016, 22:53:57
Liebe Access-Profis,

nun komm ich schon wieder.

In meiner DB zur Bücherverwaltung sollte eine Kennzeichnung (Klebestreifen) generiert werden, die entsprechend einer Kategoerie einen Kurznamen und entsprechend der Anzahl der in dieser Kategorie bereits vorhandenen Bücher eine um 1 erhöhte laufende Nummer ausweist.
Bsp:
- Kategorie: Landeskunde
- Kurzzeichen: 22LK
- vorhandene Anzahl: 19 Exemplare
- neue Nummer: 20
die zu generierende Kennzeichnung: 22LK20

Jetzt habe ich folgenden Code in meinem HauptFormular hinter dem Kombinationsfeld "Kategorie" unter dem Ereignis 'Nach Aktualisierung' abgelegt:
Private Sub txt_KAT_FS_AfterUpdate()
Dim strKatNameKurz As String
Dim lngKat As Long
Dim lngAnzKategorie As Long
Dim lngNummer As Long

lngKat = txt_KAT_FS.Value                                                                                                                       'Eintrag in das Formular
lngAnzKategorie = DCount("*", "tblBuecher", "KAT_FS = " & lngKat)                                                                'Datensätze mit diesem Eintrag werden gezählt - ohne den derzeit zum Eintrag anstehenden
BUC_Kategorie = DLookup("KAT_NameKurz", "tblKategorien", "KAT_PS =" & Forms!frm_BuchEingabe!txt_KAT_FS)                                                       'Kurzbezeichnung wird aus der Tabelle ausgelesen
lngNummer = lngAnzKategorie + 1                                                                                                             'Anzahl wird um 1 erhöht
BUC_MedienNummer = BUC_Kategorie & lngNummer                                                                                   'Kennzeichnung wird zusammengesetzt

End Sub

Das funktioniert bei der ersten Eingabe eines neuen Buches so, dass die Kennzeichnung unter "Medien-Nr." ausgewiesen wird! Prima!
Aber:
- Wechsele ich - aus welchen Gründen auch immer - den Eintrag zur Kategorie und wähle ich in diesem Kombinationsfeld einen anderen aus, dann erhalte beim Zurückgehen auf die vorherige Kategorie wieder eine andere Nummer (er zählt ja wieder um 1 hoch) nämlich 22LK21!
- Wenn ich zu einem anderen Bucheintrag derselben Kategorie wechsele (Bsp. 22LK10) und dort kurzzeitig eine andere Kategorie anklicke, von der aus ich wieder zur vorherigen zurückgehe, so zählt er erneut um 1 hoch und ich erhalte die bereits vergebene Zahl (22LK21) auch bei diesem Buch.

Wie kann ich denn eine Zeichenfolge übergeben, die Bestand hat bzw. zu gegebener Situation aktualisiert wird?

Viele Grüße
gromax
Titel: Re: Zähler in der Zusammensetzung
Beitrag von: Beaker s.a. am Juni 03, 2016, 15:44:19
Hallo Gromax,
Überprüfe auf NewRecord.
If Me.Newrecord Then

lngKat = txt_KAT_FS.Value                                                                                                                       'Eintrag in das Formular
lngAnzKategorie = DCount("*", "tblBuecher", "KAT_FS = " & lngKat)                                                                'Datensätze mit diesem Eintrag werden gezählt - ohne den derzeit zum Eintrag anstehenden
BUC_Kategorie = DLookup("KAT_NameKurz", "tblKategorien", "KAT_PS =" & Forms!frm_BuchEingabe!txt_KAT_FS)                                                       'Kurzbezeichnung wird aus der Tabelle ausgelesen
lngNummer = lngAnzKategorie + 1                                                                                                             'Anzahl wird um 1 erhöht
BUC_MedienNummer = BUC_Kategorie & lngNummer         

End If


hth
gruss ekkehard
Titel: Re: Zähler in der Zusammensetzung
Beitrag von: gromax am Juni 04, 2016, 10:34:53
Hallo Ekkehard,
vorab vielen Dank für Deine Unterstützung. Die ,If Me.Newrecord-Bedingung' bringt mich auf alle Fälle weiter; ich habe diesen Code übernommen.
Ein Störfall bleibt weiterhin, von dessen Lösung ich noch keine Vorstellung habe:

Denken wir an die Kategorie ,22LK'; innerhalb derer haben wir 20 Bücher gespeichert – also 22LK1 bis 22LK20.
Was passiert, wenn wir eines dieser 20 Bücher (Beispiel 22LK11) aussortieren; jetzt haben wir nur noch 19 Bücher in dieser Kategorie und die DB vergibt als nächste Kennzeichnung 22LK20 – aber die hatten wir schon.

Gibt es eine Möglichkeit, die vorhandenen Kennzeichnungen (22LK1 – 22LK20) auf ihre Geschlossenheit zu überprüfen und evtl. ,,freie Kennzeichnungen" auszuwählen?

Wenn es Ideen gibt, nehme ich diese gerne und dankbar auf.
Viele Grüße
gromax
Titel: Re: Zähler in der Zusammensetzung
Beitrag von: Beaker s.a. am Juni 04, 2016, 14:25:13
Hallo gromax,
ZitatWas passiert, wenn wir eines dieser 20 Bücher (Beispiel 22LK11) aussortieren; jetzt haben wir nur noch 19 Bücher in dieser Kategorie und die DB vergibt als nächste Kennzeichnung 22LK20 – aber die hatten wir schon.
Verwende DMax +1 anstatt DCount.

Zitatdie zu generierende Kennzeichnung: 22LK20
Wird die so abgespeichert, oder nur zur Anzeige zusammengesetzt.
In ersterem Fall ist das falsch, da dann die Daten nicht atomar wären.
Die Nummer gehört in ein eigenes Feld.

ZitatWas passiert, wenn wir eines dieser 20 Bücher (Beispiel 22LK11) aussortieren; jetzt haben wir nur noch 19 Bücher
Kennung und Anzahl sind für mich zwei paar Schuhe. Es macht IMO auch
keinen Sinn, Lücken aufzufüllen. Das Buch an sich wird ja wohl durch eine
eindeutige ID gekennzeichnet sein. Wenn das womöglich die o.a. Kennung
sein sollte, macht es noch weniger Sinn.
Aussortieren sollte i.Ü. auch nicht löschen bedeuten, sondern die Vergabe
eines dazu bestimmten Merkmals. Ich verwende normalerweise ein Datums-
feld "geloescht". Da kommt beim "löschen" eben das Datum rein.
Abfragen kann man das dann mit IsNull. Ausserdem entstehen so keine
verwaisten DS in abhängigen Tabellen.

gruss ekkehard
Titel: Re: Zähler in der Zusammensetzung
Beitrag von: gromax am Juni 05, 2016, 15:09:53
Hallo Ekkehard,

Lösch-Vorgang, Atomisierung und DMax-Funktion wie angeraten umgesetzt - jetzt bin ich einen großen Schritt weitergekommen!

Vielen Dank!

Einen guten Start in die Woche
gromax
Titel: Re: Zähler in der Zusammensetzung
Beitrag von: MzKlMu am Juni 05, 2016, 17:30:48
Hallo,
ZitatLösch-Vorgang....,
Einen Löschvorgang sollte gar nicht geben. Es sollte niemals ein Buch das es gab gelöscht werden. Hat ekkehard auch schon geschrieben.
Titel: Re: Zähler in der Zusammensetzung
Beitrag von: gromax am Juni 08, 2016, 21:04:17
Hallo Klaus,

danke für Deinen Nachtrag!
Ich habe den "Löschvorgang" entsprechend der Idee von Ekkehard umgesetzt, will heißen: Der Klick auf die Lösch-Taste setzt ein Ja/Nein-Feld auf "Ja" und in der darauf aufbauenden Abfrage werden die mit "Ja" markierten Datensätze nicht mehr angezeigt. Das Buch bleibt aber in der Tabelle gespeichert.

Vielen Dank für das Kümmern!

Viele Grüße
gromax