Hallo,
auch auf die Gefahr, mich mal wieder unbeliebt zu machen ...
Jimmys Problem, wie ich es verstanden habe, bezieht sich auf den Fokus für den Update:
Frage : stehe ich damit auf dem "Record" ?
Wir sprechen über SQL, nicht über DBF. Mein
SELECT * FROM table erzeugt ein Result Set, das normalerweise nur eine Kopie der echten Daten darstellt. Um eine Veränderung in der Tabelle durchzuführen, muss ich ein gezieltes Update durchführen, da ich keinen "Datensatz" im "Zugriff" habe.
Ein
ist extrem gefährlich, da ALLE Sätze der Tabelle xxx diese Veränderung erfahren würden.
Es gibt verschiedene Ansätze, das Ziel einzugrenzen.
a) wenn ich einen primary key habe, dann kann ich per
den Fokus einschränken und treffe genau den Satz, den ich ändern will;
b) wenn ich sicherstellen kann, dass es ein Feld gibt, das den Satz eindeutig identifiziert, kann ich auch dieses Feld verwenden;
c) als Alternative bei Tabellen ohne BLOB und Konsorten kann man natürlich auch - unter Zugriff auf die alten Werte - folgendes Konstrukt verwenden (wie es z.B. Hector bei seiner MySQL Klasse macht):
Code: Alles auswählen
WHERE feld1 = wert-feld1 AND feld2 = wert-feld2 AND ... AND feldn = wert-feldn
Ich halte dies nicht für die beste Lösung, aber es ermöglicht, einen Datensatz (hoffentlich) eindeutig zu identifizieren.
d) je nach SQL Implementierung gibt es (interne) Felder, die einen Satz eindeutig identifizieren. Bisher bin ich lediglich bei SQLite auf ein solches Feld gestossen, dass als "rowid", "oid", oder "_rowid_" angesprochen werden kann und quasi ein
primary key auto_increment darstellt.
Gruss,
Georg