Einzelnen Beitrag anzeigen

Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#1

Stored Procedure: Rückgabewert

  Alt 11. Mär 2011, 23:15
Datenbank: Firebird • Version: 2.5 • Zugriff über: IbDac
Hi,

ich habe folgende SP:

SQL-Code:
CREATE OR ALTER PROCEDURE CREATECUSTOMER (
    name varchar(100),
    title varchar(25),
    forename varchar(50),
    surname varchar(50),
    street varchar(50),
    houseno varchar(10),
    country varchar(3),
    zipcode varchar(10),
    cityname varchar(50))
returns (
    contactid integer)
as
declare variable entityid integer;
declare variable cityid integer;
BEGIN
    SELECT cityid FROM getCityid(:zipcode,:cityname,:country) INTO :cityid;
    INSERT into customer(name) VALUES (:name) RETURNING entityid INTO :entityid;
    INSERT into contact (title, forename, surname, street, housenumber, cityid, entityid) VALUES (:title, :forename, :surname, :street, :houseno, :cityid, :entityid) RETURNING contactid INTO :contactid;
    UPDATE customer set maincontactid = :contactid WHERE entityid=:entityid;
END
Die hat auch einwandfrei funktioniert (damals noch ohne das returns und mit contactid als Variable).
Jetzt wollte ich die ContactID zurückgeben lassen, daher das returns.
Der Zugriff von Delphi sieht so aus:

Delphi-Quellcode:
var
  proc: TIBCStoredProc;
begin
  proc := TIBCStoredProc.Create(nil);
  proc.StoredProcName := 'CREATECUSTOMER';
  proc.PrepareSQL(True);
  proc.ParamByName('name').Value := custName;
  proc.ParamByName('title').Value := title;
  proc.ParamByName('forename').Value := forename;
  proc.ParamByName('surname').Value := surname;
  proc.ParamByName('street').Value := street;
  proc.ParamByName('houseNo').Value := houseNo;
  proc.ParamByName('country').Value := Uppercase(country);
  proc.ParamByName('zipcode').Value := zipcode;
  proc.ParamByName('cityname').Value := cityname;
  proc.Open;
  result := proc.FieldByName('contactid').AsInteger;
  proc.Close;
  proc.Free;
end;
Das wurde dann mit der Meldung quittiert, dass das Ganze nicht klappt, da meiner SP ein Suspend fehle.
Also habe ich vor dem letzten end noch ein suspend; spendiert.

Jetzt bekomme ich auch brav die neu generierte ID zurück (die Generatoren werden auch schön hochgezählt), aber, die neuen Einträge landen nicht mehr in der DB.

Was mache ich falsch?


LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat