AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Kundennummer generieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Kundennummer generieren?

Ein Thema von AlexII · begonnen am 14. Feb 2013 · letzter Beitrag vom 16. Feb 2013
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Kundennummer generieren?

  Alt 14. Feb 2013, 19:35
Datenbank: SQLite • Version: 3 • Zugriff über: SimpleDelphi-Wrappers von Tim Anderson
Hallo,

ich möchte in meiner DB die Kundennummern generieren und brauche ein paar Ideen wie ich das machen soll.

Ich kann die letzte Ziffer nehmen und 1 addieren, aber was ist wenn ich die letzte lösche, dann wird zu der vorletzten 1 addiert und ich bekomme schon mal vorhandene Kundennummer, somit wird diese wiederholt, was verboten sein soll.

Würde über eure Ratschläge freuen!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Kundennummer generieren?

  Alt 14. Feb 2013, 19:52
Mit autoincrement z.B.
http://sqlite.org/syntaxdiagrams.html#column-constraint
Gruß, Jo
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Kundennummer generieren?

  Alt 14. Feb 2013, 19:56
Autoincrement hat aber genau das Problem was ich beschrieben habe. Löscht man die letzte Zahl, legt neue an, und das wird dasselbe was vorher gelöscht wurde.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Kundennummer generieren?

  Alt 14. Feb 2013, 20:12
Eben nicht. Der Link war irgendwie nicht sehr hilfreich.

Zitat:
If a column has the type INTEGER PRIMARY KEY AUTOINCREMENT then a slightly different ROWID selection algorithm is used. The ROWID chosen for the new row is at least one larger than the largest ROWID that has ever before existed in that same table.

Allerdings würde ich überlegen, das Datenbankdesign so anzupassen, dass zumindest die Nummer (mit Löschungsdatum) eines gelöschten Kunden gespeichert bleibt.
Das erscheint mir robuster.

Also zwei Tabellen:
CUSTOMER(id, created, deleted)
ACTIVE_CUSTOMER(id -> CUSTOMER.id, ...)
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (14. Feb 2013 um 20:26 Uhr)
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Kundennummer generieren?

  Alt 14. Feb 2013, 20:21
Eben nicht. Der Link war irgendwie nicht sehr hilfreich.

Zitat:
If a column has the type INTEGER PRIMARY KEY AUTOINCREMENT then a slightly different ROWID selection algorithm is used. The ROWID chosen for the new row is at least one larger than the largest ROWID that has ever before existed in that same table.

Allerdings würde ich überlegen, das Datenbankdesign so anzupassen, dass zumindest die Nummer (mit Löschungsdatum) eines gelöschten Kunden gespeichert bleibt.
Das erscheint mir robuster.

Also zwei Tabellen:
CUSTOMER(id, created, deleted)
ACTIVE_CUSTOMER(id -> CUSTOMER.id, ...)

Hab ich aber getestet und es läuft wie ich gesagt hab. Also jetzt bin ich verwirrt.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
DSCHUCH

Registriert seit: 6. Jun 2007
Ort: Dresden
185 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Kundennummer generieren?

  Alt 14. Feb 2013, 20:23
in postgresql gibt es sequenzen, die garantiert nur einmal die gleiche zahl zurückgeben. (eigentl. bereits wegen transaktionssicherheit notwendig)

in sqllite scheint es sowas auch zu geben, mußt du mal googlen.

http://stackoverflow.com/questions/6...ment-in-sqlite
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Kundennummer generieren?

  Alt 14. Feb 2013, 20:48
Hab ich aber getestet und es läuft wie ich gesagt hab. Also jetzt bin ich verwirrt.
Also mir funktioniert es:
Code:
$ sqlite3 test.sqlite
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table miep (id INTEGER PRIMARY KEY AUTOINCREMENT, foo INTEGER);
sqlite> insert into miep values (NULL, 1);
sqlite> insert into miep values (NULL, 2);
sqlite> insert into miep values (NULL, 3);
sqlite> delete from miep where foo = 2;
sqlite> insert into miep values (NULL, 4);
sqlite> select * from miep;
1|1
3|3
4|4
sqlite>
Ich kann mir eigentlich kaum vorstellen, dass es am Wrapper liegt.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Kundennummer generieren?

  Alt 14. Feb 2013, 21:14
Na und wenn doch: Eine Tabelle mit einer Zeile und einer Spalte und dort einen streng monoton steigenden Zähler implementieren. Nicht ganz trivial bei multithread, aber kein Problem.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Kundennummer generieren?

  Alt 15. Feb 2013, 09:12
Hab ich aber getestet und es läuft wie ich gesagt hab. Also jetzt bin ich verwirrt.
Also mir funktioniert es:
Code:
$ sqlite3 test.sqlite
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table miep (id INTEGER PRIMARY KEY AUTOINCREMENT, foo INTEGER);
sqlite> insert into miep values (NULL, 1);
sqlite> insert into miep values (NULL, 2);
sqlite> insert into miep values (NULL, 3);
sqlite> delete from miep where foo = 2;
sqlite> insert into miep values (NULL, 4);
sqlite> select * from miep;
1|1
3|3
4|4
sqlite>
Ich kann mir eigentlich kaum vorstellen, dass es am Wrapper liegt.


Du hast eine Zahl irgendwo mittendrin gelöscht, da funkt alles wie es sein soll. Aber lösche mal die letzte Zahl, also die 3 und füge eine neue hinzu, und das wird wieder die 3 sein. Zumindest bei mir so.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII (15. Feb 2013 um 09:27 Uhr)
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Kundennummer generieren?

  Alt 15. Feb 2013, 10:20
Hallo,

ich möchte in meiner DB die Kundennummern generieren und brauche ein paar Ideen wie ich das machen soll.

Ich kann die letzte Ziffer nehmen und 1 addieren, aber was ist wenn ich die letzte lösche, d
Ist doch ganz einfach, wie schon geschrieben, increment.
Bereits genutzte Kundennummern löscht man nicht.
Somit werden doppelte Vergaben vermieden.
Nenne mir einen Grund, weshalb du bereits vergebene Nummern wieder löschen willst?
Karl-Heinz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz