Tabellenindex_runter

classic Classic list List threaded Threaded
3 messages Options
Leo-Hubert Kappes Leo-Hubert Kappes
Reply | Threaded
Open this post in threaded view
|

Tabellenindex_runter

Hallo Users,

ich habe eine Datenbank erstellt, die ich im Internet zur Verfügung
stellen möchte.

Vorher habe ich in den Tabellen natürlich meine eigenen Daten gelöscht.

Da alle Tabellen einen Index (ID) besitzen, möchte ich Diesen vorher
noch auf 0 (Null) zurücksetzen.

Das Makro: Tabellenindex_runter

erscheint mir für diese Aufgabe geeignet zu sein.

Ich habe das Makro in die Datenbank eingefügt und starte es über einen
Button auf einem Formular.

Dabei erscheint leider schon bei der ersten Zeile die Fehlermeldung:
"BASIC-Laufzeitfehler. Falscher Wert für Eigenschaft."

Ich habe das Makro, so wie es im Handbuch steht in die Datenbank kopiert
und gestartet.

Lediglich offensichtliche Zeilenumbrüche habe ich entfernt, bzw. dort wo
offensichtlich Kommentar vorhanden ist, Diesen auch auskommentiert.

Das Makro sieht jetzt so aus:


SUB Tabellenindex_runter(stTabelle AS STRING)
REM Mit dieser Prozedur wird das automatisch hochgeschriebene
Primärschlüsselfeld
REM mit der vorgegebenen Bezeichnung "ID" auf den niedrigst möglichen Wert
REM eingestellt.
DIM inAnzahl AS INTEGER
DIM inSequence_Value AS INTEGER
oDatenquelle = ThisComponent.Parent.CurrentController '
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+"""" ' Der höchste in
"ID" eingetragene Wert wird ermittelt
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql) ' Abfrage starten
und den Rückgabewert in einer Variablen oAbfrageergebnis speichern
WHILE oAbfrageergebnis.next
inAnzahl = oAbfrageergebnis.getInt(1) ' Erstes Datenfeld wird ausgelesen
WEND
' nächster Datensatz, in diesem Fall nicht mehr erforderlich, da nur ein
Datensatz existiert
IF inAnzahl = "" THEN ' 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 ' 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

Wo ist denn da mein Fehler?


MfG L-H






--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Gerhard Weydt Gerhard Weydt
Reply | Threaded
Open this post in threaded view
|

Re: Tabellenindex_runter

Hallo Leo-Hubert,

das Makro hat einen Parameter, das heißt, es muss von einem anderen
Makro gerufen werden, das als Parameter den Tabellennamen (in der
Datenbank) mitgibt. Das Makro ist also offensichtlich für einen
variablen Aufruf gedacht.
Du rufst es von einer Schaltfläche aus auf, ich nehme an, direkt, da
gibt es dann keinen Parameter.
Du kannst das aber simulieren, in dem du bei deiner Schaltfläche statt
Tabellenindex_runter das folgende Makro aufrufst, das dich jeweils nach
dem Tabellennamen fragt. So kannst du alle Tabellen behandeln. Das ist
wahrscheinlich der schnellste Weg, da du das ja zunächst nur einmal
brauchst.

sub xxx
dim tabname as string
tabname = InputBox("Tabellenname eingeben")
Tabellenindex_runter(tabname)
end sub

xxx ist dein frei wählbarer Name für das Makro

Ich habe das jetzt nicht getestet, melde dich noch einmal, wenn das
nicht klappt.

Gruß

Gerhard

Am 01.11.2019 um 17:19 schrieb Leo-Hubert Kappes:

> Hallo Users,
>
> ich habe eine Datenbank erstellt, die ich im Internet zur Verfügung
> stellen möchte.
>
> Vorher habe ich in den Tabellen natürlich meine eigenen Daten gelöscht.
>
> Da alle Tabellen einen Index (ID) besitzen, möchte ich Diesen vorher
> noch auf 0 (Null) zurücksetzen.
>
> Das Makro: Tabellenindex_runter
>
> erscheint mir für diese Aufgabe geeignet zu sein.
>
> Ich habe das Makro in die Datenbank eingefügt und starte es über einen
> Button auf einem Formular.
>
> Dabei erscheint leider schon bei der ersten Zeile die Fehlermeldung:
> "BASIC-Laufzeitfehler. Falscher Wert für Eigenschaft."
>
> Ich habe das Makro, so wie es im Handbuch steht in die Datenbank
> kopiert und gestartet.
>
> Lediglich offensichtliche Zeilenumbrüche habe ich entfernt, bzw. dort
> wo offensichtlich Kommentar vorhanden ist, Diesen auch auskommentiert.
>
> Das Makro sieht jetzt so aus:
>
>
> SUB Tabellenindex_runter(stTabelle AS STRING)
> REM Mit dieser Prozedur wird das automatisch hochgeschriebene
> Primärschlüsselfeld
> REM mit der vorgegebenen Bezeichnung "ID" auf den niedrigst möglichen
> Wert
> REM eingestellt.
> DIM inAnzahl AS INTEGER
> DIM inSequence_Value AS INTEGER
> oDatenquelle = ThisComponent.Parent.CurrentController '
> 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+"""" ' Der höchste in
> "ID" eingetragene Wert wird ermittelt
> oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql) ' Abfrage
> starten und den Rückgabewert in einer Variablen oAbfrageergebnis
> speichern
> WHILE oAbfrageergebnis.next
> inAnzahl = oAbfrageergebnis.getInt(1) ' Erstes Datenfeld wird ausgelesen
> WEND
> ' nächster Datensatz, in diesem Fall nicht mehr erforderlich, da nur
> ein Datensatz existiert
> IF inAnzahl = "" THEN ' 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 ' 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
>
> Wo ist denn da mein Fehler?
>
>
> MfG L-H
>
>
>
>
>
>


