Announcement

Collapse
No announcement yet.

StoredProc mit drei Bedingungen ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • StoredProc mit drei Bedingungen ?

    <p>Hallo,</p>
    <p>
    ich habe eine StoredProcedure erstellt, welche im Falle eines neuen Datensatzes diesen einträgt, im Falle einer Änderung den Datensatz ändert und als dritte Option alle Datensätze zurückgibt.</p>
    <p>
    Rufe ich schon bei FormShow die SP auf, dann kommt es zur Fehlermeldung, das Parameter erwartet werden.</p>
    <p>
    Was muss ich an meiner SP ändern, das die drei geforderten Bedingungen erreicht werden?</p>
    <p>
    Meine SP sieht so aus:
    <pre>
    create procedure SPBenutzer
    @ID INTEGER = 0,
    @VORNAME VARCHAR(25),
    @NACHNAME VARCHAR(25),
    @DATUM DATETIME = NULL
    AS
    DECLARE @SERVERDATUM DATETIME
    SET NOCOUNT ON
    SET @SERVERDATUM = GETDATE()

    IF NOT EXISTS(SELECT * FROM BENUTZER WHERE ID = @ID)
    BEGIN
    INSERT BENUTZER(VORNAME,NACHNAME,DATUM)
    VALUES(@VORNAME,@NACHNAME,@SERVERDATUM)
    END
    ELSE
    BEGIN
    UPDATE BENUTZER SET
    VORNAME = @VORNAME,
    NACHNAME= @NACHNAME,
    DATUM = @DATUM
    WHERE ID = @ID
    END

    SELECT * FROM BENUTZER
    SET NOCOUNT OFF
    GO
    </pre>
    </p>
    <br><br>
    mfg<br>
    Brian

  • #2
    Hallo!<br>
    Also eigentlich macht Deine SP ja nur ZWEI Dinge entweder Datensatz eintragen und alle Datensätze zurückgeben oder Datensatz ändern und alle Datensätze zurückgeben. Die Funktion "Alle Datensätze zurückgeben" kann nicht alleine auftreten!<br>
    Aber das Problem scheint nicht die SP zu sei, sondern Dein Aufruf!<br>
    Setzt Du die Parameter korrekt?<br>
    Im Zweifel einfach mal das Codesegment hier posten.<br>
    BYE BERN

    Comment


    • #3
      <p>Hallo,
      <br>hier mal der Quellcode und die abgeänderte SP
      </p>
      <p>SP:
      <pre>
      create procedure SPBenutzer
      @STATUS BIT = 1,
      @ID INTEGER = 0,
      @VORNAME VARCHAR(25),
      @NACHNAME VARCHAR(25),
      @DATUM DATETIME
      AS
      DECLARE @SERVERDATUM DATETIME
      SET NOCOUNT ON
      SET @SERVERDATUM = GETDATE()
      IF @STATUS <> 0
      BEGIN
      IF NOT EXISTS(SELECT * FROM BENUTZER WHERE ID = @ID)
      BEGIN
      INSERT BENUTZER(VORNAME,NACHNAME,DATUM)
      VALUES(@VORNAME,@NACHNAME,@SERVERDATUM)
      END
      ELSE
      BEGIN
      UPDATE BENUTZER SET
      VORNAME = @VORNAME,
      NACHNAME= @NACHNAME,
      DATUM = @DATUM
      WHERE ID = @ID
      END
      END

      SELECT * FROM BENUTZER
      SET NOCOUNT OFF
      RETURN @@IDENTITY
      GO
      </pre>
      </p>

      <p>Quellcode:
      <pre>
      procedure TForm1.FormShow(Sender: TObject);
      begin
      ADODataSet1.Parameters[1].Value:=0;
      ADODataSet1.Active:=True;
      end;

      procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
      begin
      ADODataSet1.Active:=False;
      end;

      procedure TForm1.cxButton1Click(Sender: TObject);
      begin

      ADODataSet1.Insert;
      DBText1.Caption:=IntToStr(0);
      end;

      procedure TForm1.cxButton2Click(Sender: TObject);
      begin
      with ADODataSet1 do
      begin
      Parameters[1].Value:=1;
      Parameters[2].Value:= StrToInt(DBText1.Caption);
      Parameters[3].Value:=cxDBTextEdit1.Text;
      Parameters[4].Value:=cxDBTextEdit2.Text;
      Requery([]);

      end;

      end;

      procedure TForm1.cxButton3Click(Sender: TObject);
      begin
      ADODataSet1.Cancel;
      end;
      </pre>
      </p>
      <p>mfg<br>
      Brian</p&gt

      Comment


      • #4
        Hallo!<br>
        Es gibt keine "optionalen" Parameter bei Stored Procs. Auch wenn die weiteren Parameter nicht benötigt werden mußt Du diese dennoch angeben bzw. setzen!!!<br>
        PS: Nur so am Rand. "Solche" SP sind extrem schlechter Stil. Trenne die Funktionen lieber in einzelne SPs auf.<br>
        BYE BERN

        Comment

        Working...
        X