Autor Beitrag
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Fr 23.02.07 11:02 
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?

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
Andreas Schilling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 1

WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
EXECUTE PROCEDURE Procedurename 'Stringparameter', Integerparameter, 'Floatparameter';					


Gruß Andreas
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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

_________________
Markus Kinzler.
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: 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.

ausblenden 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); //   <----- Problem
  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.

ausblenden 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);    <----- Lösung
  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!

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.