Hallo,
ich arbeite mit D5P+ADOExpr. mit jeweils 1.Upd. & einem MSSQL7.
Ich habe diverse Probleme aber eventuell führen die alle auf den gleichen Ursprung zurück.
Eine Auftragstabelle ist als Master mit einer Positionlistentabelle als Detail verknüpft. Die Positionstabelle ist nochmals mit einer Stückliste Verknüpft. Das hinzufügen von neuen Positionen und Stücklistenposten läuft problemlos. Ferner habe ich mehrere StoredProcedures auf dem Server, die ein kopieren ermöglichen, auch hier kein Problem.
1. Wenn ich allerdings einen Auftrag oder eine hierarchisch tieferligende Position löschen möchte kommt die Fehlermeldung: 'Schlüsselinformationen sind
ungenügend oder inkorrekt. Es sind zu viele Zeilen von der Aktualisierung
betroffen'
In den jeweiligen Tabellen auf dem Server habe ich Deletetrigger gesetzt, die jeweils vorhandene Detaileinträge löscht in der Form:
//* Auftragstrigger
DELETE FROM Positionen
WHERE AuftrNr in ( SELECT AuftrNr FROM deleted )
//* Positionstrigger
DELETE FROM StkLst
WHERE PositionsNr in ( SELECT PositionsNr FROM deleted )
Wenn ich mit dem QueryAnalyzer den Auftrag lösche, geht er ohne zucken weg.
Nutze ich allerdings ein ADODataSet.Delete kommt die oben beschriebene Meldung. Bei einer anderen Master/Detail-Verknüpfung mit entsprechender Triggerung habe ich die selbe Fehlermeldung, allerdings nur wenn die Detailtabelle 0 oder 2 Einträge hat (also völlig bräsig). Bei einem und dreien klappt es. Und nun das kurioseste dieses Verhalten tritt nicht immer auf. Entweder es treten alle Symptome auf oder nur ein paar oder gar keins.
Zwar wurde vor ein paar Wochen bereits ein ähnlicher Beitrag diskutiert, nur konnten mir die dort beschriebenen Löungen nicht weiterhelfen, z.B. clServer statt clClient.
2. In einer Master/Detail-Verknüpfung tritt bei mir häufiger das Problem auf, daß in der Detailtabelle die Masterfilterung nicht immer funktioniert.
So stehen beispielsweise nach einem Post der Mastertabelle <b>SÄMTLICHE</b> Datensätze der Detailtabelle im Detail-Grid, auch wenn ich nachher ein ADODataSet.Requery fahre.
Dieses Phänomen bezeichne ich hier einmal als Trägheit des ADODataSets.
Wenn mir jemand weiterhelfen kann wäre das meine Erlösung!
Gruß
Marco Thede
P.S.: gibt es eigentlich mittlerweile ein Buch, das stärker auf Delphi mit ADO eingeht??
ich arbeite mit D5P+ADOExpr. mit jeweils 1.Upd. & einem MSSQL7.
Ich habe diverse Probleme aber eventuell führen die alle auf den gleichen Ursprung zurück.
Eine Auftragstabelle ist als Master mit einer Positionlistentabelle als Detail verknüpft. Die Positionstabelle ist nochmals mit einer Stückliste Verknüpft. Das hinzufügen von neuen Positionen und Stücklistenposten läuft problemlos. Ferner habe ich mehrere StoredProcedures auf dem Server, die ein kopieren ermöglichen, auch hier kein Problem.
1. Wenn ich allerdings einen Auftrag oder eine hierarchisch tieferligende Position löschen möchte kommt die Fehlermeldung: 'Schlüsselinformationen sind
ungenügend oder inkorrekt. Es sind zu viele Zeilen von der Aktualisierung
betroffen'
In den jeweiligen Tabellen auf dem Server habe ich Deletetrigger gesetzt, die jeweils vorhandene Detaileinträge löscht in der Form:
//* Auftragstrigger
DELETE FROM Positionen
WHERE AuftrNr in ( SELECT AuftrNr FROM deleted )
//* Positionstrigger
DELETE FROM StkLst
WHERE PositionsNr in ( SELECT PositionsNr FROM deleted )
Wenn ich mit dem QueryAnalyzer den Auftrag lösche, geht er ohne zucken weg.
Nutze ich allerdings ein ADODataSet.Delete kommt die oben beschriebene Meldung. Bei einer anderen Master/Detail-Verknüpfung mit entsprechender Triggerung habe ich die selbe Fehlermeldung, allerdings nur wenn die Detailtabelle 0 oder 2 Einträge hat (also völlig bräsig). Bei einem und dreien klappt es. Und nun das kurioseste dieses Verhalten tritt nicht immer auf. Entweder es treten alle Symptome auf oder nur ein paar oder gar keins.
Zwar wurde vor ein paar Wochen bereits ein ähnlicher Beitrag diskutiert, nur konnten mir die dort beschriebenen Löungen nicht weiterhelfen, z.B. clServer statt clClient.
2. In einer Master/Detail-Verknüpfung tritt bei mir häufiger das Problem auf, daß in der Detailtabelle die Masterfilterung nicht immer funktioniert.
So stehen beispielsweise nach einem Post der Mastertabelle <b>SÄMTLICHE</b> Datensätze der Detailtabelle im Detail-Grid, auch wenn ich nachher ein ADODataSet.Requery fahre.
Dieses Phänomen bezeichne ich hier einmal als Trägheit des ADODataSets.
Wenn mir jemand weiterhelfen kann wäre das meine Erlösung!
Gruß
Marco Thede
P.S.: gibt es eigentlich mittlerweile ein Buch, das stärker auf Delphi mit ADO eingeht??
Comment