Announcement

Collapse
No announcement yet.

TQuery, Interbase und StoredProcedure

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

  • TQuery, Interbase und StoredProcedure

    Hallo,

    in meinem Delphi-Programm will ich über
    einen Service-Punkt Stored-Procedures anlegen lassen
    ohne den ISQL zu verwenden.

    Dazu habe ich folgenden Code geschrieben:
    With Query2 Do
    Begin
    DataBase1.StartTransaction;
    Close;
    SQL.Clear;
    HlpStr := 'Create procedure GetDatenByIdx(i_Idx Integer)';
    HlpStr := Concat(HlpStr,Chr(13),Chr(10));
    HlpStr := Concat(HlpStr,'Returns (r_Laenge Integer, r_Breite Integer)');
    HlpStr := Concat(HlpStr,Chr(13),Chr(10));
    HlpStr := Concat(HlpStr,'As');
    HlpStr := Concat(HlpStr,Chr(13),Chr(10));
    HlpStr := Concat(HlpStr,'Begin');
    HlpStr := Concat(HlpStr,Chr(13),Chr(10));
    HlpStr := Concat(HlpStr,'Select Laenge, Breite From T_Holz where LaufIdx = :i_Idx into r_Laenge, r_Breite;');
    HlpStr := Concat(HlpStr,Chr(13),Chr(10));
    HlpStr := Concat(HlpStr,'End');
    HlpStr := Concat(HlpStr,Chr(13),Chr(10));
    SQL.Add(HlpStr);
    ExecSQL;
    DataBase1.Commit;
    End;

    Als Fehlermeldung bekomme ich "Typ vom Feld i_idx ist unbekannt".
    Wo liegt mein Fehler ?
    Wir setzen Delphi 4.0, mit Interbase 5.6 ein .

    Vielen Dank.

    Gruß

    Ralf Eberhard

  • #2
    Hallo Ralf,
    ich weiss nicht, ob es die Lösung ist.
    Aber die Parameter - Bezeichner müssen gross geschrieben oder in doppelte Hochkommas gesetzt werden.
    Also:<BR>
    HlpStr := 'Create procedure GetDatenByIdx(I_IDX Integer)';
    HlpStr := Concat(HlpStr,Chr(13),Chr(10));
    HlpStr := Concat(HlpStr,'Returns (R_LAENGE Integer, R_BREITE Integer)'); <BR>
    Fran

    Comment


    • #3
      Hallo Frank,

      vielen Dank für Deine Antwort.

      Leider ohne Erfolg.
      Der Doppelpunkt muß irgendwie stören.

      Gruß

      Ralf Eberhar

      Comment


      • #4
        Hallo Frank,

        vielen Dank für Deine Antwort.

        Leider ohne Erfolg.
        Der Doppelpunkt muß irgendwie stören,
        aber gemäß Interbase-Syntax wird dieser benötigt.

        Gruß

        Ralf Eberhar

        Comment


        • #5
          Hallo Ralf,
          es fehlen zwar noch die Doppelpunkte vor den Rückgabeparametern (nach dem into).
          Aber ich fürchte, es geht nur über Script. Und bei den Interbase Compos von Delphi fehlt eine entsprechende Komponente.
          Mit IBO oder FibPlus wäre es machbar.
          Ich glaube, das Problem ist hier das Semikolon.
          Interbase interpretiert ihn als Begrenzer. Deshalb beginnen ja Create Procedure - Statements auch immer mit Set Term ^; oder so.
          Also, wenn nicht noch jemand mich eies Besseren belehren kann, wirst du wohl auf die Suche nach einer Script - Komponente gehen müssen.
          Gruß, Fran

          Comment


          • #6
            Hallo Frank,
            entferne ich den Doppelpunkt und setze meine where-Bedingung
            auf einen festen Wert ((where LaufIdx = 1), macht natürlich keinen Sinn !)
            dann funktioniert es.

            Geht eine Script-Komponente, IBO auf die Interbase-API oder
            wie erfolgt der Zugriff auf Interbase-Server.
            Gruß

            Ralf Eberhar

            Comment


            • #7
              Hallo Ralf,
              Problem ist klar. TIBQuery wertet alles mit einem Doppelpunkt als Parameter.
              Mit TIBSql sollte es gehen. Wichtig ist, dass du ParamCheck auf False setzt.
              with AIbSql do
              begin
              ParamCheck := False;
              Sql.Text := HlpStr;
              ExecQuery;
              end;
              Fran

              Comment


              • #8
                Hallo Frank,
                es hat funktioniert.
                Auch mit Delphi 4 und mit TQuery.
                Vielen Dank.

                Gruß

                Ralf Eberhar

                Comment

                Working...
                X