Announcement

Collapse
No announcement yet.

Fehlermeldung "multiple rows in singleton select"

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

  • Fehlermeldung "multiple rows in singleton select"

    Hallo Leute,

    ich stoße gerade zu später Stunde auf die o.g. Fehlermeldung. Ich habe versucht, die Daten einer TIBStoredProcedure in einem Datengrid anzeigen zu lassen.

    Die Stored Procedure ist als SELECT-Statement auf dem Firebird-Server definiert und liefert mehrere Datensätze zurück.

    <PRE>
    CREATE PROCEDURE GetSumDetails (sDatum VARCHAR(10))
    RETURNS (Rückgabewerte VARCHAR(3)) AS
    BEGIN
    SELECT Spalten FROM tabelle WHERE Datum = :sDatum
    INTO :Rückgabewerte;
    SUSPEND;
    END
    ^
    </PRE>

    Muß ich eventuell noch eine FOR-Schleife einbauen, damit alle Datensätze korrekt übertragen werden ?

    Grüsse,
    Carsten

  • #2
    Hallo Carsten,
    <br><br>
    wenn das obige SELECT mehrere Datensätze zurückliefert, dann kann das natürlich nicht in einen Rückgabeparameter reinpassen. Ja, Du mußt eine FOR-Schleife verwenden, und in der Schleife das SUSPEND aufrufen. Zum Beispiel:
    <pre>
    FOR SELECT ... WHERE ... INTO ... DO
    BEGIN
    ...
    SUSPEND;
    END
    </pre>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hi Thomas,

      der Fehler aus meinem 1. Posting erst zum Glück verschwunden. Allerdings bekomme ich es immer noch nicht hin, mir die SELECT-Daten in einem Grid anzuschauen.

      Ich habe hierzu das Datengrid mit einer DataSource-Komponente verbunden. Mit dieser DataSource-Komponente ist eine TIBStoredProcedure-Komponente verbunden, die das entsprechende SELECT-Statement auf dem Server ausführen soll.

      In meinem Grid kommen allerdings keine Daten an, nachdem ich die StoredProc ausführe. Habe ich vielleicht eine "Kleinigkeit" nicht beachtet ?

      Grüsse,
      Carste

      Comment


      • #4
        Hallo Carsten,
        <br><br>
        ja, Du hast eine Kleinigkeit übersehen. ;-)
        <br><br>
        Deine Stored Procedure gibt Dir ja eine Datenmenge zurück (= Selectable Stored Procedure). So eine Prozedur solltest Du wie eine gewöhnliche Tabelle behandeln, d.h. anstatt einer SP-Komponente verwende einfach eine Komponente, die eine Ergebnismenge zurückgibt. Im Falle von IBX wäre das TIBQuery oder TIBDataset, wobei das SQL Statement ein normales SELECT ist. Zum Beispiel:
        <pre>
        SELECT * FROM GetSumDetails
        </pre>
        Schöne Grüße,
        <br>
        Thoma
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          Hi Thomas,

          vielen Dank für Deine Antwort, aber da hakt noch was bei mir. Wie gebe ich der TQuery nun den Datumsparameter für die Stored Proecudure mit, wenn ich TIBQuery benutze ?

          Denn der Datumsparameter wird vom User im Client-Programm festgelegt.

          Und was würdest Du empfehlen ? TIBDataset oder TIBQuery ? Ich möchte ohne die "BDE" auskommen. Ist TIBQuery dafür geeignet ?

          Grüsse,
          Carste

          Comment


          • #6
            Hallo Carsten,
            <br><br>
            über eine parametrisierte Abfrage. Bei mir ist IBX schon etwas her. Ich würde Dir eine TIBQuery in diesem Fall empfehlen, sofern es sich um eine Nur-Lesen Datenmenge handelt.
            Frei aus dem Kopf, ohne Syntaxchecker. ;-)
            <br><br>
            Füttere die TIBQuery mit folgendem SQL:
            <pre>
            SELECT * FROM GetSumDetails(:ADate);
            </pre>
            Wenn es dann zur Verwendung kommt, könnte der Zugriff wie folgt aussehen:
            <pre>
            with IBQuery1 do
            begin
            Close;
            if not Prepared then Prepare;
            ParamByName('ADate').AsDateTime := ....
            Open;
            end;
            </pre>
            Wie soll ich das verstehen, wenn Du eine TQuery erwähnst? Mischt Du BDE mit IBX, oder hast Du Dich oben verschrieben?
            <br><br>
            Schöne Grüße,<br>
            Thoma
            Thomas Steinmaurer

            Firebird Foundation Committee Member
            Upscene Productions - Database Tools for Developers
            Mein Blog

            Comment


            • #7
              Super, Thomas.

              Jetzt läuft es bei mir wie gewünscht. Das mit TQuery war ein Tipfehler. Hätte natürlich TIBQuery heißen müssen.

              Wünsche Dir ein schönes Wochenende,
              Carste

              Comment

              Working...
              X