Tabellenindex heruntersetzen
Verfasst: 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
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