Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

fortlaufende Nr in Abfrage erzeugen

Begonnen von lukyluke68, Dezember 16, 2013, 13:51:26

⏪ vorheriges - nächstes ⏩

DF6GL

Hallo,

wenn Berechnungen in einer Abfrage erfolgen (berechnete Spalten verwendet werden), dann ist eine solche Abfrage nicht mehr aktualisierbar, was sich (auch) an der "Sperrung" der Formularfelder äußert.
 

Insofern lass die Berechnungen in der Abfrage bleiben und berechne die lfdNr wie von Eberhard vorgeschlagen mit Hilfe einer VBA-Funktion.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

lukyluke68

Hallo,

ich habe nun den Code

DatlfdNr: Format((select count (*) from Gesamtdatenerfassung_tab as x where x.Gesamtdaten_ID < Gesamtdatenerfassung_tab.Gesamtdaten_ID)+1;"0000") & "/" & Rechts(Jahr(Datum());4)

in die Abfrage gelegt, die für den Bericht vorgesehen ist. Im Formular zur Dateneingabe für den anschl. Bericht wähle ich nun über ID aus und somit habe ich dann im Bericht die richtige DatlfdNr vorliegen.
Ich denke dass ich bis jetzt richtig liege. Auf jeden Fall ist es momentan genau so wie ich es gerne haben möchte.
Ob die DatlfdNr nun im Jahr 2014 neu angelegt wird mit 0001/2014 werde ich ja dann im neuen Jahr sehen :)

gruß Ludwig
Gruß Ludwig

DF6GL

Hallo,

das könnte auch gleich getestet werden, indem das Systemdatum temporär auf z. B.  den 1.1.2014  gesetzt wird.


Ich kann aber gleich sagen, dass das eher enttäuschend sein wird.  (Die "Laufende Nummer" schert sich nicht um den Jahreswechsel)



Zudem ist die LFdNr in keiner Weise irgendwie aussagekräftig. Wenn z.B. Datensätze gelöscht werden, bleibt zwar die Lfdnr an sich lückenlos fortlaufend, wird aber dadurch auch unterschiedlichen Datensätzen zugeordnet, so dass die einzige Wirkung in einer für den User vielleicht "angenehmen" Lesbarkeit des Berichtes liegt.


Weiterhin ist der Ausdruck:

... & Rechts(Jahr(Datum());4)

schlichtweg Unsinn.


