Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Autoinc Feld im Clientdataset auf 1 setzen (https://www.delphipraxis.net/178789-autoinc-feld-im-clientdataset-auf-1-setzen.html)

Natcree 28. Jan 2014 00:01

Autoinc Feld im Clientdataset auf 1 setzen
 
Hallo Habe eine Datenbank mit nem ID Autoinc feld. nun soll es während der laufzeit auf 1 gesetz werden.


Wie mache ich das am besten?

Natcree 28. Jan 2014 00:44

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
Also ich leere meine Datenbank so

Delphi-Quellcode:
clientdataset1.First;
while not clientdataset1.EOF do
begin
    clientdataset1.Next;
    clientdataset1.Delete;
end;
Nun will ich <PARAMS AUTOINCVALUE="6"/> auf 1 statt auf 6 setzen

Sir Rufo 28. Jan 2014 01:09

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
Wie wäre es denn mal mit Delphi-Referenz durchsuchenTClientDataSet.EmptyDataSet?

Manchmal hilft ein Blick in die Doku die Klasse besser zu verstehen

Natcree 28. Jan 2014 03:18

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
autoinc ändert sich nicht

sx2008 28. Jan 2014 05:25

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
Zitat:

Zitat von Natcree (Beitrag 1245584)
autoinc ändert sich nicht

Natürlich nicht, weil der Wert den das Feld beim nächsten Einfügen erhält tief in der Datenbank steckt und sich nur mit Klimmzügen (z.B. Tabelle löschen und neu anlegen) ändern lässt.
Aber es ist meist auch nicht nötig den Wert zu ändern.
Wenn man die Tabelle leert und der Autoinczähler weiterläuft ist das ja kein Problem da man weiterhin eindeutige Primärschlüssel erhält.
Zum Problem wird es dann wenn man Datensätze aus verschiedenen strukturgleichen Datenbanken in einer Datenbanktabelle zusammenfassen möchte.
Eventuell kann man dann den ursprünglichen Wert des Feldes mit
Delphi-Quellcode:
Feldobject.Clear
löschen und die Datenbank vergibt dann automatisch einen neuen Wert.
Aber ich würde Autoinc-Felder entfernen und einen anderen Primärschlüssel suchen sobald es Probleme dieser Art gibt.

Sir Rufo 28. Jan 2014 06:35

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
Dann wird doch wohl das Einfachste sein, die Datenmenge zu schließen, die zugehörige Datei zu löschen und dann die Datenmenge wieder zu erzeugen.

baumina 28. Jan 2014 06:46

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
Leider hast du nicht angegeben was für eine Datenbank du benutzt. Bei mySQL gäbe es folgende Möglichkeit:

SQL-Code:
ALTER TABLE tbl AUTO_INCREMENT = 1;

Sir Rufo 28. Jan 2014 06:48

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
Zitat:

Zitat von baumina (Beitrag 1245596)
Leider hast du nicht angegeben was für eine Datenbank du benutzt. Bei mySQL gäbe es folgende Möglichkeit:

SQL-Code:
ALTER TABLE tbl AUTO_INCREMENT = 1;

Er benutzt ein ClientDataSet als Datenbank ;)

baumina 28. Jan 2014 07:15

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
Achso, das kannte ich bislang noch nicht. Nach kurzem Nachlesen sind das dann wohl einfache XML-Dateien und hat nicht wirklich was mit einer Datenbank und SQL-Befehlen zu tun.

Natcree 28. Jan 2014 17:04

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
ich habe nur ein einfaches clientdataset und ne datasource kompo. Kann ich nicht eine leere datei erstellen diese leer machen und dann bei bedarf diese nur ins clientdataset laden?

Sir Rufo 28. Jan 2014 19:01

AW: Autoinc Feld im Clientdataset auf 1 setzen
 
Zitat:

Zitat von Natcree (Beitrag 1245721)
ich habe nur ein einfaches clientdataset und ne datasource kompo. Kann ich nicht eine leere datei erstellen diese leer machen und dann bei bedarf diese nur ins clientdataset laden?

Mal schauen ...

Zitat:

Zitat von Sir Rufo (Beitrag 1245593)
Dann wird doch wohl das Einfachste sein, die Datenmenge zu schließen, die zugehörige Datei zu löschen und dann die Datenmenge wieder zu erzeugen.

;)

oder als Code
Delphi-Quellcode:
procedure Truncate( ADataSet : TClientDataSet );
begin
  ADataSet.Close;
  DeleteFile( ADataSet.FileName ); // wird evtl. nicht benötigt
  ADataSet.CreateDataSet;
  ADataSet.SaveFile; // wenn kein DeleteFile, dann auf jeden Fall speichern
end;


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