--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy
Leo-Hubert Kappes Leo-Hubert Kappes
Reply | Threaded
Open this post in threaded view
|

Re: Tabellenindex_runter

Hallo Gerhard,

noch mal: Vielen Dank für die Hilfe.

Ich hab das Makro mit dem Namen "Tabellenauswahl" versehen und dann mit
über ein kleines Formular, das nur eine Schaltfläche hat gestartet.

Am Ende des Makros "Tabellenindex_runter" habe ich dann als letzte Zeile
den Makronamen "Tabellenauswahl" (ohne Gänsefüßchen natürlich) eingesetzt.

So habe ich nun ein kleines Formular, das auf dem Desktop den Container
mit den Tabellen nicht verdeckt.

Nach jeder Rücksetzung einer Tabelle wird das Makro automatisch neu
gestartet und ich kann den Namen der nächsten, zur Rücksetzung
vorgesehenen Tabelle in das Feld einfügen. Wenn ich fertig bin, klicke
ich auf "Abbrechen" und gut...

Das ist für die Größe meiner Datenbank völlig ausreichend, da ich den
Vorgang ja auch nur relativ selten ausführen werde.

Noch mal: Vielen Dank für die Hilfe. Das klappt auf diese Art wie gewollt.


MfG L-H



Am 01.11.19 um 20:10 schrieb Gerhard Weydt:

> Hallo Leo-Hubert,
>
> das Makro hat einen Parameter, das heißt, es muss von einem anderen
> Makro gerufen werden, das als Parameter den Tabellennamen (in der
> Datenbank) mitgibt. Das Makro ist also offensichtlich für einen
> variablen Aufruf gedacht.
> Du rufst es von einer Schaltfläche aus auf, ich nehme an, direkt, da
> gibt es dann keinen Parameter.
> Du kannst das aber simulieren, in dem du bei deiner Schaltfläche statt
> Tabellenindex_runter das folgende Makro aufrufst, das dich jeweils
> nach dem Tabellennamen fragt. So kannst du alle Tabellen behandeln.
> Das ist wahrscheinlich der schnellste Weg, da du das ja zunächst nur
> einmal brauchst.
>
> sub xxx
> dim tabname as string
> tabname = InputBox("Tabellenname eingeben")
> Tabellenindex_runter(tabname)
> end sub
>
> xxx ist dein frei wählbarer Name für das Makro
>
> Ich habe das jetzt nicht getestet, melde dich noch einmal, wenn das
> nicht klappt.
>
> Gruß
>
> Gerhard
>
> Am 01.11.2019 um 17:19 schrieb Leo-Hubert Kappes:
>> Hallo Users,
>>
>> ich habe eine Datenbank erstellt, die ich im Internet zur Verfügung
>> stellen möchte.
>>
>> Vorher habe ich in den Tabellen natürlich meine eigenen Daten gelöscht.
>>
>> Da alle Tabellen einen Index (ID) besitzen, möchte ich Diesen vorher
>> noch auf 0 (Null) zurücksetzen.
>>
>> Das Makro: Tabellenindex_runter
>>
>> erscheint mir für diese Aufgabe geeignet zu sein.
>>
>> Ich habe das Makro in die Datenbank eingefügt und starte es über
>> einen Button auf einem Formular.
>>
>> Dabei erscheint leider schon bei der ersten Zeile die Fehlermeldung:
>> "BASIC-Laufzeitfehler. Falscher Wert für Eigenschaft."
>>
>> Ich habe das Makro, so wie es im Handbuch steht in die Datenbank
>> kopiert und gestartet.
>>
>> Lediglich offensichtliche Zeilenumbrüche habe ich entfernt, bzw. dort
>> wo offensichtlich Kommentar vorhanden ist, Diesen auch auskommentiert.
>>
>> Das Makro sieht jetzt so aus:
>>
>>
>> SUB Tabellenindex_runter(stTabelle AS STRING)
>> REM Mit dieser Prozedur wird das automatisch hochgeschriebene
>> Primärschlüsselfeld
>> REM mit der vorgegebenen Bezeichnung "ID" auf den niedrigst möglichen
>> Wert
>> REM eingestellt.
>> DIM inAnzahl AS INTEGER
>> DIM inSequence_Value AS INTEGER
>> oDatenquelle = ThisComponent.Parent.CurrentController '
>> 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+"""" ' Der höchste in
>> "ID" eingetragene Wert wird ermittelt
>> oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql) ' Abfrage
>> starten und den Rückgabewert in einer Variablen oAbfrageergebnis
>> speichern
>> WHILE oAbfrageergebnis.next
>> inAnzahl = oAbfrageergebnis.getInt(1) ' Erstes Datenfeld wird ausgelesen
>> WEND
>> ' nächster Datensatz, in diesem Fall nicht mehr erforderlich, da nur
>> ein Datensatz existiert
>> IF inAnzahl = "" THEN ' 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 ' 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
>>
>> Wo ist denn da mein Fehler?
>>
>>
>> MfG L-H
>>
>>
>>
>>
>>
>>
>
>

--
Liste abmelden mit E-Mail an: [hidden email]
Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/discuss/
Datenschutzerklärung: https://www.documentfoundation.org/privacy