Die String-Funktion (Rechts() auf einen numerischen Ausdruck (bzw. numerische Zahl) anzuwenden, kann ins Auge gehen.

... & Jahr(Datum())   allein liefert schon die numerische Jahreszahl, die an sich schon 4-stellig ist. Der "&"-Operator sorgt dann dafür, dass intern der numerische Wert beim Verketten in einen String konvertiert wird.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ebs17

ZitatDie "Laufende Nummer" schert sich nicht um den Jahreswechsel

Nicht ganz: Durch die Art der Berechnung werden alle defekten Teile aller Jahre in das dann aktuelle Jahr übernommen. Der Auftragnehmer wird sich freuen über viel viel Arbeit.

Zitatwerde ich ja dann im neuen Jahr sehen

Irgendwas wirst Du sehen ...
Mit freundlichem Glück Auf!

Eberhard

DF6GL

Hallo,


mit "Laufender Nummer" meinte ich nicht "DatlfdNr", sondern den Wert, den Count(*) im dargelegten SQL-String der berechneten Abfrage-Spalte ermittelt und der beim Jahreswechsel wieder bei 1 beginnen soll.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

lukyluke68

Hallo,

Ich bin jetzt wirklich schon am überlegen, diese lfdNr die ich gerne im Bericht haben möchte, in meinem Formular zur Datenerfassung eines defekten Ersatzteiles manuell in einem Textfeld anzulegen. Da ich ja das Formular nun umgebaut habe, dass der letzte Eintrag im Datensatz immer oben angezeigt wird ist auch die zuletzt eingetragene lfdNr sofort ersichtlich. Diese würde ich dann im gerade eingegebenen Datensatz um 1 erhöhen. Somit ist dann diese Nummer auch ID wieder zugeordnet.

Gruß Ludwig
Gruß Ludwig

bahasu

#21
Hi,

Wenn Du die Nummern-Angabe zum Identifizieren benötigst, mußt Du eine von Eberhard vorgeschlagene Lösung (peace  ;D) verwenden, bei der die Nummer in der Tabelle gespeichert wird.

Im Anhang findest Du ein erstes Beispiel, das eine Orientierung geben kann, wie solch eine Nummer erstellt wird. Genutzt wird das Ereignis "Vor Aktualisierung" im Formular. Es wird ein Eingabe_Datum erfasst, um daraus das Jahr abzuleiten.

Vielleicht hilft das.

Harald

Nachtrag:
Unter Umständen ist ein Eingabe_Datum nicht optimal:
Wenn eine Eingabe am 02.01. gemacht wird, sie sich aber auf z.B. 30.12 des Vorjahres bezieht, sollte ein "Geschäftsjahr" oder "Reparaturjahr" als Basis verwendet werden

Servus

lukyluke68

#22
Hallo,

ich möchte mein Thema nochmal aufgreifen da ich eine Erweiterung vor habe.

Zu dem u.a. Code der einwandfrei funktioniert und mir zu jeder Gesamtdaten_ID eine lfd W_ScheinNr (Warenschein Nr) erzeugt in Form von xxx1/2014 usw. möchte ich nun noch ein weiteres Datum dazufügen.

Das Feld nennt sich Wartungsdatum.

Also gibt es zu jeder Gesamtdaten_ID entweder ein Stoerungsdatum oder ein Wartungsdatum. Beide Einträge auf eine ID wird es nicht geben.

W_ScheinNr: Format((Select Count (*) FROM [Gesamtdatenerfassung_tab] as X WHERE [X].[Gesamtdaten_ID] < [Gesamtdatenerfassung_tab].[Gesamtdaten_ID]
and year(
  • .[Stoerungsdatum]) = year([Gesamtdatenerfassung_tab].[Stoerungsdatum]))+1;"0000") & "/" & Rechts(Jahr([Stoerungsdatum]);4)

    Kann mir jemand behiflich sein wie nun dieseer Code um das Wartungsdatum erweitert werden muss?

Gruß Ludwig

ebs17

Der Kopf ist rund, damit das Denken die Richtung wechseln kann.

Du hast aber die wiederholt gegebenen Hinweise nicht verstanden und erst recht nicht umgesetzt, und das "funktioniert einwandfrei" hängt nur damit zusammen, dass Du bestenfalls in einem idealisierten Zustand "testest".
Noch einmal zur Verdeutlichung: Mit Deinem Codeteil wird die laufende Nummer jedes Mal über alle Datensätze neu berechnet.
Das heißt zum einen: Die Berechnung einer laufenden Nummer ist hier technisch bedingt aufwändig und kostet Zeit, bei einer entsprechenden Datenmenge dann auch spürbar (Laufzeit!).
Zum anderen: Wenn jetzt innerhalb der vorhandenen Datensätze ein Datensatz eingeschoben wird oder auch gelöscht wird (und Du glaubst nicht, was ein User so alles anstellen kann, wenn Du ihn nicht knebelst), verschieben sich wegen der ständigen Neuberechnung für die nachfolgenden Datensätze die Nummern.
ZitatNochmal zum Verständnis:
Ich bin auf eine lfd. Nr. mit Jahreszahl gekommen, da wir für defekte Ersatzteile die an eine Fremdfirma zur Reparatur versendet werden, einen Warenbegleitschein mit zum Versand legen müssen.
...
Anhand dieser Nr. wird dem erfassten Ersatzteil der betreffende Datensatz, wo Daten wie Name, Datum, Störart, usw. zugewiesen.)
Wie gut bist Du für den Fall gerüstet, dass sich in der EDV die Warenbegleitscheinnummern ändern, nicht aber auf dem Papier (was sicher auch bewegt wird), und für den Fall, dass eben die Zuordnung Ersatzteil und Person auseinanderfliegt?

Zu Deiner neuen Frage: Zur Technik will ich mich da nicht äußern, weil ich alleine durch den Inhalt schon Probleme habe. Eine Vorgangsnummer zu einem Ersatzteil würde ich im Moment der Erfassung vergeben, eine Lieferungsnummer (die mehrere Ersatzteile umfasst?) zum Zeitpunkt der Lieferung. Welche Rolle da ein Störungsdatum oder ein Wartungsdatum spielen sollen, wäre näher zu erklären.

Wenn womöglich in Deiner Sichtweise das Störungsdatum durch das Wartungsdatum ersetzt(?) wird, hättest Du ein geplantes und sicher funktionierendes Nummerndurcheinander.
Da würde ich abschließend fragen: Verdienst Du mit Deiner Tätigkeit Geld, und hast Du eine ausreichende, solche Fälle abdeckende Haftpflicht oder ein eigenes Vermögen?
Mit freundlichem Glück Auf!

Eberhard