Hallo,
ich habe eine Datenbank in Base erstellt.
In dieser Datenbank soll jede Datensatznummer automatisch generiert werden. (z.B. 0207/001......n)
02 ist für akt. Monat, 07 ist für akt. Jahr und 001 .....n ist fortlaufende Nummer für Monat 02. D.h. für März , April, Mai .....Dez. fangen wir wieder mit 001.
Mit Hilfe des Forums und des Buches (Datenbanken mit OpenOffice.org 2 Base habe ich folgende Code geschrieben:
Sub IDno
Dim oDoc as Object
Dim oForm As Object
Dim oFeld2 As Object
Gun= CDateToIso (Now ())
DIM sNo as Integer
DIM oStr as String
oDoc=thisComponent ' Referenz auf Dokument
oForm=oDoc.DrawPage.Forms.GetByName("Form1") ' erstes Formular
oFeld1=oForm.getByName("sipariş").CurrentValue
oFeld2 = oForm.getByName("NO")
sAy=mid(Gun,5,2)
sSene=mid(Gun,3,2)
sNo = oFeld1
oStr = sAy + sSene + "/" + "00" + sNo
oFeld2.String = oStr
End Sub
Mein Makro funktioniert bis auf 0207/009, danach statt 0207/010 wird 0207/0010. Ab März 07 wird nicht neu mit 001 sondern mit 0207/last+1
hochgezählt.
Kann jemand mir helfen
Danke
Melek
Datensatznummer automatisch generieren
Moderator: Moderatoren
Hey Melek,

willst du die Zahlen immer dreistellig mit führenden Nullen, so verwende den Befehl Format. Die Zeile heisst dann:
Die Hochzählung im nächsten Monat wieder bei 1 zu beginnen musst du mit einer Schleife abfangen: Dazu brauchst du allerdings die letzte eingegebene Datensatznummer - aber die brauchst du ja sowieso, um überhaupt hochzählen zu können. Insofern funktioniert dein Code sowieso nicht, denn du nutzt den Wert des Feldes "siparis" (was immer das auch sien mag) um die Nummer zu generieren. Deinen Ausführungen nach muss es sich wohl um eine laufende Datensatznummer handeln?
Also, das Prinzip wäre:
Auslesen der letzten Datensatznummer (wie du die erreichst, ist nicht ganz einfach!), zerlegen der Nummer auf seine Bestandteile: Ist der Monat identisch mit dem aktuellen Monat, dann einfach eine Nummer hochzählen.
Ist der gespeichertere Monat eins niedriger als der aktuelle, dann neue Nummer generieren aus aktuellen Datum und einer "001" hinten dran.
Sind die Monate weiter auseinander oder sehr unterschiedlich - ja, dann musst du dir eine Fehlerbehandlunc oder eine Strategie überlegen.
Also, das ist alles etwas komplizierter als zunächst so dargestellt!
Gruss
Thomas
Ja, das ist genau das, was dein Makro machtMein Makro funktioniert bis auf 0207/009, danach statt 0207/010 wird 0207/0010. Ab März 07 wird nicht neu mit 001 sondern mit 0207/last+1
hochgezählt.

willst du die Zahlen immer dreistellig mit führenden Nullen, so verwende den Befehl Format. Die Zeile heisst dann:
Code: Alles auswählen
oStr = sAy + sSene + "/" + format(sNo, "000")
Also, das Prinzip wäre:
Auslesen der letzten Datensatznummer (wie du die erreichst, ist nicht ganz einfach!), zerlegen der Nummer auf seine Bestandteile: Ist der Monat identisch mit dem aktuellen Monat, dann einfach eine Nummer hochzählen.
Ist der gespeichertere Monat eins niedriger als der aktuelle, dann neue Nummer generieren aus aktuellen Datum und einer "001" hinten dran.
Sind die Monate weiter auseinander oder sehr unterschiedlich - ja, dann musst du dir eine Fehlerbehandlunc oder eine Strategie überlegen.
Also, das ist alles etwas komplizierter als zunächst so dargestellt!
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hallo Thomas,
vielen dank für deine schnelle Antwort. Wie du beschrieben hast habe ich eingebaut. Funktioniert, Super!!
Gruss
Melek
vielen dank für deine schnelle Antwort. Wie du beschrieben hast habe ich eingebaut. Funktioniert, Super!!
willst du die Zahlen immer dreistellig mit führenden Nullen, so verwende den Befehl Format. Die Zeile heisst dann:
Code:
oStr = sAy + sSene + "/" + format(sNo, "000")
"siparis" ist mein Schlüssel-ID und gibt mir nach der Aktualisierung die letzte ID-Nr. Die Schleife werde ich erst morgen im Büro probieren. Wenn ich kein Erfolg habe nerve ich euch weiter.Insofern funktioniert dein Code sowieso nicht, denn du nutzt den Wert des Feldes "siparis" (was immer das auch sien mag) um die Nummer zu generieren.
Gruss
Melek