Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fortlaufende Kundennummer (https://www.delphipraxis.net/71861-fortlaufende-kundennummer.html)

xSkaschY 21. Jun 2006 23:43


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:
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;
}
In Delphi jedoch habe mich mit der Manipulation von Strings noch nicht so auseinander gesetzt.

Ich hoffe ich könnt meinem Vorhaben folgen.


Mit freundlichen Grüssen
Tobias Ehrig

marabu 22. Jun 2006 06:31

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:
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;
Freundliche Grüße vom marabu

xSkaschY 22. Jun 2006 07:00

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!*

mkinzler 22. Jun 2006 07:07

Re: Fortlaufende Kundennummer
 
Welche mysql-Version setzt du ein?

xSkaschY 22. Jun 2006 07:09

Re: Fortlaufende Kundennummer
 
Die 4er *kurz und knapp*

EDIT: nachgeschaut: 4.1.11

marabu 22. Jun 2006 07:09

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:
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;
marabu

mkinzler 22. Jun 2006 07:13

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.

xSkaschY 22. Jun 2006 07:14

Re: Fortlaufende Kundennummer
 
Danke,

ich hätte es auch gern einfach gemacht;

Code:
Prefix -> (Aus der Config Tabelle)
KundenID -> (Kunden Tabelle @ UNIQUE & AUTO_INCREMENT @ DB)
Aber Kundenwünsche...... :roll:

marabu 22. Jun 2006 07:24

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

mkinzler 22. Jun 2006 07:28

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.
Seite 1 von 2  1 2      

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