Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabelle löschen und Autowert auf 1 setzen (https://www.delphipraxis.net/145917-tabelle-loeschen-und-autowert-auf-1-setzen.html)

falco953 10. Jan 2010 20:58

Datenbank: BDE • Zugriff über: DataSource

Tabelle löschen und Autowert auf 1 setzen
 
Hallo,

ich habe eine Tabelle, Tisch.db auf dich per Table und Datasource zugreife.

Nun möchte ich einen Button erstellen der den kompletten Inhalt der Tabelle löscht.
Das geht mit einer Query und SQL ja.

Jetzt ist nur das Problem dass eine Spalte in der Tabelle AutoWert ist und wenn ich in die Tabelle nach dem löschen neue Werte eintrage fängt er nciht bei null sondern da an wo die Tabelle vorher aufhörte.

Wie kann ich diesen AutoWert wieder auf 0 setzen?

Viele Dank und Grüße

Falco953

omata 10. Jan 2010 21:01

Re: Tabelle löschen und Autowert auf 1 setzen
 
Welche Datenbank?

Idee...
Dafür müsstest du mit einem ALTER TABLE die Spalte wieder in ein Feld ohne AUTOWERT umändern und dann ein weiteres ALTER TABLE abschicken, dass wieder den AUTOWERT aktiviert.

Aber warum will man sowas machen? Der Zahlenbereich sollte einige Jahre ausreichen.

falco953 10. Jan 2010 21:35

Re: Tabelle löschen und Autowert auf 1 setzen
 
datenbank bde, paradox (muss so sein)

ja, aber der zahlenbereich muss bei 1 anfangen da der erste eintrag in der tabelle diesen autowert 1 haben muss.

omata 10. Jan 2010 21:39

Re: Tabelle löschen und Autowert auf 1 setzen
 
Ja, dann probier das doch mal aus. Wie hast du die Tabelle den angelegt (welches SQL-Statement).

Wobei, wenn das Paradox ist, kannst du nicht einfach die Datei löschen und neu anlegen, wenn sowieso alle Daten dadrin gelöscht und eben wieder neu bei 1 begonnen werden soll.

Edit: Alternativ, kannst du doch auch den Autowert ausgeben und die ID selber ermitteln und eintragen

Sir Rufo 10. Jan 2010 21:42

Re: Tabelle löschen und Autowert auf 1 setzen
 
Zitat:

Zitat von falco953
datenbank bde, paradox (muss so sein)

nein

Datenbank: Paradox, Zugriff über: BDE

DataSource ist eine Komponente, die sowieso schon mal nicht zugreift, sondern man eher durchreicht.

olaf 11. Jan 2010 07:45

Re: Tabelle löschen und Autowert auf 1 setzen
 
Hallo,

versuch "emtytable" bei absolut database oder advantage wird dann der Wert auf 1 gesetzt.

Olaf

hoika 11. Jan 2010 07:59

Re: Tabelle löschen und Autowert auf 1 setzen
 
Hallo,

das geht aber bei Paradox nicht.

Der Umweg über

AutoInc -> Integer -> AutoInc

wurde ja schon gesagt.

Ein Alter Table geht so aber nicht (mit Paradox).

Man muss das über DbiDoRestructure machen,

Example 3 im Link kommt dem schon ziemlich nahe

1.


Ob ein Drop Field, Add Field klappt,
ist die Frage (wegen dem Primary Key).
Musst du ausprobieren.


Quick&Dirty aus Google (ExpertsExchange)
Delphi-Quellcode:
//sets a autoinc-value
Procedure SetAutoInc(filename : string; Value : Longint);
var
  mystream : tfilestream;
begin
  mystream := tfilestream.create(filename,
              fmOpenWrite + fmShareExclusive);
  try
    mystream.Seek(73, soFromBeginning);
    mystream.Writebuffer(Value, SizeOf(Value));
  finally
    mystream.Free;
  end;
end;

Heiko

nahpets 26. Jan 2010 09:14

Re: Tabelle löschen und Autowert auf 1 setzen
 
Hallo,

wenn Du für den Zugriff auf die Tabelle die Komponente TTable benutzt, so kannst Du die Tabelle in der IDE öffnen und dann im Objektinspektor die Eigenschaft StoreDefs auf True setzen. Dadurch wird die Tabellendefinition mit in das Formular übernommen.
Nun kannst Du zur Laufzeit hergehen, die Tabelle schließen, die Datei löschen und mit TTable.CreateTable neu erstellen. Damit hast Du eine neue Datei mit den Ursprungsdefinitionen.

Bei späteren Änderungen an der Tabellenstruktur muss Du nur darauf achten, dass Du die Definitionen im Formular immer mit anpasst. Dies geht aber über schließen der Tabelle in der IDE (Active auf False im Objektinspektor), Storedefs auf False, kompilieren, Active wieder auf True und Storedefs auf True und wieder kompilieren. Active kannst Du danach im Objektinspektor wieder auf False setzen.
Selbst wenn Du alle übrigen Zugriffe über SQL machst, so kannst Du für das Löschen und das Neuerstellen der Tabelle eine Prozedure unter Benutzung einer TTable-Komponente machen. Dies sollte die übrige Programmlogik nicht beeinflussen.


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