![]() |
Fortlaufende Kundennummer
Hallo zusammen,
nun muss ich auch einen Beitrag in diesem Forum hinterlassen. Hab schon vieles durch DP gelernt, und neben dem Easy Helper meine 2te Anlaufstelle für Probleme mit Delphi :) Meine frage ist eigentlich schon kurz aber Aussagekräftig im Topic formuliert. Ich habe eine "Dynamische" Kundennummer dessen Prefix frei definierbar ist, ist in einer MySQL abgespeichert. Nun habe ich die letzte Kundennummer im String 'currentcustomerno', wie kann ich nun den Prefix zbs. "weblab{number}", um eine Zahl erweitern? Was ich noch dazusagen muss, die Anzahl der Int's kann auch defieniert werden, ergo hab ich am ende {prefix}{number}. in PHP Hab ich das so realisiert
Code:
In Delphi jedoch habe mich mit der Manipulation von Strings noch nicht so auseinander gesetzt.
function generateKundennr()
{ $query = $this->MYSQL->query("SELECT `kundennr` FROM `".$GLOBALS["sql_cfg"]["table_kunden"]."` ORDER BY `id` DESC"); $data = $this->MYSQL->fetch_array($query); $kundennr = substr($data["kundennr"], strlen(str_replace("{nummer}", "", $GLOBALS["system"]["kdnrprefix"]))); $kundennr++; $maxcount = $GLOBALS["system"]["kdnrzeros"]-strlen($kundennr); for ($i = 0; $i < $maxcount; $i++) { @$zeros .= "0"; } $kdnr = str_replace("{nummer}", @$zeros.$kundennr, $GLOBALS["system"]["kdnrprefix"]); return $kdnr; } Ich hoffe ich könnt meinem Vorhaben folgen. Mit freundlichen Grüssen Tobias Ehrig |
Re: Fortlaufende Kundennummer
Herzlich willkommen in der Delphi-PRAXiS, Tobias.
Den Schlüsselbereich würde ich in der Datenbank selbst verwalten. Die Erzeugung der Kundennummer, welche aus einem Präfix und einer Zahl fester Länge besteht, ist dann so möglich:
Delphi-Quellcode:
Freundliche Grüße vom marabu
const
KDNR_PREFIX = 'DP'; NUM_LENGTH = 6; var kdnr: String; next: Cardinal; function GetNext(prefix: String): Cardinal; begin // ... deine Schlüsselverwaltung end; begin // ... kdnr := Format('%s%.*d', [KDNR_PREFIX, NUM_LENGTH, GetNext(KDNR_PREFIX)])); // ... end; |
Re: Fortlaufende Kundennummer
Hallo marabu,
danke für die Willkommensworte! :) Soweit hab ich das ja schon! Habe mich wol fälschlicher Weise falsch formuliert. Ich habe die Bereits bestehende Kundennummer in einem String. Müsste den aber zerteilen nach den, in der Datenbank befindlichen, Pattern (prefix usw.) und so die nächste Kundennummer erstellen. Mir fehlen leider jedoch die Ansätze diesbezüglich, den String aanhand eines Pattern zu splitten (Thema RegEx?) Kapische ? :mrgreen: Ach und noch was, Guten Morgen *Tasse Kaffee heb!* |
Re: Fortlaufende Kundennummer
Welche mysql-Version setzt du ein?
|
Re: Fortlaufende Kundennummer
Die 4er *kurz und knapp*
EDIT: nachgeschaut: 4.1.11 |
Re: Fortlaufende Kundennummer
Ich hatte das schon verstanden, aber muss vielleicht etwas deutlicher werden. Es ist absolut unüblich die Folgenummer aus den bereits vergebenen Nummern der Kundentabelle abzuleiten. Man verwendet grundsätzlich einen unabhängigen Generator. Wenn der nicht verfügbar ist, dann kann man sich mit einer speziellen Tabelle behelfen, deren Tupel den Prefix und die zuletzt vergebene Nummer enthalten.
Soweit zu den Grundlagen, jetzt zu deinem Problem. Die Länge des Präfix ist doch bekannt:
Delphi-Quellcode:
marabu
function GetNext(s: String): String;
var next: Cardinal; begin next := Succ(StrToInt(RightStr(s, NUM_LENGTH))); Result := Format('%s%.*d', [KDNR_PREFIX, NUM_LENGTH, next])); end; |
Re: Fortlaufende Kundennummer
Meine Frage nach der Version, bezog sich auf die Tatsache, das Mysql dann wohl auch Trigger kann aber im Allgemeinen sollte man Schlüssel als Integer ( autoinc; Sequence-gesteuert o.ä) oder als GUID nehmen, String ist nicht so optimal.
|
Re: Fortlaufende Kundennummer
Danke,
ich hätte es auch gern einfach gemacht;
Code:
Aber Kundenwünsche...... :roll:
Prefix -> (Aus der Config Tabelle)
KundenID -> (Kunden Tabelle @ UNIQUE & AUTO_INCREMENT @ DB) |
Re: Fortlaufende Kundennummer
Suche dir einen anderen Kunden, Tobias. In einer Mehrbenutzerumgebung können bei deiner "kundenorientierten" Vorgehensweise Zugriffskonflikte entstehen - wenn beispielsweise zwei Benutzer den selben Schlüssel ermitteln und als PK speichern wollen. Der Kunde sollte sich auf die Formulierung seiner spezifischen Anforderungen aus der problem domain beschränken und nicht über programminterne Fragen nachdenken.
marabu |
Re: Fortlaufende Kundennummer
Was ist noch alles vorgegeben, wäre es möglich das DBMS zu wechseln oder zumindest ein Upgrade auf MySQL 5? Am Besten auf eine Datenbank, die Generatoren/Sequences und Trigger unterstützt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz