Announcement

Collapse
No announcement yet.

Problem mit variablen Anzahlen

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

  • Problem mit variablen Anzahlen

    Ich habe eine Tabelle A in der alle Spalten einer weiteren Tabelle B stehen. Da ich aus Tabelle B etwas auslesen will, die B aber nicht immer die Selbe ist, gibt es die Tabelle A.

    Nun hat die Tabelle A mit den Spalteninformationen unter anderem nicht nur die Namen der Spalten hinterlegt, sondern auch Sonderspalten (die nicht in B enthalten sind, aber für die Ausgabe per DGV gebraucht werden). Diese Sonderspalten sind nichts anderes als mehrere Orginalspalten, die aneinandergereiht wurden.

    Ich habe nun aber das Problem, dass ich nicht beschränken kann wie viele Sonderspalten es gibt und wie viele Orginalspalten in ihnen enthalten sind. Eine Sonderspalte könnte z.B. 5 Spalten zusammenfassen, eine andere nur 2. Zudem ist es so, dass wenn eine Sonderspalte 2 Orginalspalten zusammenfasst, genau diese beiden später nicht mehr angezeigt werden (sonst bräuchte ich die Zusammenfassungen ja auch nicht).

    Meine Frage ist nun: Wie kann ich das ganze in Strings und anschließend in eine SQL Abfrage packen?

    Die einzelnen Spaltennamen auslesen ist nicht das Problem, jedoch weiß ich nicht wie ich meine Variablen so bilden kann, dass auch alle Zusammenfassungen angezeigt werden.
    Um Schleifen komme ich dabei wahrscheinlich nicht rum...

  • #2
    Sonderspalten? Originalspalten? Ich verstehs irgendwie nicht ganz. Geht's jetzt um Spalten in nem DataGridView? Oder um Datenbankspalten? ADO.NET? SQL? Zusammenfassungen?

    Comment


    • #3
      Hi Imari,

      Für einen Automatismus enthält Deine Anfrage zu wenig Informationen, aber ich fasse mal an einem Beispiel zusammen, so wie ich die Frage verstehe: Du hast eine Tabelle B1

      Nachname: Müller
      Vorname : Harald
      Straße : Birkenweg
      Hausnummer : 30
      PLZ: 07345
      Ort: Musterstadt
      Telefon: 07523-13256

      und eine Tabelle B2

      Name : Müller
      Vorname : Harald
      Firma : Beispiel AG
      Abteilung : Kundenzentrum
      Telefonzentrale : 07523 - 5122 - 00
      Durchwahl : 47
      Straße : Industriestraße 15
      PLZ : 07345
      Ort : Musterstadt

      Und dann hast Du eine Tabelle A, die die Erzeugungslogik für die Ausgabe enthält:

      Zeile 1:

      Tabelle: B1
      Spalte 1: Telefon
      Spalte 2: Name+", "+Vorname
      Spalte 3: Straße+" "+ Hausnummer
      Spalte 4: PLZ+" "+Ort

      Zeile 2:

      Tabelle: B2
      Spalte 1: Name+", "+Vorname
      Spalte 2: Abteilung+CrLf+Firma
      Spalte 3: Straße
      Spalte 4: PLZ+Ort
      Spalte 5: Telefonzentrale
      Spalte 6: (Telefonzentrale ohne letzen 2 Stellen) + Durchwahl

      Ich habe dies Beispiel extra so gewählt, um zu zeigen, warum Du einen anderen Ansatz nehmen solltest: Je nach Verwendung hätte Deine Tabelle A unterschiedliche Spaltenanzahl, und das im Prinzip abhängig davon, ob Du in der ersten Spalte ("Tabelle") die Privat- oder die Firmenadresse auswählst.

      Hinzu kommt, dass Du es, wenn ich es richtig verstanden habe, SQL überlassen willst, aus den Angaben in den Spalten der Tabelle A selbst zu berechnen, wie er die Daten aus B1 oder B2 für die Ausgabe aufzubereiten hat, und das ist nicht so einfach möglich.

      Die einzige Möglichkeit, die ich hierbei sehe, ist Tabelle A auszulesen, und dann für jede Zeile in A eine SQL-Abfrage aufzubereiten, die dann je nachdem in Tabelle B1 oder in Tabelle B2 nachfragt. Dazu müsstest Du aber sicherstellen, dass Tabelle A genug Spalten hat, um für jedes Ausgabeszenario gewappnet zu sein, und dass die Routine, die die SQL-Abfrage erzeugt, mit NULL-Werten in nicht benötigten Spalten zurechtkommt. Hierfür allgemeine Aussagen zu erhalten dürfte die Hilfsmöglichkeiten eines Forums übersteigen.

      Gruß
      Martin Dietz

      Comment


      • #4
        Ok, nochmal etwas langsamer (war etwas in Eile, sry).

        Die Orginalspalten sind die Spalten der Tabelle B, die sich in einer Datenbank befindet.
        Diese Orginalspalten sind in der Tabelle A als Einträge vorhanden.
        Orginalspalten sind also tatsächlich in der Tabelle B vorhanden.

        Die Sonderspalten gibt es nur in der Tabelle A. Sie gehören zwar zu B, sind dort aber nicht vorhanden. Sie werden nur für die Ausgabe in einem Datagridview (DGV) benötigt.
        Eine Sonderspalte fasst mehrere Orginalspalten (bzw. deren Inhalt) zu einer zusammen.
        Beispiel:

        Tabelle B

        Spalte1
        A

        Spalte2
        B

        Spalte3
        C



        Tabelle A

        Sonderspalte
        Sonder1

        Setzt sich zusammen aus
        Spalte1, Spalte2, Spalte3

        Wenn Sonder1 also im DGV erscheint, hat sie den Inhalt "ABC".

        Ich habe es inzwischen geschaft, die Orginalspalten und Sonderspalten SQL-tauglich zusammenzusetzen (...[Spalte1] & " ' ' " & [Spalte2] & " ' ' " & [Spalte3] as [Sonderspalte] FROM....).

        Da ich die Spalten 1 bis 3 nun aber nicht mehr anzuzeigen brauche, muss ich die ja irgendwie aus dem SQL-Befehl ausschließen.
        In den Befehl kann ich aber keine Schleifen einbauen (oder doch?).
        Die Namen der Spalten stehen zwar in einem Array ( arr(3)), aber ich kann auch nicht schreiben: WHERE [Spalten] = "& arr(1) &"....
        Denn die Spaltenanzahl ist ja nie fest. Es können, wie beschrieben, wie hier 3 Spalten in eine Sonderspalte gehören, aber auch 2, 5 oder 10...

        Wie kann ich also diese Orginalspalten rausfilter, wenn sie bereits in einer Sonderspalte vorhanden sind?

        Ich hoffe, das ist jetzt verständlicher.

        Comment


        • #5
          Originally posted by M.Dietz View Post
          Zeile 1:

          Tabelle: B1
          Spalte 1: Telefon
          Spalte 2: Name+", "+Vorname
          Spalte 3: Straße+" "+ Hausnummer
          Spalte 4: PLZ+" "+Ort

          Zeile 2:

          Tabelle: B2
          Spalte 1: Name+", "+Vorname
          Spalte 2: Abteilung+CrLf+Firma
          Spalte 3: Straße
          Spalte 4: PLZ+Ort
          Spalte 5: Telefonzentrale
          Spalte 6: (Telefonzentrale ohne letzen 2 Stellen) + Durchwahl
          Net ganz. Jede Spalte ist so aufgeführ, wie sie auch in der Tabelle vorkommt. Die Zusammenfassungen (hier z.B. Name + Vorname), stehen nur in den Zeilen der Sonderspalte, zu der sie auch gehören.

          Comment


          • #6
            Mal kurz eine andere Frage zwischenrein. Wer pflegt denn die Inhalte der Tabelle A. Ist das ein "Admin" oder darf das der Otto-Normal-User auch?

            Wenn es nur der Admin ist, hätte ich mal gesagt von dem sollte man etwas mehr verlangen können und der soll das Feld gleich mit dem fertigen String [Spalte1] & " ' ' " & [Spalte2] & " ' ' " & [Spalte3] füllen und Du machst das ganze nicht mit einem SQL sondern mit zwei SQLs der erste holt sich nur aus Tabelle A die Info welche Felder als Sonderfelder verbunden werden und baust Dir damit den SQL für die eigentliche Abfrage zusammen.

            Ich bin zwar auch kein Freund von zu vielen SQLs im Programm aber ich behaupte mal in diesem Fall wären zwei SQLs die jeder für sich einfach sind besser als ein sehr komplexer SQL, mal abgesehen davon das mir bisher keine Lösung eingefallen ist wie man das in einem SQL abbilden könnte, zumal ich von Standard SQL ausgehe da Du nicht angegeben hast für welche Umgebung das funktionieren soll.

            Gruß Womble

            Comment

            Working...
            X