Ich habe folgendes Problem:
Ich hole mir Daten aus einer Paradox-Tabelle über eine simple SELECT-Abfrage zum Editieren.
<font size=-1><PRE>SELECT kundennr, image, name1, name2, land, plz, ort, strasse
FROM kunden
WHERE kundennr=12345</PRE></font>
Das UpdateObject der Query, eine TUpdateSQLKomponente, enthält folgende SQL-Anweisung im ModifySQL:
<font size=-1><PRE>UPDATE KUNDEN
SET
name1 = :name1,
name2 = :name2,
land = :land,
plz = lz,
ort = rt,
strasse = :strasse
WHERE
(kundennr = :OLD_kundennr) and
(image = :OLD_image) and
(name1 = :OLD_name1) and
(name2 = :OLD_name2) and
(land = :OLD_land) and
(plz = :OLD_plz) and
(ort = :OLD_ort) and
(strasse = :OLD_strasse)</PRE></font>
Der WHERE-Teil ist deshalb so lang, weil die Tabelle <b>alle dort aufgeführten Felder als Primärindex</b> verwendet.
Das Problem:
Die SQL-Anweisung funktioniert solange alle Felder <> NULL sind auch prächtig.
Sobald aber ein Feld zb. Ort = NULL ist, dann erscheint Delphi mit der Fehlermeldung: "Aktualisierung mißlungen."
Also habe ich die SQL-Anweisung im ModifySQL etwas geändert:
<font size=-1><PRE>UPDATE KUNDEN
SET
name1 = :name1,
name2 = :name2,
land = :land,
plz = lz,
ort = rt,
strasse = :strasse
WHERE
(kundennr = :OLD_kundennr) and
(image = :OLD_image) and
(name1 = :OLD_name1) and
((name2 = :OLD_name2) OR (name2 IS NULL)) and
((land = :OLD_land) OR (land IS NULL)) and
((plz = :OLD_plz) OR (plz IS NULL)) and
((ort = :OLD_ort) OR (ort IS NULL)) and
((strasse = :OLD_strasse) OR (strasse IS NULL))</PRE></font>
Das Ergebnis war nun das der entsprechende Datensatz geändert wurde, jedoch auch das <b>AUTOINC</b> - Feld (hier: kundennr) erhöht wurde
und das sollte <b>nicht</b> passieren!
Dies wirkt sich natürlich nachteilig auf eine Masterdetail-Bezeihung aus.
Gibt es da irgendeine Möglichkeit dieses Problem zu lösen?
Danke im Vorraus...
Elerian.
Ich hole mir Daten aus einer Paradox-Tabelle über eine simple SELECT-Abfrage zum Editieren.
<font size=-1><PRE>SELECT kundennr, image, name1, name2, land, plz, ort, strasse
FROM kunden
WHERE kundennr=12345</PRE></font>
Das UpdateObject der Query, eine TUpdateSQLKomponente, enthält folgende SQL-Anweisung im ModifySQL:
<font size=-1><PRE>UPDATE KUNDEN
SET
name1 = :name1,
name2 = :name2,
land = :land,
plz = lz,
ort = rt,
strasse = :strasse
WHERE
(kundennr = :OLD_kundennr) and
(image = :OLD_image) and
(name1 = :OLD_name1) and
(name2 = :OLD_name2) and
(land = :OLD_land) and
(plz = :OLD_plz) and
(ort = :OLD_ort) and
(strasse = :OLD_strasse)</PRE></font>
Der WHERE-Teil ist deshalb so lang, weil die Tabelle <b>alle dort aufgeführten Felder als Primärindex</b> verwendet.
Das Problem:
Die SQL-Anweisung funktioniert solange alle Felder <> NULL sind auch prächtig.
Sobald aber ein Feld zb. Ort = NULL ist, dann erscheint Delphi mit der Fehlermeldung: "Aktualisierung mißlungen."
Also habe ich die SQL-Anweisung im ModifySQL etwas geändert:
<font size=-1><PRE>UPDATE KUNDEN
SET
name1 = :name1,
name2 = :name2,
land = :land,
plz = lz,
ort = rt,
strasse = :strasse
WHERE
(kundennr = :OLD_kundennr) and
(image = :OLD_image) and
(name1 = :OLD_name1) and
((name2 = :OLD_name2) OR (name2 IS NULL)) and
((land = :OLD_land) OR (land IS NULL)) and
((plz = :OLD_plz) OR (plz IS NULL)) and
((ort = :OLD_ort) OR (ort IS NULL)) and
((strasse = :OLD_strasse) OR (strasse IS NULL))</PRE></font>
Das Ergebnis war nun das der entsprechende Datensatz geändert wurde, jedoch auch das <b>AUTOINC</b> - Feld (hier: kundennr) erhöht wurde
und das sollte <b>nicht</b> passieren!
Dies wirkt sich natürlich nachteilig auf eine Masterdetail-Bezeihung aus.
Gibt es da irgendeine Möglichkeit dieses Problem zu lösen?
Danke im Vorraus...
Elerian.
Comment