Einzelnen Beitrag anzeigen

tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#24

Re: INSERT INTO sonst UPDATE!

  Alt 18. Okt 2005, 23:24
Hallo, liebe DPler.

Bin grad über die Suche auf den thread hier gestoßen, und da mein Problem ein ähnliches ist und ich (mal wieder) etwas festhänge, dachte ich, ich poste mal:

Ich greife auf eine Interbase DB zu, in der ich folgende stored procedure habe:

SQL-Code:
begin
  select count(*)
    from mcsc_parameter
    where upper(parameter_id) = upper(:pi_parameter_id)
    into par_found;
  if (par_found = 0) then
    insert into mcsc_parameter
      values (:pi_parameter_id, :pi_parameter_value);
  else
    update mcsc_parameter
      set parameter_value = :pi_parameter_value
      where parameter_id = :pi_parameter_id;
  po_ret_val = par_found;
  suspend;
end
Die beiden I_ Variablen sind meine Input-Parameter, O_ entsprechend der Output-Parameter. par_found ist eine integer-Variable der Procedure. Das ganze hab ich im IB-Expert schon getestet und es scheint auch soweit korrekt zu laufen.
Diese Procedure rufe ich in Delphi in einer Funktion wie folgt auf:

Delphi-Quellcode:
  function TDataModule2.MCSC_Put_Param_Value(par_id, par_val: string): String;
  var par_ind: integer;
  begin;
    if par_id = 'then par_id := 'DUMMY';
    par_id := Uppercase(par_id);
    self.MCSC_StoredProc_IB_1.StoredProcName := 'MCSC_PUT_PARAMETER';
    par_ind := self.MCSC_StoredProc_IB_1.ParamByName('PI_PARAMETER_ID').Index;
    self.MCSC_StoredProc_IB_1.Params[par_ind].Value := par_id;
    par_ind := self.MCSC_StoredProc_IB_1.ParamByName('PI_PARAMETER_VALUE').Index;
    self.MCSC_StoredProc_IB_1.Params[par_ind].Value := par_val;
    self.MCSC_StoredProc_IB_1.ExecProc;
    par_val := self.MCSC_StoredProc_IB_1.Params.ParamValues['PO_RET_VAL'];
    Result := par_val;
  end;
Rufe ich jetzt (z.B. in einem Button-Pressed Event) diese Funktion mit zwei Parametern auf und laß mir das Ergebnis ausgeben, so erhalte ich erwartungsgemäß das Ergebnis der stored Proc, nämlich die Anzahl der vorhandenen Parameter in der Tabelle, die dem ersten Parameter entsprechen (im Normalfall 0 oder 1). Schaue ich jedoch dann in die DB, wurde weder Update noch Insert ausgeführt (was im IB Expert aber funktioniert hat). Commit kann ich aus der Procedure nicht aufrufen und das Commit der default transaction ändert auch nichts... irgendeine Idee, woran das liegen kann?

mfg

Ty
God is integer - until declared real...
  Mit Zitat antworten Zitat