Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL] Frage bezüglich Primärer Index (https://www.delphipraxis.net/31162-%5Bsql%5D-frage-bezueglich-primaerer-index.html)

NeoXan 5. Okt 2004 13:28


[SQL] Frage bezüglich Primärer Index
 
Also ich habe ID als Primary Index gesetzt

Datenbank
ID Data Data
1 asdfgfgfg asasdd
2 asdfgfgfg asasdd
3 asdfgfgfg asasdd
4 asdfgfgfg asasdd

soah...wenn ich jetzt die Nummer 3 Lösche (DELETE) dann sieht das ja so aus

Datenbank
ID Data Data
1 asdfgfgfg asasdd
2 asdfgfgfg asasdd
4 asdfgfgfg asasdd

und wenn ich nun einen neuen Eintrag hinzufüge (INSERT) dann so...

Datenbank
ID Data Data
1 asdfgfgfg asasdd
2 asdfgfgfg asasdd
4 asdfgfgfg asasdd
5 asdfgfgfg asasdd




Nun ist mein Problem, dass meine Abfrage dann so ausschaut

FOR i=1 to ANZAHL AN ROWS
die Zeile mit ID = i wird verändert
inc(i)

im Klartext
Anzahl an Zeilen ist ja 4
1. Durchlauf
i=1
ID = 1 ==> gefunden
2. Durchlauf
i=2
ID = 2 ==> gefunden
3. Durchlauf
i=3
ID = 3 ==> nicht gefunden
4. Durchlauf
i=4
ID = 4 ==> gefunden


Das Problem ist also, dass die Zeile mit der ID 5 gar nicht angesprochen wird, gibt es da eine einfachere Methode alle Zeilen durchzugehen...

Vielleicht ein Array mit allen ID's drinn'...also
[1,2,4,5] und dann die Laufvariable für die ganze Länge des Arrays einsetzt etc. etc.

mfg
NeoXan

PRehders 5. Okt 2004 13:46

Re: [SQL] Frage bezüglich Primärer Index
 
Hallo NeoXan,

ich kann erstmal nicht so richtig sehen, was dein Problem mit SQL zu tun hat: Du fragst doch offensichtlich nicht über SQL ab, sondern über Kompos, oder?
Das Problem an deinem Code ist der Zugriff über die Gleichheitsbedingung mit der Zählvariable. Wenn sich die Datenmenge verändert (gerade bei Löschungen) darf man nicht so zugreifen. Die natürliche Lösung wäre es, die Tabelle über einen TTable zu öffnen (da du ja wohl alle Sätze haben möchtest) und dann per Next auf das jeweils nächste Element zuzugreifen, bis es keine weiteren Sätze gibt. Dies entspricht einem SELECT * FROM <table> und ist nicht vom Primärindex abhängig. Der wird für einen solchen Zugriff nicht benötigt.

Wenn du doch etwas anderes willst, solltest du schreiben, wie deine Umgebung aussieht:
Welche DB? Welche Zugriffsmethode (ADO, BDE)?

Bis dann

Peter

schlock 5. Okt 2004 13:50

Re: [SQL] Frage bezüglich Primärer Index
 
In was für einer Struktur (Liste, Feld ...) speicherst Du deine Tabellenzeilen denn ??
Und warum löschst Du und suchst gleichzeitig innerhalb einer einzigen Schleife ??

NeoXan 5. Okt 2004 14:01

Re: [SQL] Frage bezüglich Primärer Index
 
SQL-Code:
"DELETE FROM termine WHERE id = '$id'";
SQL-Code:
"INSERT INTO termine (  titel , Date_Von , Date_Bis , `desc`) VALUES ('$titel', '$datevon', '$datebis', '$txt')";

Jelly 5. Okt 2004 14:11

Re: [SQL] Frage bezüglich Primärer Index
 
Zitat:

Zitat von NeoXan
Vielleicht ein Array mit allen ID's drinn'...also
[1,2,4,5] und dann die Laufvariable für die ganze Länge des Arrays einsetzt etc. etc.

Den Fehler du machst, ist daß du deine Anzahl an Zeilen automatisch mit deiner höchsten ID gleichsetzt. Du musst schon deinen ganzen Set durchlaufen, und für jeden Record die ID extrahieren, also etwa so:

Delphi-Quellcode:
var
 ID : integer ;
begin
  qry.open ;
  with qry do begin
     while not eof do begin
       ID := FieldByName ('ID').AsInteger ;
       // -> Mit dieser ID kannst du dann was machen
       next ;
     end ;
  end ;
  close ;
end ;
Gruß,


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz