Neuigkeiten:

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

Mobiles Hauptmenü

Wert in Primärschlüssel beim öffnen eines neuen Datensatz um "Wert 1 " erhöhen

Begonnen von Icemann1970, April 17, 2017, 22:32:34

⏪ vorheriges - nächstes ⏩

Icemann1970

Hallo zusammen.
Ich hatte bis jetzt manuell eine "Geräte Nummer" angelegt. Nach reichlicher Überlegung ist das aber nicht so gut wenn mehrere Personen neue Geräte anlegen. Ich habe einen Code eingefügt der verhindert, das nicht die "Geräte Nummer" zweimal angelegt werden kann (Funktioniert auch) ABER man muss beim anlegen immer wissen welche " Geräte Nummer" zuletzt angelegt wurde. Dies möchte ich nun ändern. Wenn ich die DB bereinige kann ich dann die Irgendwie einen Autowert für das Feld " Geräte Nummer" anlegen. Habe Schwierigkeiten damit weil ich in der Tabelle das Feld "ID" einen Autowert angelegt habe und der Pimärschlüssel auf das Feld "Geräte Nummer" läuft da diese "Nummer" für mich am sinnvollsten war (ist). Hat da einer von Euch eine Lösung für mich ? Von mir aus eine Funktion das die Geräte Nummer sich beim anlegen eines neuen Datensatz um den Wert 1 erhöht.
Mfg. Udo

MzKlMu

Hallo,
warum nimmst Du nicht gleich den Autowert als Primärschlüssel und Gerätenummer ?
Den Primärschlüssel legt man ohnehin auf den Autowert wenn er schon vorhanden ist.
Auf die Gerätenummer legt man dann einen eindeutigen Index. Der verhindert auch Doppelungen. Wenn Du den PS auf der Gerätenummer lassen willst, kannst Du den Autowert auch löschen, der ist überflüssig.
Die Gerätenummer kannst Du einfach im Standardwert hochzählen.
Nz(DomMax("Gerätenummer";"Tabellenname");0) +1
Gerade wenn mehrere Personen mit der DB arbeiten wäre der Autowert aber als PS besser geeignet.

Ist die DB aufgeteilt in Backend (nur die Tabellen) und Frontend (der Rest) ?
Wobei das Frontend jeder User auf seinem PC benötigt. Das ist in einer Mehrbenutzerumgebung erforderlich.
Gruß Klaus

Icemann1970

Hallo Klaus.  DU bist der beste .... und natürlich die anderen hier im Forum auch !!!!!!
Dein Code hat mir geholfen. Ich habe das Feld "ID" gelöscht und ein neues Feld "ID" erstellt, somit habe ich den AutoWert 1 am Anfang. Im Feld "Gerätenummer" kann ich kein AutoWert einstellen weil dann die Meldung von Access kommt das ich zuerst ALLE Beziehungen löschen muss und das sind extrem viel. Die DB werde ich morgen in FE und BE (Kopie) aufteilen und in den nächsten Tagen kommt sie auf dem Server und wird von ca 20 Mitarbeiter angewendet. Haltet mir mal schön die Daumen :-)
Mfg. Udo

MzKlMu

Hallo,
Zitatkann ich kein AutoWert einstellen weil dann die Meldung von Access kommt das ich zuerst ALLE Beziehungen löschen muss und das sind extrem viel.
Bei extrem viele könnte man schon wieder am Datenmodell zweifeln.
ZitatDie DB werde ich morgen in FE und BE (Kopie)....
Was heißt hier Kopie ?
Und wie gesagt, das FE darf nicht auf den Server, nur das BE.

Gruß Klaus

Icemann1970

Hey Klaus.
Habe einige Tabellen mit der (((ID))) ---> "Gerätenummer", die untereinander verknüpft sind. Elegant wird das nicht sein aber ich bin froh das ich eine (für mich große) DB, auch mit eurer Hilfe erstellt habe. Es macht spaß und ich werde auch nicht mit Access aufhören (auch diese zu verbessern). Mit und mit .... Da ich eigentlich nichts mit dem PC mache und mein Beruf mehr ins Handwerkliche geht muss ich mich selber mal loben :-)

Zum Thema BD (Kopie)
Damit wollte ich nur sagen das ich nicht die Originale DB sofort aufteilen werde sondern eine Kopie damit ich an der Originalen DB noch die Optionen zur Änderung habe.

Ich hatte vor die DB auf dem RDS Server aufzuteilen und die FE (als Sicherung) im gleichen Ordner zu "lagern" und von dieser FE eine Verknüpfung zu erstellen, die jeder Mitarbeiter erhält. Müsste doch so funktionieren ..... Oder ??????
Mfg. Udo

MzKlMu

Hallo,
Zitatund von dieser FE eine Verknüpfung zu erstellen, die jeder Mitarbeiter erhält. Müsste doch so funktionieren ..... Oder ??????
Nein, das funktioniert nicht. Jeder Mitarbeiter braucht sein eigenes Frontend auf seinem PC.
Hast Du 20 Mitarbeiter werden 20 eigenständige Frondends benötigt. Jedes Frontend muss einzeln zum Backend verknüpft werden. Auch wenn Du eine neue Version hast, muss das Frontend 20x erstellt werden bzw. aktualisiert werden.
Das lässt sich mit erheblichem Programmieraufwand automatisieren. Anders läuft Access in einer Mehrbenutzerumgebung nicht zuverlässig.
Gruß Klaus

Icemann1970

Also muss ich die FE der aufgeteilten DB quasi x mal Kopieren und verteilen um die Funktion zu erhalten? Die Anwendung findet kompl auf dem RDS Server statt. Jeder Mitarbeiter arbeitet auf dem Remote Desktop, so können wir uns die Lizenzen der einzelnen Rechner sparen..... war meine Überlegung.
Mfg. Udo

Beaker s.a.

Hallo Udo,
Zitatso können wir uns die Lizenzen der einzelnen Rechner sparen
Es reicht auch eine Runtime-Version.

@Klaus
ZitatDas lässt sich mit erheblichem Programmieraufwand automatisieren
Na, soo erheblich ist der Aufwand auch nicht, vor allem weil man zu dem Thema
doch auch einiges im Netz findet.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

Hallo,
ich finde den Aufwand schon erheblich. Das ist ja unabhängig von dem was man im Netz findet, eingebaut und verstanden muss es trotzdem werden.
Und wenn man dann Runtimes einsetzen will, kommt noch einiges hinzu. Der Bedienungsablauf der DB muss vollständig Menü gesteuert sein und alle Prozeduren und Funktionen benötigen Routinen zum Abfangen von Laufzeitfehlern.
Gruß Klaus

Josef P.

[OT / Fehlerbehandlung]

Hallo!

Zitat.. und alle Prozeduren und Funktionen benötigen Routinen zum Abfangen von Laufzeitfehlern

Wegen dem unterstrichenen "alle":
Kann man machen, muss man aber nicht.
Im Prinzip reicht es für die Runtime aus, nur in der obersten Aufrufebene eine Fehlerbehandlung einzufügen, damit die Anwendung bei einem Laufzeitfehler nicht beendet wird.
Wenn man in jede Prozedur eine Fehlerbehandlung einfügt, dann bitte nicht den leider oft gesehenen Murks machen und eine Fehlerbehandlung in einer Subroutine mit einer Msgbox umsetzen und danach so tun, als wäre der Fehler behoben. Vorteil der Fehlerbehandlung in jeder Prozedur ist, dass man den Pfad der Fehlerentstehung zeigen kann.

Für sauberen Code gehört meiner Meinung nach in jede Prozedur, wo etwas (z. B. ein Recordset) ordentlich geschlossen werden muss, eine Fehlerbehandlung - diese sollte aber nur das Recordset schließen und dann den Fehler nach oben weitergeben oder falls die Prozedur die oberste Aufrufebene ist, den Fehler dem User mitteilen.

mfg
Josef