Hallo Marino,

Ich habe nicht den ganzen Thread gelesen, deswegen hier nur ein paar 
Anmerkungen.
> 
> Beispiel:
> 
> 1. Feld ID        (Integer / Autowert=Ja / keine Formatierung)
> 2. Feld Text     (Text / Länge=10 / kein Defaultwert))
> 
> Eingabe: Spalte 1 = <AutoWert> / Spalte 2 = Altr (Schreibfehler)
> 
> Korrektur: Altr -> Alter / Rückmeldung Fehler

Kommt an dieser Stelle natürlich darauf an, ob Du die Zelle bereits verlassen 
hast. Beim Verlassen der Zelle (ist ja nur eine) springst Du zum nächsten 
Datensatz.

> Nächste Zeile jetzt schon ID = 3 ??? Teilweise ist nicht zu erruieren,
> in welcher Zeilennummer man sich gerade befindet.

Vermutlich hast Du dann gerade die Zeile 2 als Korrekturzeile beschreiben 
wollen. Ist das Ganze direkt in der Tabelle der Fall? 
> 
> Wenn die erste Zeile vollständig gelöscht wird und das Editieren
> geschlossen wird. Also es existiert keine Zeile in dieser Tabelle.
> Hernach wird eine neue 1. Eingabe getätigt, ist die Nummer jetzt schon
> auf 3.

Das Zurückstellen auf den kleinstmöglichen Wert geht mit 
ALTER TABLE "Tabellenname" ALTER COLUMN "ID" RESTART WITH "Wert"

Ich habe das Ganze einmal in ein Makro gefasst, da ich beim ersten 
Ausprobieren von Datenbanken ja recht schnell die IDs fülle und dann mit der 
endgültigen Datenbank nicht mehr so schön bei 0 anfangen kann:


Sub Tabellenindex_runter(tablename 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.
        REM Zugriff per Frame notwendig, wenn das Makro ohne geöffnetes 
Formular 
laufen soll
        DIM inSequence_Value AS INTEGER
        oDatenquelle = ThisComponent.Parent.CurrentController
        If NOT (oDatenquelle.isConnected()) Then
                oDatenquelle.connect()
        End If
        oVerbindung = oDatenquelle.ActiveConnection()
        oSQL_Anweisung = oVerbindung.createStatement()
        stSql = "SELECT MAX(""ID"") FROM """+tablename+""""
        oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)' Ergebnis 
auswerten
        IF NOT ISNULL(oAbfrageergebnis) THEN
                WHILE oAbfrageergebnis.next
                inAnzahl = oAbfrageergebnis.getInt(1)' Erstes Datenfeld
                WEND ' naechster Datensatz
                IF inAnzahl = "" THEN
                        inAnzahl = -1
                END IF
                inSequence_Value = inAnzahl+1
                oSQL_Anweisung2 = oVerbindung.createStatement()
                oSQL_Anweisung2.executeQuery("ALTER TABLE """+tablename+""" 
ALTER 
COLUMN ""ID"" RESTART WITH "+inSequence_Value+""
    END IF
End Sub

Bei dem Makro fehlt fast die gesamte Variablendeklaration (alle "o...." sind 
OBJECT, alle "in...." sind INTEGER, alle "st...." sind STRING), da ich die 
Variablen außerhalb des Makros deklariert habe.

Mit

Sub Tabellenstart
        REM     Hier werden alle Tabellen eingetragen, deren ID nach 
Bereinigung auf 
den tiefstmöglichen Wert gesetzt werden soll.
        Tabellenindex_runter("Mitglied")
        Tabellenindex_runter("Ort")
        Tabellenindex_runter("Postleitzahl")
        Tabellenindex_runter("Strasse")
        Tabellenindex_runter("Konto")
End Sub

Werden bei mir alle oben genannten Tabellen auf den niedrigstmöglichen Wert 
zurückgestellt. Das Makro muss von einem Formular aus aufgerufen werden ...

Grundlegend kannst Du das Problem mit eventuell nicht genutzten IDs aber nur 
in den Griff bekommen, wenn Du die IDs nicht mit einem Autowert hochschreiben 
lässt sondern das Ganze so organisierst: Suche von 0 ab den ersten freien 
Wert, schreibe diesen in das ID-Feld. Geht natürlich am besten im OpenOffice-
Base-Fall per Makro. So etwas habe ich einmal für eine Bibliotheksdatenbank 
gemacht, da die unbedingt mit den vergebenen Nummern auf den Bestand der 
Bibliothek zurückschließen wollen. Ist aber eigentlich nicht sinnvoll. Selbst 
das Ausbuchen eines Buches (Verlust oder Verkauf auf dem Flohmarkt) 
hinterlässt ja gegebenenfalls Datensätze, die sich auf dieses Buch beziehen - 
und die müssen dann auch gelöscht werden. Anschließend hat nicht nur das Buch 
nie in der Bücherei existiert, sondern es ist eben auch nie ausgeliehen worden 
...

Gruß

Robert

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Antwort per Email an