Autor Beitrag
UliTs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

Win 95, Win 2000, Win XP*
xBase++, Delphi 6
BeitragVerfasst: Mi 28.09.16 13:50 
Hallo allerseits,

ich schreibe gerade ein Delphiprogramm mit Hilfe von Firedac. Die Datenbank ist ADS und die Datenstruktur DBF/NTX in einem DataDictionary zusammengefasst.
Bei einer Tabelle kann ich in meinem Programm keine Änderungen vornehmen. Es kommt beim Post die Fehlermeldung:

[FireDAC][DApt]-400. Update-Anweisung updated [0] anstelle von [1] Datensatz. Mögliche Ursachen: Aktualisierungstabelle hat keinen Primärschlüssel oder Zeilenbezeichner, Datensatz wurde von einem anderen Benutzer geändert/gelöscht.

Den Datensatz gibt es definitiv. Hat jemand eine Idee, was falsch sein könnte?
UliTs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

Win 95, Win 2000, Win XP*
xBase++, Delphi 6
BeitragVerfasst: Do 29.09.16 22:20 
Weiss jemand, wo man sonst Hilfe bei diesem Problem bekommen kann?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.09.16 06:44 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: UliTs
UliTs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

Win 95, Win 2000, Win XP*
xBase++, Delphi 6
BeitragVerfasst: Fr 30.09.16 08:41 
Hallo Frühlingsrolle,

vielen Dank für Deine Antwort. Hier mein Postaufruf (ist ein Testaufruf):

ausblenden Delphi-Quelltext
1:
2:
3:
    FDQueryEditKunde.Edit;
    FDQueryEditKundeKDNNAME.Value := 'OHO';
    FDQueryEditKunde.Post;

Das Anlegen eines Primarykeys direkt in der Tabelle ist sicher eine elegante und vermutlich auch die beste Lösung. Leider handelt es sich bei den Tabellen aber um DBF-NTX Tabellen und zu allem Überfluss darf ich die Struktur bei diesen auch nicht ändern ...
Gibt es eine andere Möglichkeit, wie ich FireDAC einen Primary Key mitteilen kann?

Uli

P.S.
Wie hast Du die SQL-Anweisung so schön formatiert? Geht das auch mit Delphi-Anweisungen? -> Danke, JoelH


Zuletzt bearbeitet von UliTs am Fr 30.09.16 10:57, insgesamt 1-mal bearbeitet
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 798
Erhaltene Danke: 17

Win10
Delphi XE7/Tokyo Prof.
BeitragVerfasst: Fr 30.09.16 10:10 
user profile iconUliTs hat folgendes geschrieben Zum zitierten Posting springen:

P.S.
Wie hast Du die SQL-Anweisung so schön formatiert? Geht das auch mit Delphi-Anweisungen?


Es gibt verschiedene Code-Tags damit kann man im Forum Code von der Forensoftware formatieren lassen.
Siehe: www.entwickler-ecke....ml&sub=,19,27,32

_________________
mfg. Joel

Für diesen Beitrag haben gedankt: UliTs
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.09.16 10:26 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: UliTs
UliTs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22

Win 95, Win 2000, Win XP*
xBase++, Delphi 6
BeitragVerfasst: Fr 30.09.16 11:46 
Danke an beide :-) .

Frühlingsrolle, der Quelltext war so schon richtig, da FDQueryEditKundeKDNNAME ein Feld aus FDQueryEditKunde ist. Die Methode FDQueryEditKunde.FieldsByName gibt es bei FireDac nicht.

Aber der Hinweis auf die Felder hat mich zum Ziel :idea: gebracht:
Da gibt es die Eigenschaft "ProviderFlags". Und da habe ich bei allen Feldern, die nicht zum Schlüssel gehören, pfInWhere auf False gesetzt. Danach hat es geklappt! :!: :D

Eventuell geht es noch eleganter mit pfInKey. Dafür muß aber im DatenmengenProvider der UpdateMode von upWhereAll auf upWhereKeyOnly geändert werden. Da ich bisher noch nicht mit dem DatenmengenProvider gearbeitet habe, weiss ich noch nicht, wie ich diesen einbinden muß.