Announcement

Collapse
No announcement yet.

Required Param value not set. (Delphi 5 Ent. + Interbase 4.52)

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

  • Required Param value not set. (Delphi 5 Ent. + Interbase 4.52)

    Hallo Leute,

    ich habe eine Stored Procedure in einer Interbase-Datenbank definiert:

    <PRE>
    CREATE PROCEDURE GetVertragsdetail (sStamm VARCHAR(6), sVertragsname VARCHAR(6))
    RETURNS (sVertragsdetail VARCHAR(50), sAnsprechpartner VARCHAR(50), sWiedervorlage VARCHAR(10)) AS
    DECLARE VARIABLE sSPvertragsdetail VARCHAR(50);
    DECLARE VARIABLE sSPansprechpartner VARCHAR(50);
    DECLARE VARIABLE sSPWiedervorlage VARCHAR(10);
    BEGIN
    SELECT VERTRAGSDETAIL, ANSPRECHPARTNER, WIEDERVORLAGE FROM vertragsdetail
    WHERE vertragsdetail.STAMM = :sStamm
    AND vertragsdetail.VERTRAGSNAME = :sVertragsname
    INTO :sSPvertragsdetail, :sSPansprechpartner, :sSPwiedervorlage;
    IF (:sSPvertragsdetail IS NULL) THEN sSPvertragsdetail = '';
    IF (:sSPansprechpartner IS NULL) THEN sSPansprechpartner = '';
    IF (:sSPwiedervorlage IS NULL) THEN sWiedervorlage = '';
    sVertragsdetail = sSPvertragsdetail;
    sAnsprechpartner = sSPansprechpartner;
    sWiedervorlage = sSPwiedervorlage;
    SUSPEND;
    END
    ^
    </PRE>

    Nun habe ich eine IBStoredProc-Komponente verwendet und folgendermaßen ausgeführt:

    <PRE>
    IBSPgetVertragsdetail.ParamByName('sStamm').AsStri ng:= sStamm;
    IBSPgetVertragsdetail.ParamByName('sVertragsname') .AsString:= sVertragsname;
    IBSPGetVertragsdetail.Prepare;
    IBSPGetVertragsdetail.ExecProc; // Diese Zeile wird nicht mehr ausgeführt *hier erscheint Fehlermeldung: Required Param value not set*
    </PRE>

    Wie kann ich das Problem beheben??? Kann ich die Stored Procedure auch irgendwie schon mal ohne Delphi testen? Wenn ja, wie?

  • #2
    Prepare macht das PArsen und findet die Parameter, hier findet es doppelt stat, autoamtisch beim ersten ParamByName und expliziet durch dich in Zeile 3, schiebe diese nach oben (oder verzichte drauf) dann sollte es gehe

    Comment


    • #3
      Hi Andreas,

      an dem Prepare lag es nicht. Habe gelesen, daß das Prepare die Anweisung schneller ausführt. Deswegen ist es drin bei mir. Stimmt das etwa nicht oder habe ich es falsch verstanden?

      Na ja, der Fehler lag meinerseits darin, daß Delphi den ParamType des StoredProcedure-Parameters "Wiedervorlage" fälschlicherweise auf "ptInput" gesetzt hat.
      Richtig war aber "ptOutput".

      Muß dazusagen, daß ich die Tabelle im nachhinein verändert habe in Interbase um diesen Typ und die Stored-Procedure in dem schon vorhandenen Delphi-Programm ebenfalls angepaßt habe. Wahrscheinlich hat da Delphi fälschlicherweise den ParamType-Wert falsch bestimmt.

      Vielen Dank und munteres Programmieren zum Wochenanfang wünscht euch
      Carste

      Comment


      • #4
        Schon richtig, aber Prepare macht nicht einfach schnellern, sondern...

        Ein Zugriff auf die DB gestalltet sich wie folgt

        a) SQL Statement setzen

        b) Prepare, d.h. parsen, analyse und Optimierung,
        der langsamste Teil bei den Arbeiten einer DB

        c) Parameter setzen

        d) Open

        e) Fetch(es)

        f) Close

        g) Unprepare

        läßt man b und g weg ist es impliziet gemacht wenn nötig, dabei zu häufig, daher wird es langsammer als notwendig.

        Daher selber machen, aber *vor* dem Setzen der Parameter

        Comment

        Working...
        X