Wie Spalten zählen die bestimmten Namen enthalten?

  • Access

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von milaim.

    Wie Spalten zählen die bestimmten Namen enthalten?

    Hallo Leute,

    ich möchte gerne in meiner Tabelle 'personen' die Anzahl Spalten ermitteln, die z.B. '2014' beinhalten.
    Die Spalten sind z.B. mit 01_01_2014 beschriftet. Also quasi für das jeweilige Jahr die Anzahl Spalten ermitteln.

    Hab im Netz alles Mögliche gefunden aber nichts klappt.
    Hi Simon91,

    versuchs mal mit Frau Google: Suchbegriffe : SQL Spalten ermitteln
    da findest Du sowas ähnliches.
    So geht das bei MSSQL:
    select column_name from INFORMATION_SCHEMA.COLUMNS where table_name = 'tablexy'

    Welche DB verwendest Du? Access .mdb, MSSQL, MySQL.

    Bye.
    Danke für die schnelle Antwort.

    Ich verwende Access.mdb

    Ich denke du hast etwas ein bisschen falsch verstanden.

    Ich habe eine Tabelle 'personen' in denen beispielsweise die Spalten '01_01_2013', '05_05_2013', 06_06_2014' und '07_05_2014' stehen.
    Jetzt möchte ich eine Abfrage erstellen, die mir die Anzahl Spalten mit '2014' ausgibt (also 2).
    Das ist ein völlig falscher Ansatz. Sowas gehört nicht als Spaltenname in einer Tabelle. Der grundsätzliche Aufbau deiner Tabelle ist von Grund auf falsch.
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Ich hab sowas schon mal so gelöst.

    Quellcode

    1. Dim myTableDef As TableDef
    2. Dim myTableField As Field
    3. Set myTableDef = CurrentDb.TableDefs("personen")
    4. For Each myTableField In myTableDef.Fields
    5. If InStr(1, myTableField.Name, "2014", vbTextCompare) Then
    6. End IF
    7. Next


    vll. hielft das ja?
    Spalten legt man grundsätzlich nicht dynamisch an. Es gibt eine feste Struktur und die bleibt auch so.

    Du musst dein Anliegen schon beschreiben, damit wir dir eine bessere Datenbankstruktur vorschlagen können.

    @strippe@vb-paradise: Sowas gehört in die Mülltonne!
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    @milaim: Hintergrund damals war, dem Nutzer die Möglichkeit zu bieten in einer
    Listbox mit Checkboxen und Spaltennamen die Spalten auszuwählen welcher er im
    z.B.: Excel Export dargestellt haben möchte.

    Das das nicht die schönste Löung ist da gebe ich Dir Recht.
    In meiner Tabelle habe ich Spalten mit Vorname und Nachname, einer ID und dann sollen eben für die Personen dort neue Spalten hinzugefügt werden, z.B. für den 18.08.2013 (Datum wird mittels Comboboxen ausgewählt ) und hinzugefügt durch:

    con.Open()
    cmd.CommandText =
    "alter table personen add column " & [Spaltenüberschrift] & " varchar")


    wobei die Punkte der Datumsangabe durch "_" ersetzt wurden, da es sonst zu einem Fehler kommt.
    Die hier gezeigte "Spaltenüberschrift" ist ein String und wird aus den Comboboxen für das Datum zusammengebastelt.

    Dim Spaltenüberschrift As String
    Spaltenüberschrift = cbTag.Text & cbMonat.Text & cbJahr.Text
    Spaltenüberschrift = Spaltenüberschrift.Replace(".", "_")


    In diesem "Tag", der dann angelegt wurde wird ein Text mit Bemerkungen zur jeweiligen Person geschrieben, z.B. durch:

    con.Open()
    cmd.CommandText =
    "update personen set " & Spaltenüberschrift & " = 'x' where nachname = '" & Nachname & "' and vorname = '" & Vorname & "'"

    Soweit alles verstanden?
    Versteh ich das richtig?

    Du hast eine Tabelle Personen und die sieht so aus:
    ID | Namederperson | xx_xx_2013 | xx_xx2_2013 | xx_xx_2014 | xx_xx2_2014 | {Weitere dynamische Spalten}

    1 Hans Meier Bemerkung 1 Bemerkung 2 Bemerkung 3 Bemerkung 4 Bemerkung X
    2 Hans Meier 2 Bemerkung 1 Bemerkung 2 Bemerkung 3 Bemerkung 4 Bemerkung X
    ....

    Hab ich das richtig verstanden?
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Das tut sicherlich was zur Sache.
    Was, wenn die Person am 17-10-2013 eine Bemerkung abgibt? Dann gilt diese Spalte auch für die anderen User. Müssen die das jetzt auch befüllen?
    Was, wenn eine Person jede Woche eine Bemerkung reinschreibt? Im Jahr macht das 52. Pro Jahr hast du also 52 neue Spalten. In 3 Jahren hast du 52*3 Spalten.

    Viel Spaß beim Handlen. Wenn du eine ordentliche Lösung haben möchtest, kann ich dir helfen. Wenn nicht, kannst du ja deine Zeit damit verbringen, sinnlose Workarounds zu programmieren. Ergo: Viel Spaß beim Handlen :)
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Die Spalte wird generell immer für alle Personen befüllt, da immer alle "dabei" sind und jede somit eine "Bemerkung" abgibt.

    Eine zweite Tabelle wird dieses Projekt ganz sicher nicht bekommen und es werden somit auch keine Beziehungen zu Stande kommen, sonst hätte ich die Tabelle ganz sicher anders aufgebaut.
    Aber es muss doch auch so möglich sein, die einzelnen Tage zu zählen?

    Was wäre denn ein anderer denkbarer Ansatz, milaim? Danke für deine Hilfe!