Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit Autoinkrement (https://www.delphipraxis.net/23288-problem-mit-autoinkrement.html)

Chris P 1. Jun 2004 06:38


Problem mit Autoinkrement
 
hi leute,

ich habe eine Datenbank mit Paradox erstellt.
In dem ersten Feld soll sich ein Index automatisch hochzählen
mit Hilfe von einem Autoinkrement,
sodass jeder Eintrag seine eigene Nummer hat.
Habe ich aber nun 3 Einträge und lösche den 2. Eintrag dann
stehen die Nummer 1 und 3 drin.
Der 3. Eintrag ist ja jetzt der 2. Und er soll auch dann die Nummer 2
kriegen.
Wie kann das ganze geupdated werden, sodass die Indizes neu vergeben werden?

mgubler 1. Jun 2004 06:45

Re: Problem mit Autoinkrement
 
Hallo,

soweit ich weiss, geht das nicht.
Musst wenn überhaupt wie folgt vorgehen:
- Daten in Datei exportieren
- Tabelle leeren
- die ID aus den Dateien gegen '' ersetzen
- Daten in DB importieren

Danach hast du wieder alles sortiert!
Eine andere Möglichkeit kenne ich nicht!

mgubler

MrSpock 1. Jun 2004 06:46

Re: Problem mit Autoinkrement
 
Hallo Chris P,

ein Autoinc Wert wird immer hochgezählt und kann weder zurückgesetzt werden, noch Lücken schließen. Wenn du diese beiden Funktionalitäten benötigst, musst du einen normalen Integer Wert benutzen und diesen selbst verwalten. Selbst das Zurücksetzen eines Autoinc Wertes geht wie bereits oben geasgt nicht. Du musst dann das Feld, dass den Autoinc Wert darstellt in einen Integer umwandeln (z.B. mit der DB Oberfläche), den Wert zurücksetzen und anschließend wieder in Autoinc umwandeln.

Chris P 1. Jun 2004 07:16

Re: Problem mit Autoinkrement
 
Kann mir jemand sagen wo hier der Fehler liegt?
Delphi-Quellcode:
procedure TForm1.UpdateIndex();
var
   Index: Integer;
begin
   Table1.First;
   for Index := 0 to Table1.RecordCount-1 do
   begin
       Query1,SQL.Add('UPDATE Daten SET Daten.Nr = ' + IntToStr(Index)); // Daten = Name der Datebank
       Table1.Next;
   end;
end;
Der Wert Daten.Nr ist als Integer deklariert.
Jeder Eintrag erhält hier dieselbe Nummer.
Das soll aber grad nicht der Fall sein.

Jens Schumann 1. Jun 2004 07:51

Re: Problem mit Autoinkrement
 
Zitat:

Zitat von Chris P
Kann mir jemand sagen wo hier der Fehler liegt?
Delphi-Quellcode:
procedure TForm1.UpdateIndex();
var
   Index: Integer;
begin
   Table1.First;
   for Index := 0 to Table1.RecordCount-1 do
   begin
       Query1,SQL.Add('UPDATE Daten SET Daten.Nr = ' + IntToStr(Index)); // Daten = Name der Datebank
       Table1.Next;
   end;
end;

Der Ansatz ist schon verkehrt. In Deinem Source wird die Schleife durchlaufen aber eigentlich
passiert nix.
Versuch es mal so:
Delphi-Quellcode:
procedure TForm1.UpdateIndex();
var
   Index: Integer;
begin
   Index:=0;
   Table1.First;
   Table1.Edit;
   While Not Table1.EOF do
     begin
     Table1.FieldByName('Nr').AsInteger:=Index;
     Table1.Next;
     Inc(Index);
     end;
   Table1.Post;
   Table1.Browse;
end;

Chris P 1. Jun 2004 08:10

Re: Problem mit Autoinkrement
 
Es kommen 2 Fehlermeldungen:

1. Table1.Browse ist ein ungültiger Bezeichner
2. Table1 ist weder im Editier- noch im Eingabemodus

HaJo 1. Jun 2004 08:35

Re: Problem mit Autoinkrement
 
Morgen zusammen,

ich würde es so versuchen:

Delphi-Quellcode:
procedure TForm1.UpdateIndex();
var
   Index: Integer;
begin
   Index:=0;
   Table1.First;
     While Not Table1.EOF do
     begin
        Table1.FieldByName('Nr').AsInteger:=Index;
        Table1.Edit;
        TRY
           Table1.Post;
        EXCEPT
           Table1.Cancel;
        END;
        Table1.Next;
        Inc(Index);
     end;
     //Table1.Browse; - dieser Befehl ist mir unbekannt
     Table1.first;

end;
Gruß
Jochen

Chris P 1. Jun 2004 08:39

Re: Problem mit Autoinkrement
 
Es kommen immer noch die gleichen Fehlermeldungen (siehe oben).

Gollum 1. Jun 2004 08:43

Re: Problem mit Autoinkrement
 
Hallo,

aller guten Dinge sind Drei:

Delphi-Quellcode:
  ...
  Table1.Edit;
  Table1.FieldByName('Nr').AsInteger:=Index;
  try
    Table1.Post;
  except
    Table1.Cancel;
  end;
  Table1.Next;
  Inc(Index);
  ...

HaJo 1. Jun 2004 08:45

Re: Problem mit Autoinkrement
 
Tag Chris,

Das Feld "Table1.FieldByName('Nr')" darf natürlich nicht mehr vom Typ AutoInc oder Zähler sein. Ist es das doch, geht natürlich nichts. Felder mit dieser Eigenschaft kann man nicht ändern.

Gruß
Jochen


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr.
Seite 1 von 2  1 2      

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