Announcement

Collapse
No announcement yet.

Programmierung einer Inhaltsverzeichnsverwaltung

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

  • Programmierung einer Inhaltsverzeichnsverwaltung

    Hallo zusammen,

    ich übe mich gerade in VB.NET (incl. SQl Server) und möchte gerne eine Inhaltsverzeichnisverwaltung programmieren. Ich habe eine Tabelle mit drei Spalten:

    Code:
    ID  Kapitel  Titel
    --------------------
    1    1           Titel 1
    2    1.1        Titel 1.1
    3    1.2        Titel 1.2
    4    2           Titel 2
    .....
    .....
    Nun möchte ich gerne der Tabelle ein neues Kapitel hinzufügen, z.B. die 1.2, wodurch aus der bisherigen 1.2 dann ein 1.3 werden müsste. Analog müssten sich beim löschen von Kapitelnummern die anderen auch automatisch anpassen.

    Leider habe ich absolut keine Ahnung, wie ich hier herangehen sollte. Eventuell kann mir jemand den Lösungsweg stichwortartig aufzeigen, sodass ich dann daraus Code erzeugen kann.

    Gruß,

    Jean

  • #2
    Hi Jean,

    ich würde aus der Kapitel Nr. mehrere Felder in der Datenbank machen, bringt zwar ein bisschen mehr arbeit, aber dafür wäre der erforderliche SQL nicht mehr so komplex weil Du nicht während des SQLs die Position des jeweiligen Unterkapitels suchen musst. Die Anzahl Ebenen ergibt sich aus Deinen Kapitel Nummern: 1.2.2.1 - wäre Hauptkapitel und 3 Ebenen, wenn Du natürlich Kapitelnummern wie 1.2.2.1.2.1.3.1 hast wird die die Arbeit etwas größer

    Code:
    Struktur:
    ID             Integer
    Hauptkapitel   Integer
    Ebene_1        Integer
    Ebene_2        Integer
    Ebene_3        Integer
    Titel          String
    Wenn Du im Titel die Kapitelnummer benötigst kannst Du ja mit einem Ersatzwert, z.B. &&Kapitel&&, arbeiten und bei der Ausgabe des Titels kurz nachsehen ob die Nummer mit angezeigt werden soll (nämlich dann wenn &&Kapitel&& im Titel enthalten ist) und dann &&Kapitel&& mit der entsprechenden Nummer (aus den Einzelteilen zusammengesetzt) ersetzen.

    Der Vorteil wäre das Du, wenn Du Kapitel einfügst nur einen einfachen SQL brauchst, ebenso beim Löschen um die folgenden Kapitel wieder anzugleichen.

    Vorgang 1:
    Einfügen des Unterkapitels 2 auf Ebene 1 im Hauptkapitel 1:
    Namen in [] Kennzeichnen Variablen die vorher entsprechend belegt sein müssen.

    SELECT * FROM Inhaltsverzeichnis WHERE Hauptkapitel = [Hauptkapitel] AND Ebene_1 >= [Ebene_1_Neu] ORDER BY Ebene_1 DESC

    pro Satz
    UPDATE Inhaltsverzeichnis SET Ebene_1 = Ebene_1 + 1 Where Hauptkapitel = [Hauptkapitel] AND Ebene_1 = [die gelesene Ebene_1]

    danach
    INSERT INTO Inhaltsverzeichnis VALUES ([vergebene ID], [Hauptkapitel], [Ebene_1_Neu], 0, 0 ,[Neuer_Titel])

    Vorgang 2:
    Entfernen des Unterkapitels 2 auf Ebene 1 im Hauptkapitel 1:
    Namen in [] Kennzeichnen Variablen die vorher entsprechend belegt sein müssen.

    DELETE FROM Inhaltsverzeichnis WHERE Hauptkapitel = [Hauptkapitel] AND Ebene_1 = [Ebene_1_weg]

    SELECT * FROM Inhaltsverzeichnis WHERE Hauptkapitel = [Hauptkapitel] AND Ebene_1 > [Ebene_1_weg] ORDER BY Ebene_1 ASC

    pro Satz
    UPDATE Inhaltsverzeichnis SET Ebene_1 = Ebene_1 - 1 Where Ebene_1 = [die gelesene Ebene_1] AND Hauptkapitel = [Hauptkapitel]

    Für jede weitere Ebene müsste dann zusätzlich zum Hauptkapitel natürlich auch die vorhergehenden Ebenen mit abgefragt werden, z.B.

    SELECT * FROM Inhaltsverzeichnis WHERE Hauptkapitel = [Hauptkapitel] AND Ebene_1 = [Ebene_1] AND Ebene_2 >= [Ebene_2_Neu] ORDER BY Ebene_2 DESC

    und beim Update
    UPDATE Inhaltsverzeichnis SET Ebene_2 = Ebene_2 + 1 Where Hauptkapitel = [Hauptkapitel] AND Ebene_1 = [Ebene_1] AND Ebene_2 = [die gelesene Ebene_2]

    da ja sonst die zweite Ebene aller Kapitel der Ebene 1 verändert werden würden.

    Ich hoffe ich habe Dich jetzt nicht unnötig verwirrt.

    Gruß Womble

    Comment


    • #3
      Hallo Womble,

      zunächst einmal muss ich mich bei Dir entschuldigen, dass ich erst nach 1,5 Jahren !!! antworte. Aber leider war ich aufgrund einer Krankheit weg vom Fenster und habe jetzt erst die Zeit gefunden, mein damaliges Vorhaben wieder anzupacken.

      Ich werde nun versuchen zu verstehen, was Du da gepostet hast und es erst einmal versuchen für 3. Ebenen umzusetzen.

      Gruß,

      Jean

      Comment


      • #4
        Es gäbe wohl noch andere und flexiblere Ansätze
        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

        Comment


        • #5
          Hi Jean,

          kein Problem, es passiert öfter das jemand einen Lösungsvorschlag postet und darauf hin keine Antwort bekommt, wegen so was mache ich mir keinen Kopf. Die einen sind dann wieder so in die Arbeit vertieft das sie keine Zeit mehr zum antworten haben, andere finden den Vorschlag doof und wissen nicht wie sie das sagen sollen ohne den Poster vor den Kopf zu stossen und ich glaube Dir währe eine meiner Varianten lieber gewesen als ungewollt auszufallen.

          @das-d: Kannst Du das etwas spezifizieren, ich habe der gleichen Probleme öfter Mal und löse die bisher immer so, weil es für mich halt funktioniert. Aber wenn Du einen neuen Ansatz für mich hast wäre das nett. Ich bin immer offen für kreative Vorschläge die mein Wissen erweitern, man weiß nie für was man das brauchen kann, selbst wenn man es in einem aktiven Projekt nicht mehr einsetzt.

          Gruß Womble

          Comment


          • #6
            naja du bist halt auf drei Stufen begrenzt oder ähnliches. Wenn du ansetzen würdest dass jede Überschrift egal welcher Hierarchiestufe schon mal eine ID bekommt, dann ist schon mal ein Unique Identifying gesichert. Dann setzt du noch eine zweite Spalte an in der Wird die ID des höheren ID Knotens gespeichert. Sprich meinetwegen hat 1. die ID 1 somit steht bei 1.1 in der ID beispielsweise 2 und im Parent steht 1. Dann überlegst du dir halt noch entweder eine spalte wo der Wert steht sprich bei 1.1 steht dort nur 1 drin oder wenn du nicht nur mit zahlen jonglierst dann halt eine Werte und eine Sortierspalte ... finde ich von der Datenstruktur sinnvoller und es ist egal wieviele Ebenen es gibt. Überlegt man sich noch entsprechende Datenklassen kann man das ganz schön Objektorientiert abbilden.
            Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

            Comment


            • #7
              Hallo zusammen,

              vielen Dank, dass ihr meinen Thread ungeachtet der langen Wartezeit doch noch am Leben erhaltet. Auch ich habe mir schon geacht, dass es "unsinnig" sein muss, die Kapitelnummerierung in einer Spalte abzubilden. Stattdessen entsteht die Kapitelnummerierung doch automatisch beim Aufbau. Ich denke, das kommt dem Ansatz von das-d schon sehr nahe:

              Code:
              ID   ParentID   Position   Titel
              -------------------------------------
              1     1         0          KapitelNr 1
              2     1         1          KapitelNr 1.1
              3     1         2          KapitelNr 1.2
              4     3         1          KapitelNr 1.2.1
              5     3         2          KapitelNr 1.2.2
              6     3         3          KapitelNr 1.2.3
              7     1         3          KapitelNr 1.3
              8     8         0          Kapitel2
              Hier wäre doch der Begriff "TreeView" sinnvoll oder?

              In der Datenbank müssten nun die Spalten ParentID und Position dann gemeinsam Unique sein.

              Jetzt muss ich nur noch überlegen, wie ich das ganze mittels VB.NET realisieren kann. Eigentlich will ich mir ein kleiner Tool basteln, dass mir die Datensätze in der Datenbank automatisch aktualisiert, sobald ich ein Kapitel hinzufüge.

              Gruß,

              Jean

              Comment


              • #8
                Du kannst auch eine Baumstruktur anlegen in dem Du in derselben Tabelle einen Primary Key und einen Foreign Key auf diesen Primary Key hast. Bestimmte Datenbanken unterstützen so etwas sogar.

                Comment

                Working...
                X