Ankündigung

Einklappen
Keine Ankündigung bisher.

Unreferenzierte Interne KO´s entfernen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Unreferenzierte Interne KO´s entfernen

    ich räume aktuell mein KNX-Projekt auf, eigentlich handelt es sich um eine komplette Neuumsetzung. Das Projekt in der ETS ist fertig, und jetzt geht es an Edomi. Auch hier räume ich etwas auf. Einige Funktionen, die ich früher über Edomi umgesetzt hatte, sind verschwunden, und die Logic-Seiten habe ich gelöscht. Jetzt gibt es allerdings eine Menge unreferenzierter interner KOs. Gibt es eine Möglichkeit, diese auch gerne per SQL zu finden und zu löschen? Die aktuelle Lösung ist ja, mit einem Rechtsklick zu prüfen, wo sie noch referenziert sind.

    Ich wollte nicht komplett neu anfangen, da die Visualisierung doch viel Zeit in Anspruch genommen hat und es dort auch viele interne KOs gibt.

    Vielen Dank schon mal im Voraus!

    #2
    Haben die iKOs keine entsprechenden Bezeichnungen, dass man zumindest beim durchsehen strategisch Löschversuche unternehmen kann?
    Dann ist die Rechtsklick-Orgie zumindest nicht ganz so umfangreich...

    Sicher, direkt in der Datenbank wäre hier wohl effizienter.
    Gruß -mfd-
    KNX-UF-IconSet since 2011

    Kommentar


      #3
      Ein SQL Statement wäre prinzipiell möglich, aber relativ komplex und umfangreich.
      Bereits der Code zur Erstellung der Verweise besteht aus 24 SELECT und 21 JOIN Statements.
      Man müsste also prüfen ob das KO in keiner der 21 Tabellen referenziert wird, bevor man es löscht.

      Hier ein Beispiel, welches bei der Suche hilft.
      Zur Sicherheit aber bitt alle Ergebnisse nochmals mit der Verweisfunktion prüfen vor dem Löschen

      Code:
      SELECT * FROM edomiProject.editKo
      WHERE gatyp = 2 AND folderid <> 33
      AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editLogicLink
        WHERE linktyp=0 AND linkid=editKo.id
      )
      AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editLogicCmdList
        WHERE (cmd>0 AND cmd<10 AND cmdid1=editKo.id) OR ((cmd=3 OR cmd=6 OR cmd=42) AND cmdid2=editKo.id)
      )
      AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editVisuElement
        WHERE gaid=editKo.id
      )
      AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editVisuCmdList
        WHERE (cmd>0 AND cmd<10 AND cmdid1=editKo.id) OR ((cmd=3 OR cmd=6 OR cmd=42) AND cmdid2=editKo.id) OR (cmd=90 AND (cmdid2=editKo.id OR cmdid1=editKo.id))
      )
      AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editSequenceCmdList
        WHERE (cmd>0 AND cmd<10 AND cmdid1=editKo.id) OR ((cmd=3 OR cmd=6 OR cmd=42) AND cmdid2=editKo.id)
      )
      AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editMacroCmdList
        WHERE (cmd>0 AND cmd<10 AND cmdid1=editKo.id) OR ((cmd=3 OR cmd=6 OR cmd=42) AND cmdid2=editKo.id)
      )
      AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editSceneList
        WHERE gaid=editKo.id
      )​
      Zuletzt geändert von philipp900; 16.02.2025, 22:25.

      Kommentar


        #4
        Code:
        SELECT * FROM edomiProject.editKo
        WHERE gatyp = 2 AND folderid <> 33
        AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editLogicLink
        WHERE linktyp=0 AND linkid=editKo.id
        )
        AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editLogicCmdList
        WHERE (cmd>0 AND cmd<10 AND cmdid1=editKo.id) OR ((cmd=3 OR cmd=6 OR cmd=42) AND cmdid2=editKo.id)
        )
        AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editVisuElement
        WHERE gaid=editKo.id
        )
        AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editVisuCmdList
        WHERE (cmd>0 AND cmd<10 AND cmdid1=editKo.id) OR ((cmd=3 OR cmd=6 OR cmd=42) AND cmdid2=editKo.id) OR (cmd=90 AND (cmdid2=editKo.id OR cmdid1=editKo.id))
        )
        AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editSequenceCmdList
        WHERE (cmd>0 AND cmd<10 AND cmdid1=editKo.id) OR ((cmd=3 OR cmd=6 OR cmd=42) AND cmdid2=editKo.id)
        )
        AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editMacroCmdList
        WHERE (cmd>0 AND cmd<10 AND cmdid1=editKo.id) OR ((cmd=3 OR cmd=6 OR cmd=42) AND cmdid2=editKo.id)
        )
        AND NOT EXISTS (
        SELECT 1
        FROM edomiProject.editSceneList
        WHERE gaid=editKo.id
        );​
        Mit dem ; am Ende kommt auch ein Ergebnis!

        Ich danke dir wirklich – ich habe schon viele von Hand gelöscht, aber 30-40 GA's waren noch übrig. Vermutlich lässt sich das Query auch so umschreiben, dass es mit gatyp = 1 direkt die unreferenzierten Gruppenadressen anzeigt...

        Ich ärgere mich gerade ein bisschen, weil ich schon einen Teil der Visu umgeändert habe. Es wäre vermutlich einfacher gewesen, zuerst alle unreferenzierten GA's zu löschen und dann die 100-200 relevanten Adressen in der Visu von Hand zu ändern und neu zu importieren.

        Hast du das eigentlich selbst geschrieben oder gibt es das schon irgendwo im Code? Ich habe nämlich gesucht, aber nichts dazu gefunden...


        edit:

        Ich habe gerade ein ordentliches Copy-Paste-Marathon mit SQL-Daten hinter mir und muss jetzt noch 398 Gruppenadressen bearbeiten. Wahrscheinlich sind aber einige GA’s dabei, die unverändert geblieben sind, sodass ich nicht alle anfassen muss.

        Das erspart mir vermutlich zwei Tage Visu-Editing, um die GA’s den einzelnen Elementen wieder zuzuweisen – eine echte Erleichterung!

        Ich bin immer wieder begeistert, was für einen genialen Unterbau Edomi eigentlich hat.​
        Zuletzt geändert von Peterich; 17.02.2025, 16:50.

        Kommentar

        Lädt...
        X