Fortlaufende Kundennummer vergeben (SQL)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Fortlaufende Kundennummer vergeben (SQL)

Re: Fortlaufende Kundennummer vergeben (SQL)

von gunman » Do, 08.01.2009 12:56

Hallo Andy,

bin wahrlich kein Fachmann - aber nur so ein Gedanke:

In meiner HSQLDB wird der Wert für das <AutoFeld> immer erst beim Speichern des Datensatzes generiert. Schließlich wird der Datensatz auch nicht beim Bereitstellen oder Ausfüllen eines Feldes, sondern erst beim Speichern angelegt.

Grüße, Gunnar

Re: Fortlaufende Kundennummer vergeben (SQL) (gelöst)

von andy232 » Do, 08.01.2009 12:16

Hallo,

ich habs nun mittels eines Makros gelöst. Dabei wird im Makro eine SELECT-Anweisung ausgeführt, die die höchste Kundennummer +1 ermittelt. Dieser Wert wird dann das passende Feld eingetragen.

Das ganze hab ich mit einem Knopf "NEU" verknüpft, der auch gleich einen neuen Datensatz anlegt.
Hier mein Code.

Code: Alles auswählen

sub neu
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:NewRecord", "", 0, Array())

' Kundennummer automatisch eintragen

' Hächste Kundennummer ermitteln
oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
' Datenquelle auswählen
oDatenquelle = oDatenbankKontext.getByName( "kundendb" )
' Verbindung zur DB herstellen
oVerbindung = oDatenquelle.getConnection( "" , "" )
' Statement erzeugen
oStatement = oVerbindung.createStatement
' Abfrage absetzen
sSQL = "SELECT max(kundennummer) + 1 as kundennummer from kunden"
'msgbox(sSQL)
oResultSet = oStatement.executeQuery( sSQL )
oResultSet.next()
ergebnis = oResultSet.getString( 1 )

' Wert eintragen
odoc = ThisComponent
oform = odoc.drawpage.forms.getbyindex(0)
oTextFeld = oform.getbyname("fmtkundennnummer")
oTextFeld.text = ergebnis
oTextFeld.commit()

end sub

Fortlaufende Kundennummer vergeben (SQL)

von andy232 » Mi, 07.01.2009 08:32

Hallo,

ich habe eine Adressdatenbank mit Kunden. Beim Neuanlegen eines Datensatzes soll automatisch eine fortlaufende Kundennummer vergeben. Leider hab ich es bisher nicht hinbekommen. Hier meine Lösungsansätze:
Die Base-Datenbank arbeitetet mit MySQL. Baseversion ist 2.4

1.) Suchen hier im Forum: Ich hab gelesen, daß man eine Option "Autowert" bei Tabelle bearbeiten -> Feldeigenschaften setzen kann. Diese hab ich leider bei meinem Base 2.4 nicht gefunden. Vielleicht liegts auch daran dass ich MySQL als DB-Engine benutze.

2.) Verwenden von auto_increment in MySqo. Hierbei übergibt MySql ja automatisch eine neue Kundennummer. Wenn ich dies mache, erscheint aber in meinem Formular beim Feld Kundennummer immer "<Autowert>" anstatt die neue Kundennummer.

3.) Verwenden einer SQL Abfrage, die automatisch die nächste Kundennummer +1 ermittelt:

Code: Alles auswählen

SELECT MAX (kundennummer) as kundennummer from kunden
Dies klappt schon ganz gut. Diese Abfrage habe ich dann in ein Kombinationsfeld bei EIGENSCHAFTEN KONTROLLFELD -> DATEN -> LISTENINHALT hinterlegt. Somit hab ich ein Dropdownfeld mit einem Element, was immer die passende Kundennummer enthält.
Problem: Es klappt nur einmal. Wenn ich dann einen zweiten Datensatz anlegen, hab ich dieselbe Kundennummer und nicht die nächsthöhere. Anscheinend wird die SQL-Abfrage nicht erneut ausgeführt. Erst beim Formular schliessen und öffnen klappts dann wieder für einmal.
Hier hab ich die Frage: Wie bring ich Base dazu, die SQL-Abfrage erneut auszuführen ?
Versuche mit "SELECT NO-CACHE..." brachten nichts.
Meine Hoffnung ist, daß es vielleicht mit einem Macrobefehl geht ?

Danke für einen Tip.
Andy.

Nach oben