Neuigkeiten:

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

Mobiles Hauptmenü

Schaltfläche um den AutoWert der Haupttabelle neu aufreihen

Begonnen von Benny80, April 17, 2019, 14:53:38

⏪ vorheriges - nächstes ⏩

Benny80

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.)

MzKlMu

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.


Gruß Klaus

Benny80

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?

Benny80

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?

DF6GL

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?

MzKlMu

#5
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.
Gruß Klaus

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

@Philipp
Ja, Du hast recht. Aus mir sprach die Forumserfahrung  ;D. Ich habe meine absolute und pauschale Aussage oben geändert.
Gruß Klaus

Benny80

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.

Beaker s.a.

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
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)

Benny80

Doch hab ich, mach ich die ganze Zet schon und wurde mir auch so im Internet vorgeschlagen... Und ja es funktioniert so.

Benny80

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.

MzKlMu

Hallo,
das in #8 beschriebene Vorgehen funktioniert nur wenn vorher die Beziehungen gelöscht werden. Und Komprimieren/Reparieren muss dann trotzdem ausgeführt werden.
Gruß Klaus

Beaker s.a.

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
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)

Benny80

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?