Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fortlaufend Hochzählen (https://www.delphipraxis.net/185206-fortlaufend-hochzaehlen.html)

strom 21. Mai 2015 21:58

Fortlaufend Hochzählen
 
Quelltext Ausschnitt!

Delphi-Quellcode:
var
i : integer;
begin
  DataEINSAETZE.DataSet.Insert;
  DataEINSAETZE.DataSet.Edit;
  EINSAETZE.FieldByName('EINSATZNUMMER').Text :=(FormatDateTime('yymmdd'+'000'+IntToStr(i+1),now)); // es wird immer nur die 1 gesetzt!

hathor 21. Mai 2015 22:04

AW: Fortlaufend Hochzählen
 
Die Variable i muss global deklariert sein.

Bevor die Variable i angezeigt wird - in welchem Kontext auch immer - muss sie verändert werden:

Delphi-Quellcode:
...
inc(i);
Label1.Caption:= FormatDateTime('yymmdd'+'000'+IntToStr(i),now);
...

Popov 21. Mai 2015 22:15

AW: Fortlaufend Hochzählen
 
Was willst du hochzählen?

Mal paar Grundlagen:

TDateTime ist ein Double-Wert, also eine ein Wert mit Dezimalstellen, bzw. Nachkommastellen. Der Wert vor dem Komma wird für das Datum genommen, der Wert nach dem Komma ist für die Uhrzeit.

0,0 ist somit ein Datum mit Uhrzeit. In dem Fall (ich glaube) 01.01.1900 00:00:00.000
1,0 ist ein Tag später, also 02.01.1900 00:00:00.000
2,0 wieder ein Tag später, also 03.01.1900 00:00:00.000

Datum plus 1 erhöht also das Datum um einem Tag.

Der Wert für eine Stunde ist 1 / 24.
Der Wert für eine Minute ist 1 / 24 / 60.
Der Wert für eine Sekunde ist 1 / 24 / 60 / 60.
Der Wert für eine Millisekunde ist 1 / 24 / 60 / 60 / 1000.

Die aktuelle Uhrzeit ist also 42145,9680029282 oder 21.05.2015 23:13:xx.yyyy

Edierst du zu 42145,9680029282 eine 1, ist es das gleiche Datum, aber morgen.

Was willst du also erhöhen?

DeddyH 21. Mai 2015 22:44

AW: Fortlaufend Hochzählen
 
I ist nicht initialisiert und wird auch nirgends verändert. Selbst wenn Ersteres zutreffen würde, käme also immer dasselbe heraus.

himitsu 21. Mai 2015 23:52

AW: Fortlaufend Hochzählen
 
Global muß nichts sein.
Aber lokal sollte es auch nicht sein.

Außerdem wird i nirgendwo hochgezählt.
Nur eine Kopie von i wird immer wieder um 1 erhöht.
Lokale variablen enthalten "Zufallswerte", wenn sie nicht initialisiert sind.

Was soll eigentlich ab i=9 passieren?

PS: Delphi-Referenz durchsuchenFormat, Delphi-Referenz durchsuchenIncMinute, Delphi-Referenz durchsuchenDateOf, Delphi-Referenz durchsuchenSysUtils.Date usw.

Dejan Vu 22. Mai 2015 06:34

AW: Fortlaufend Hochzählen
 
Vielleicht ist es auch interessant, das verwendete RDBMS zu erfahren, da es sich irgendwie um einen eindeutigen Identifikator handeln könnte, sodass Dinge wie "Eindeutigkeit" auch eine Rolle spielen könnten.

Ich würde die Vergabe der ID nach Möglichkeit in die Datenbanklogik verschieben und die ID innerhalb einer Transaktion vergeben, um Duplikate zu vermeiden.

Aber klar, wenn es sich um eine Desktopdatenbank handelt, die garantiert niemals von mehr als einer Person bedient wird und Threads auch nie ins Spiel kommen, kann man das schon mit einer globalen oder was weiss ich Variablen auch machen.

mkinzler 22. Mai 2015 07:05

AW: Fortlaufend Hochzählen
 
In älteren Beiträgen des TE wurde mit FireBid und MySQL/MariaDB gearbeitet. FireBird unterstützt Sequenzen ( Generatoren) und neuere MySQL-Versionen sollten Sequenzen auch unterstützen und würden sich in diesem Fall als Lösungsansatz aufdrängen.

baumina 22. Mai 2015 07:21

AW: Fortlaufend Hochzählen
 
In MYSQL gibt's AUTO_INCREMENT-Felder, kein CREATE SEQUENCE.

mkinzler 22. Mai 2015 07:25

AW: Fortlaufend Hochzählen
 
Auf dem ersten Blick ( nur überflpogen) sah es aus, als ob neuere MySQL Versionen dies nun könnten.
http://www.mysqltutorial.org/mysql-sequence/
Notfalls halt selber nachbauen.
In FireBird geht es aber auf jeden Fall.

jobo 22. Mai 2015 07:58

AW: Fortlaufend Hochzählen
 
mysql kann auch mit Variablen im Statement arbeiten. Damit kann man lustige Sachen machen. Die hier gepostete Clientoperation ließe sich damit vermutlich komplett auf dem Server abwickeln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 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