Hi Leute,
kann ich mit einer Schaltfläche die ID einer Tabelle neu anreihen?
Mir ist klar, dass man sowas nicht sollte, dennoch möchte ich das bei meiner Haupttabelle machen können.
Meine Tabelle heißt "tblAnwendung" und die Spalte die ich zurücksetzen möchte ist "ID".
Die ID soll wieder mit 1 anfangen und wie gewohnt weiterlaufen. (2, 3, 4 etc.)
Hallo,
Datenbank "Komprimieren/Reparieren" (Access Dienstprogramm) dann fängt der Autowert wieder bei 1 an. Das geht aber nur, wenn die Tabelle leer ist.
Eine Schaltfläche braucht es dazu nicht.
Also ist die Antwort:
Ein reiner User kann über die Ebene "Formular" niemals den AutoWert einer Tabelle über eine Schaltfläche auf neue Reihenfolge bringen.
Also kann man über eine Schaltfläche nicht die Spalte löschen, Spalte neu anlegen und als Primärschlüssel setzen? Hab ich richtig verstanden oder?
Also rein Theoretisch ist es nicht möglich (als reiner User), das selbe zu machen was ich immer mache?
Also ich gehe hin:
Setze eine neue Spalte, nenne sie z.B. IDE.
Gebe dieser Spalte "IDE" die Eigenschaft AutoWert.
Setze sie dann als Primärschlüssel.
Lösche die Spalte "ID" (welche ja der vorherige Primärschlüssel war)
und benenne die Spalte "IDE" um in "ID".
Also gibt es hier für keinen VBA Code?
Hallo,
für den "reinen User" ist das verstanden.
Letztendlich ist mittels den Datenzugriffmethoden und/oder SQL (DDL) schon die Struktur einer Tabelle änderbar. Inwieweit das aber zielführend ist und nicht zu einer zerstörten Datenbank(struktur) mit all den Konsequenzen (Datenchaos, Abstürze führt, ist jetzt nicht das Thema.
PS: Welchen Sinn hat es für einen User, die Tabellen zu ändern?
Oder gestattest Du (als Autohersteller) auch einem (normalen) Autofahrer, das Steuergerät um zu programmieren?
Hallo,
sobald Datensätze gelöscht werden, ist Komprimieren/Reparieren erforderlich.
Nur dann Datensätze werden die DS wirklich aus der Datenbank gelöscht. Das ist normal und kann nicht verhindert werden. Ist nicht nur bei Access so.
Und Komprimieren/Reparieren geht nur wenn die DB exklusiv geöffnet ist. Was für den normalen User nicht möglich sein sollte.
Und wenn regelmäßig Datensätze gelöscht werden, so ist das oftmals ein Hinweis auf ein überlegenswertes Datenmodell und/oder ein möglicherweise unnötiges Vorhaben. Das gilt sinngemäß auch für Änderungen an der Tabellenstruktur.
Zitat von: MzKlMu am April 18, 2019, 09:06:19
Und wer regelmäßig Datensätze löschen muss, hat sowieso was falsch gemacht.
Dieser pauschalen Aussage möchte ich widersprechen.
Ich habe zahlreiche Szenarien, in denen alte, temporäre, oder sonstwie obsolete Daten regelmäßig gelöscht werden. - Das an sich ist keineswegs ein Hinweis darauf, dass man dort etwas falsch gemacht hat. - Höchst verdächtig ist jedoch die Anforderung, einen Auto-Wert zurückzusetzen.
@Philipp
Ja, Du hast recht. Aus mir sprach die Forumserfahrung ;D. Ich habe meine absolute und pauschale Aussage oben geändert.
Der Grund meiner Frage ist. Solange die Datenbank noch nicht Live ist, möchte ich das ändern ... wie schon beschrieben...
... Setze eine neue Spalte, nenne sie z.B. IDE.
Gebe dieser Spalte "IDE" die Eigenschaft AutoWert.
Setze sie dann als Primärschlüssel.
Lösche die Spalte "ID" (welche ja der vorherige Primärschlüssel war)
und benenne die Spalte "IDE" um in "ID".
Mit einer Schaltfläche durchführen, die ich später, sobald wirklich die ID dieser Tabelle auf einer andere Tabelle als Sekundärschlüssel zugreift, löschen werde, sowie auch der Code der hinter der Schaltfläche steht. Ich möchte halt solange eine saubere Reihenfolge haben. Ist ein reiner Ordnungstick. Mir ist klar, dass ich dies später nicht mehr machen sollte.
Zur not verwende ich die Manuelle Methode... Noch wird diese ID von keiner Abfrage wirklich benötigt.
War halt nur um mir diese manuellen Schritte zu sparren.
Hallo Benny,
1. dein manuelles Vorgehen funzt nicht in der gezeigten Reihenfolge, -
hast du wahrscheinlich noch gar nicht ausprobiert.
2. verwendet man einen Autowert nicht für eine laufende Nummer,
ein Autowert als PK wird niemals geändert, den bekommt doch auch
kein User zu Gesicht. Wenn man eine flfd. Nummer benötigt nimmt man
dazu ein eigenes Feld. Da kann man dann neu nummerieren/Lücken
auffüllen wie's einem beliebt. Die Beziehungen im Hintergrund (PF/FK)
bleiben dabei unberührt, so dass auch keine Inkonsistenzen auftauchen
können.
gruss ekkehard
Doch hab ich, mach ich die ganze Zet schon und wurde mir auch so im Internet vorgeschlagen... Und ja es funktioniert so.
Ok, ich hoffe nicht das du glaubst, dass ich diesen Vorgang mache, während ich das Formular oder die Abfrage geöffnet habe, weil dass Funktioniert nicht, aber das weiß jeder nach 1 Tag Access. Ich mache das ganze immer nur, wenn nur die Tabelle geöffnet ist.
Weil sobald man in die Entwurfansicht geht, gibt er einen ja die Fehlermeldung und blockiert darauf das Formular (zum Beispiel...). Aber deshalb möchte ich ja wissen, ob es einen VBA Code gibt, von dem aus ich das ganze über das Formular machen kann.
Hallo,
das in #8 beschriebene Vorgehen funktioniert nur wenn vorher die Beziehungen gelöscht werden. Und Komprimieren/Reparieren muss dann trotzdem ausgeführt werden.
Hallo Benny,
O.K., du hast recht. Hat mich meine Erinnerung getrügt, ich dachte es
kommt schon direkt beim Erstellen eines zweiten Autowertfeldes eine
Fehlermeldung. Die kommt aber erst beim Speichern, wenn das alte Feld
noch existiert.
An die Beziehungen hatte ich überhaupt nicht gedacht :(
gruss ekkehard
Sorry wenn ich nun etwas auf dem Schlauch stehe, aber was meinste du immer mit Komprimieren/Reparieren?
Ist das eine Funktion? oder ein VBA Code?
Hallo,
das ist ein Access Dienstprogramm, zu finden unter den Datenbanktools.
Das fällt Dir aber reichlich spät ein danach zu fragen. Das hatte ich doch in #1 schon geschrieben.
Dieses Dienstprogramm muss gerade in der Entwicklungsphase regelmäßig aufgerufen werden. Weil nur dann alle Objekte die gelöscht wurden ganz verschwinden. Wenn Du also ein Formular erstellt und dann wieder löschst, verschwindet das erst vollständig wenn dieses Dienstprogramm ausgeführt wurde.
Wenn also in der Live DB Datensätze gelöscht werden sollte dieses Dienstprogramm auch reglemäßig ausgeführt werden.
Und auch gelöschte Datensätze werden erst nach Ausführung dieses Diensprogramms gelöscht. Vorher sind diese intern nur zum Löschen markiert.
Dieses Dienstprogramm schreibt auch alle Indizetabellen neu und setzt den Autowert wieder auf 1 wenn die Tabelle leer ist.
Das ist Datenbankusus und nicht nur bei Access so.
Cool die Datenbank ist gerade um 4 MB geschrumpft.