Aus Form-Anwendung heraus MS Access 2007 Tabelle mit ca. 50 Spalten erstellen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von net-user.

    Aus Form-Anwendung heraus MS Access 2007 Tabelle mit ca. 50 Spalten erstellen

    Hallo zusammen,

    suche nach einer Möglichkeit, aus der Anwendung heraus eine Tabelle mit mehreren Spalten (ca. 50) zu erstellen.

    Zu Beginn der Anwendung ist die genaue Anzahl der Spalten nicht bekannt.

    Bisherige Versuche:

    ...
    Dim cn_db As New System.Data.OleDb.OleDbConnection
    cn_db.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" ...usw.

    str_cmd = "CREATE TABLE " & str_tablename & " usw.

    wie auch das einfache Erstellen der Tabelle und anschließende hinzufügen von Spalten mit

    str_cmd = "ALTER TABLE " & str_tablename & " ADD COLUMN " usw.

    funktioniert ja bei kleineren Tabellen, allerdings sind die SQL Statements für MS-Office auf 256 Zeichen begrenzt.
    Die SQL-Anweisung ist fehlerfrei, läuft bei einer entsprechenden MySQL-DB oder verkürzt auf 5 Spalten
    ebenfalls bei einer Access-DB.

    Bin für jede Hilfe dankbar.

    Gruß
    C.
    Hallo Erfinder,

    habe ich vielleicht vergessen hinzuzufügen, natürlich führe ich das "Alter Table" in einer Schleife mehrfach aus.
    Die Schleife ist ok, funktioniert, wenn ich sie auf 5-10 begrenze, setze ich sie auf den tatsächlichen Wert, bricht
    sie ab.

    Danke für die schnelle Antwort.
    Hallo,

    wenn Du Zugriff auf Access 2007 hast, dann kannst Du es dir selber anschauen.

    Nur zur Probe habe ich eine leere Tabelle "Test" mit der ersten Spalte "ID" erstellt.

    Makro im VBA-Editor
    Option Compare Database
    Sub test()
    Dim SQL As String
    Dim i As Integer
    For i = 0 To 20 ' funktioniert einwandfrei, zb 150 oder 200 funktioniert nicht, obwohl ja 256 Spalten möglich sein sollten.

    SQL = "Alter TABLE test ADD COLUMN test" & i & " Text"
    DoCmd.RunSQL SQL
    Next

    End Sub

    Wie gesagt, ähnliches Statement aus der net-Anwendung heraus, brechen schon viel früher ab.
    Bin für weitere Vorschläge dankbar.
    sorry, weiß ich keine Lösung für.

    Je nachdem, was du vorhast besteht evtl. die Möglichkeit, durch Verbesserung des Datenmodell es zu erübrigen, dynamische Tabellen-Änderungen vornehmen zu müssen.

    Ist ja eh nicht angenehm, gegen Tabellen programmieren zu müssen, bei denen man nicht weiß, wieviele Spalten da sind.
    Meist ist sowas ein Designfehler am Datenmodell, wenn man meint so etwas zu brauchen.
    Hallo Erfinder,

    kurz gesagt:
    das ist ansich die letzte Tabelle der Anwendung. Sie setzt sich aus den vorherigen Angaben des Users zusammen.

    etwas länger:
    User selektiert in einer Graphik-Anwendung wie zb AutoCad zwischen 2 und x horizontalen, 2 bis y vertikalen, 2-z senkrecht zu ihnen stehenden Linien.
    Daraus werden die Schnittpunkte der Linien berechnet, es resultieren entsprechende Rechtecke in den Ansichten, diese werden wiederrum mit Text belegt.
    Nun wird eine Tabelle benötigt, die für jedes Rechteck (Spaltenköpfe) und für jede Datei (Zeilen) entsprechende Felder bereit stellt.

    Und über das Modell denke ich jetzt noch mal nach, trotzdem wäre eine Lösung zur Erstellung dieser Tabelle schon sehr hilfreich, vielleicht fällt dir ja noch etwas dazu ein. Mit einer Begrenzung von 255 Spalten (Rechtecken, Textfeldern) kann ich zureckt kommen.
    Danke schon mal.
    mfg
    kann das sein, dass das eine Kreuztabelle (alias Pivot-Tabelle) ist? Hat Access da nix für vorgesehen? (ich kenn mich nicht gut aus)

    Aber ich bezweifel auch, dass du die Kreuztabelle in Access brauchst.
    Vielmehr brauchst du sie doch im Client-Programm, also in vb.net, oder?
    Dann konstruiere die Tabelle halt auch in vb.net - etwa als DataTable.
    Dazu muss man ja nix in der Db anlegen.
    Hi,

    unabhängig von der Designfrage funktioniert das bei mir einwandfrei:

    Visual Basic-Quellcode

    1. Sub test()
    2. Dim SQL As String
    3. Dim i As Integer
    4. For i = 0 To 200 ' funktioniert einwandfrei
    5. SQL = "Alter TABLE test ADD COLUMN test" & i & " Text"
    6. DoCmd.RunSQL SQL
    7. Next
    8. End Sub


    Was genau kommt denn für ein Fehler?
    Das ist meine Signatur und sie wird wunderbar sein!
    Hallo Erfinder,

    in der Anwendung besteht sie doch bereits in einer DataGridView, wie sollte ich sie sonst speichern?

    Allerdings ist sie weg, wenn ich die Anwendung beende. Zudem sollte evtl. aus anderen Anwendungen heraus auf
    die entsprechenden Werte zugegriffen werden können, daher stellt die Anwendung Speichermöglichkeiten in
    Access, Excel , SQL u. MySql zur Verfügung.

    Pro Projekt wird diese Tabelle ein mal erstellt und anschließend im Verlauf von Monaten oder Jahren nur aktualisiert
    oder neue Zeilen hinzugefügt.

    Aber ansich geht das am Thema vorbei, es muss doch möglich sein, mittels vb.net eine Access 2007 Tabelle mit 100 Spalten
    zu erstellen??? Oder liege ich falsch mit dieser Vermutung?

    Danke

    mfg
    C.

    Hallo Mono,

    danke für Deine Antwort.
    Du hast es in Access 2007 probiert?

    Bei mir erscheint die Fehlermeldung:
    Laufzeitfehler '3190':
    Zu viele Felder definiert.

    Inzwischen habe ich einen Sleeper eingebaut,damit schafft er bis zu 80 Spalten.
    Option Compare Database
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub test()
    Dim SQL As String
    Dim i As Integer
    For i = 0 To 200 ' bricht hier immer noch ab
    SQL = "Alter TABLE test1 ADD COLUMN test" & i & " Text"
    DoCmd.RunSQL SQL
    Sleep 100
    Next
    End Sub

    mfg
    c.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „net-user“ ()