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
🙏 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!🍀
>> 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
-
- Beiträge: 11
- Registriert: So 2. Nov 2014, 14:09
Re: Tabellenindex heruntersetzen
Hallo Luggi,
SUB Tabellenindex_runter(stTabelle AS STRING)
→ Du musst das Makro mit einer anderen Prozedur starten:
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":
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
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
Code: Alles auswählen
ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" RESTART WITH <neuer_Feldwert>
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- Beiträge: 11
- Registriert: So 2. Nov 2014, 14:09
Re: Tabellenindex heruntersetzen
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
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
Re: Tabellenindex heruntersetzen
Hallo Luggi,
wenn Du die Tabelle leer hast, dann kannst Du doch den Start beliebig festlegen:
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
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
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
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.