Entwickler-Ecke
Datenbanken - Per Update-Komponente Ergebnismenge einer SP aktualisieren
mexx - Fr 23.02.07 11:02
Titel: Per Update-Komponente Ergebnismenge einer SP aktualisieren
Ich verwende ein Query, welche als SQL-Anweisung eine Stored Procedure einer Firebird hat. Die Query besitzt eine UpDate-Kompontente. Die Ergebnismenge dieser SP wird angezeigt. Nach bearbeiten dieser Daten in den Steuerelementen, aktualisiere ich die Datenmenge. Dabei kommt die UpDate-Komponente ins Spiel. Dort steht aber in der InsertSQL/ModifySQL kein INSERT/UPDATE drin, sonder eine weitere Procedure.
Das ist notwendig, weil die Datenmenge der Query, keine Tabelleneinträge anzeigt, sondern eine Ergebnismenge einer Stored Procedure ist. Um diese Daten zu aktualisieren brauche ich eine Procedure. Leider erhalte ich beim Update die Meldung "Aktualisierung misslungen". Ich vermute, dass meine Vorgehensweise mit einer GET Stored Prodedure in der Query und einer SET Stored Procedure in der UpDate-Komponente nicht geht.
Wie seht Ihr das?
Andreas Schilling - Mo 26.02.07 08:18
Diesen Weg bin ich zwar noch nicht gegangen, aber wenn ich eine SP in der Datenbank aufrufe für ein Update / insert dann mit folgender Syntax
Delphi-Quelltext
1:
| EXECUTE PROCEDURE Procedurename 'Stringparameter', Integerparameter, 'Floatparameter'; |
Gruß Andreas
mkinzler - Mo 26.02.07 08:57
Welche FB Version?
Bei der 2er hast du die Möglichkeit dir den PK zurückgeben zu lassen. Dann kannst du die SP mit einem Select-Statement aufrufen
mexx - Mo 26.02.07 09:02
Das Problem lag in der DBTables. Leider eine notwendige Implemantation! Dort wird beim UpDate-Statement der Update-Komponente folgende Procedure aufgerufen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TUpdateSQL.ExecSQL(UpdateKind: TUpdateKind); begin with Query[UpdateKind] do begin Prepare; ExecSQL; if RowsAffected <> 1 then DatabaseError(SUpdateFailed); end; end; |
Wenn aber nun in der Update-Komponente eine SP gestartet wird, so erhält RowsAffected keinen Wert und bringt die Meldung der Datenbank.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TUpdateSQL.ExecSQL(UpdateKind: TUpdateKind); begin with Query[UpdateKind] do begin Prepare; ExecSQL; end; end; |
Ich kann gut auf diese Prüfung verzichten, da die DBTables nur noch sehr selten in der App verwendet wird. Vielen Dank für eure Beteiligung!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!