🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Tabellenindex heruntersetzen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
miniaturbuch1
Beiträge: 11
Registriert: So 2. Nov 2014, 14:09

Tabellenindex heruntersetzen

Beitrag von miniaturbuch1 » Do 23. Jul 2015, 23:42

Hallo,
ich möchte den Tabellenindex, der inzwischen ins Uferlose geht heruntersetzen.
Ich benutze dazu das im Handbuch beschriebene Makro, habe ein Formular zur Tabelle 'Buchtabelle' gemacht, das beim Öffnen das Makro ausführt.
Leider kommt dabei sofort folgender Fehler für die erste Zeile des Makros:
BASIC-Laufzeitfehler.
Falscher Wert für Eigenschaft.
Was mache ich falsch?
Zugegebenermassen habe ich weder von Makros noch mit Basic viel Ahnung.

Freundliche Gruße,
Luggi

MAKRO:

SUB Tabellenindex_runter(stTabelle AS STRING)
REM Mit dieser Prozedur wird das automatisch hochgeschriebene Primärschlüsselfeld mit der vorgegebenen Bezeichnung "ID" auf den niedrigst möglichen Wert eingestellt.
DIM inAnzahl AS INTEGER
DIM inSequence_Value AS INTEGER
oDatenquelle = ThisComponent.Parent.CurrentController REM ' Zugriffsmöglichkeit aus dem Formular heraus
IF NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
oVerbindung = oDatenquelle.ActiveConnection()
oSQL_Anweisung = oVerbindung.createStatement()
stSql = "SELECT MAX(""ID"") FROM """+stTabelle+"""" REM ' Der höchste in "ID" eingetragene Wert wird ermittelt
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql) REM ' Abfrage starten und den Rückgabewert in einer Variablen oAbfrageergebnis speichern
WHILE oAbfrageergebnis.next
inAnzahl = oAbfrageergebnis.getInt(1) REM ' Erstes Datenfeld wird ausgelesen
WEND REM ' nächster Datensatz, in diesem Fall nicht mehr erforderlich, da nur ein Datensatz existiert
IF inAnzahl = "" THEN REM ' Falls der höchste Wert gar kein Wert ist, also die Tabelle leer ist wird der höchste Wert als -1 angenommen
inAnzahl = -1
END IF
inSequence_Value = inAnzahl+1 REM ' Der höchste Wert wird um 1 erhöht
REM Ein neuer Befehl an die Datenbank wird vorbereitet. Die ID wird als neu startend ab inAnzahl+1 deklariert.
REM Diese Anweisung hat keinen Rückgabewert, da ja kein Datensatz ausgelesen werden muss
oSQL_Anweisung1 = oVerbindung.createStatement()
oSQL_Anweisung1.executeQuery("ALTER TABLE """ + stTabelle + """ ALTER COLUMN
""ID"" RESTART WITH " + inSequence_Value + "")
END SUB

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Tabellenindex heruntersetzen

Beitrag von RobertG » Fr 24. Jul 2015, 08:26

Hallo Luggi,

SUB Tabellenindex_runter(stTabelle AS STRING)
→ Du musst das Makro mit einer anderen Prozedur starten:

Code: Alles auswählen

SUB Start
Tabellenindex_runter("Name meiner Tabelle")
END SUB
Um das Ganze aber nur einmal auszuführen brauchst Du natürlich kein Makro. Das Makro ist dafür vorgesehen, so etwas automatisch immer wieder einmal durchzuführen. Was Dir ausreicht steht im Handbuch im Kapitel "Tabellen":

Code: Alles auswählen

ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" RESTART WITH <neuer_Feldwert>
Du schaust in der Tabelle nach, welches nach dem Löschen vieler Datensätze der zur Zeit höchste Wert für die automatisch erstellte Primärschlüsselnummer ist und trägst dann als <neuer_Feldwert> eine um 1 höhere Zahl ein. Die Eingabe geht über Extras → SQL.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

miniaturbuch1
Beiträge: 11
Registriert: So 2. Nov 2014, 14:09

Re: Tabellenindex heruntersetzen

Beitrag von miniaturbuch1 » Do 30. Jul 2015, 20:52

Vielen Dank!
Die direkte Eingabe von SQL macht es viel einfacher und es hat auch funktioniert.
Das Feld ID hat jetzt direkt hintereinander aufsteigende Werte, aber leider beginnt der Index nicht bei 1.
Wie macht man es, wenn das Feld ID mit 1 beginnen soll?
Freundlicher Gruß,
Luggi

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Tabellenindex heruntersetzen

Beitrag von RobertG » Fr 31. Jul 2015, 07:24

Hallo Luggi,

wenn Du die Tabelle leer hast, dann kannst Du doch den Start beliebig festlegen:

Code: Alles auswählen

ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" RESTART WITH 1
legt den Start auf den Wert '1' fest.

Das klappt natürlich nicht, wenn schon Werte in der Tabelle stehen, die den Primärschlüssel gleich oder größer 1 haben.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten