Announcement

Collapse
No announcement yet.

SELECT-Anweisung mit UNION: "count of column list and variable list do not match"

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

  • SELECT-Anweisung mit UNION: "count of column list and variable list do not match"

    Hallo,

    ich ein Problem bei einer SELECT-Anweisung, die UNION bentutzt.
    Ich bentutze Delphi 4 C/S mit InterBase 5.6.

    Die SQL-Anweisung sieht folgendermaßen aus:

    <pre>
    SELECT USERS.USERS, ARCHIVES.ARCHIVES, USERS.USERS_NAME, USERS.USERS_SUPERVISOR, ARCHIVES_PATH.ARCHIVES_PATH_NAME, ARCHIVES.ARCHIVES_FOLDER_NAME, ARCHIVES.ARCHIVES_NAME

    FROM ((USERS INNER JOIN SYS_OBJECTRIGHTS ON USERS.USERS = SYS_OBJECTRIGHTS.OBR_USR_ID) INNER JOIN ARCHIVES ON SYS_OBJECTRIGHTS.OBR_INSTANCE = ARCHIVES.ARCHIVES) INNER JOIN ARCHIVES_PATH ON ARCHIVES.ARCHIVES_PATH = ARCHIVES_PATH.ARCHIVES_PATH

    WHERE (((SYS_OBJECTRIGHTS.OBR_GRANTED)=1) AND ((SYS_OBJECTRIGHTS.OBR_OBJ_ID)=2) AND USER=:USER)

    UNION

    SELECT GROUPS_USERS.USERS, ARCHIVES.ARCHIVES, USERS.USERS_NAME, USERS.USERS_SUPERVISOR, ARCHIVES_PATH.ARCHIVES_PATH_NAME, ARCHIVES.ARCHIVES_FOLDER_NAME, ARCHIVES.ARCHIVES_NAME

    FROM USERS INNER JOIN (GROUPS_USERS INNER JOIN ((SYS_OBJECTRIGHTS INNER JOIN ARCHIVES ON SYS_OBJECTRIGHTS.OBR_INSTANCE = ARCHIVES.ARCHIVES) INNER JOIN ARCHIVES_PATH ON ARCHIVES.ARCHIVES_PATH = ARCHIVES_PATH.ARCHIVES_PATH) ON GROUPS_USERS.GROUPS = SYS_OBJECTRIGHTS.OBR_GRP_ID) ON USERS.USERS = GROUPS_USERS.USERS

    WHERE (((SYS_OBJECTRIGHTS.OBR_GRANTED)=1) AND ((SYS_OBJECTRIGHTS.OBR_OBJ_ID)=2) AND USER=:USER)

    ORDER BY 7
    </pre>

    Leider akzeptiert die IBQuery diesen Befehl nicht, obwohl er im SQL-Explorer anstandslos ausgef&uuml;hrt werden kann.

    Ich erhalte immer die Fehlermelung:
    <b>count of column list and variable list do not match</b>

    Ich w&auml;re für jede Hilfestellung dankbar.

    MfG
    Steffen

  • #2
    Hallo Steffen,

    wahrscheinlich hast du in einem DBGrid über den Spalteneditor persistente Spalten angelegt, die nach der letzten Änderung nicht mehr mit der Spaltenanzahl der Abfrage übereinstimmen. Am UNION liegt es sicher nicht ;-)

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,

      Danke für den Hinweis, aber daran lag's leider nicht. Ich habe inzwischen festgestellt, daß der Fehler immer dann auftritt, wenn auf die Menge, die der SELECT-Befehl liefert ein Locate-Befehl ausgeführt wird.

      Geht das bei Mengen, die mittels einer UNION-Anweisung "zusammengeschmiedet" wurden nicht??

      MfG
      Steffe

      Comment


      • #4
        Hallo Steffen,

        mit ADO und UNION-Abfragen hab ich schon Erfahrungen gemacht, aber wie das bei IBQuery aussieht - :-(.

        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Wenn Du eine View mit dem obigen Statement anlegst und dieses in der TIBquery verwendest, geht das

          Comment


          • #6
            Hallo,

            Das ist eine gute Idee. Habe ich auch schon versucht. Aber leider kann man in InterBase 5.6 keine View mit einer UNION anlegen und wir können nicht auf InterBase 6 updaten.

            Trotzdem, Danke für den Hinweis.

            MfG
            Steffe

            Comment


            • #7
              So, ich habe das Problem gelöst. Für alle anderen, die es interessiert:

              Man kann auch in IB 5.6 eine View mit UNION anlegen, allerdings nicht über Dynamic SQL (z.B. Query). Das geht nur mit C++ über Embedded SQL. Auch ist es dann nicht möglich in einer View mit UNION einen JOIN zu benutzen, da sich dann der IB Server aufhängt, aber man kann zwei Views mit JOINs machen und die dann mit UNION vereinigen.

              MfG
              Steffe

              Comment

              Working...
              X