Access Datenbank Tabelle in MariaDB Datenbank übertragen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Access Datenbank Tabelle in MariaDB Datenbank übertragen

    Hallo,

    ich möchte gerne einige Tabellen aus einer Access Datenbank in eine MariaDB Datenbank übertragen.

    In Access und rechtsklick auf die Tabelle und dann Exportieren geht das aber ich würde das gerne in ein VB.Net Projekt übernehmen.

    auf die MariaDB kann ich zugreifen und auch verschiedene SQL Statements absenden
    auf die Access Datenbank auch.

    einfach mit
    CREATE TABLE new_database.new_table LIKE old_table
    und
    INSERT INTO new_database.new_table SELECT * FROM old_table

    kann es ja nicht sein, da die Tabellen sich ja in verschiedenen Datenbanken befinden.


    um es ganz von Hand einzutragen müsste ich die Feldlänge in der Access Datenbank auslesen. Da hakt es.
    FeldName und Typ hab ich aber wie die Länge?
    will bei mir nicht laufen

    System.BadImageFormatException: "Die Datei oder Assembly "System.Data.SQLite, Version=1.0.81.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" oder eine Abhängigkeit davon wurde nicht gefunden. Es wurde versucht, eine Datei mit einem falschen Format zu laden."
    wo denn?

    Ich hab das hier eingegeben

    VB.NET-Quellcode

    1. ......
    2. ElseIf True Then
    3. dataPath = Path.GetFullPath("C:\VB.Net\HausverwaltungDatenbank\Haus2010_Access2003.mdb")
    4. frm = New frmDataViewer(OleDbFactory.Instance,
    5. "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=True; Data Source='", dataPath, "';")
    6. ElseIf True Then
    7. .....


    hier werden mir noch zwei Fehler angezeigt

    VB.NET-Quellcode

    1. ElseIf True Then
    2. 'SqlCe unterstützt keinen Abruf von Schema-Informationen
    3. dataPath = Path.GetFullPath("..\..\Data\Bestellungen.sdf")
    4. frm = New frmDataViewer(SqlCeProviderFactory.Instance, "Data Source='", dataPath, "';")
    5. ElseIf True Then
    6. MySql auf db4Free: Passwort disabled
    7. frm = New frmDataViewer(MySqlClientFactory.Instance,
    8. "server=w00cb7ca.kasserver.com;user id=XXXXXX;password=XXXXXXX;persist security info=True;database=XXXXXX")
    9. ElseIf True Then

    SqlCeProviderFactory
    MySqlClientFactory
    und bei:
    MySql auf db4Free: Passwort disabled
    ist alles unterkringelt



    tja, diese komische ElseIf-Kette ist im Tut ja auch ausdrücklich vorgezeigt und erläutert.
    Wenn du den Code genau anguckst, wird dir auffallen, dass zwingend logisch ist, dass von allen diesen if-Zweigen nur der erste durchlaufen werden kann.
    alle anderen kannste auskommentieren.
    Bzw setze deinen Zweig an die erste Stelle, und lösch alle Zweige, die einen Compile-Fehler verursachen.
    jetzt läuft es, danke.
    hatte noch ein paar Probleme mit dem odbc Treiber.

    hab mich schon etwas mit dem Code beschäftigt aber ich muss dir sagen der ist, für meine Kentnisse, sehr kompliziert.

    Ich wüsste jetzt gar nicht wo ich an diese eine Zahl (den Character_Maximum_Length)drann komme und wie ich diesen einen Wert in mein Programm übernehmen kann.
    Was meinst du mit "an diese eine Zahl dran kommen"?
    In meinem Proggi ists gemacht mit Connection.GetSchema(schemaName)
    lies dazu die Doku.
    ausserdem kannste dir die Debug-Ausgaben angugge, oder auch mal einen Haltepunkt setzen.

    Verstehe ich post#1 übrigens richtig?
    Du kannst auf eine mdb zugreifen und auf eine MarialDb, und nun willst du einen eigenen Table-Exporter schreiben, weil der Access-Table-Exporter dich nicht zufriedenstellt?

    Ambitioniert.
    ja so ungefähr.

    ich benutze eine Access Datenbank und möchte die Daten auch auf einer MariaDB ins Intranet stellen. Da will ich ja nicht immer mit dem Access Table Exporter von Hand mehrere Tabellen exportieren.
    Das wollte ich automatisieren.
    Ich werde es wahrscheinlich so anstellen, dass ich die Tabelle nur einmal mit dem ATE rüberziehe/anlege und dann nur die Datensätze an sich dort hin schiebe.

    Vielleicht werde ich auch irgendwann mal ganz von Access weg und dann nur die MariaDB nehmen aber so weit bin ich noch nicht.

    mit dieser einen Zahl meinte ich die Spaltenbreite der Tabelle, also wieviel Buchstaben ich zum Beispiel in ein Namensfeld schreiben darf.
    Müsste es doch eigentlich eine Funktion für geben. Wenn ich aus einer Textbox was in eine Datenbank schreiben will und da sind zuviele zeichen drinn mekkert das Programm ja und so könnte man das abfangen und dem Benutzer sagen "Namen nur 50 Zeichen" um mal ein Beispiel zu nennen.

    frifri schrieb:

    mit dieser einen Zahl meinte ich die Spaltenbreite der Tabelle, also wieviel Buchstaben ich zum Beispiel in ein Namensfeld schreiben darf.
    Müsste es doch eigentlich eine Funktion für geben.
    Die Antwort gab ich doch schon:

    ErfinderDesRades schrieb:

    In meinem Proggi ists gemacht mit Connection.GetSchema(schemaName)
    lies dazu die Doku.
    ausserdem kannste dir die Debug-Ausgaben angugge, oder auch mal einen Haltepunkt setzen.
    ich hab natürlich schon versucht den Code zu verstehenund auch ein bisschen mit Haltepunkten experementiert aber, wie oben geschrieben, nicht so einfach zu verstehen.
    Ich weiß ja nicht ob du dich etwas in Leute hineinversetzen kannst die nicht ganz so firm im Proggramieren sind.
    Ich mach das ja als Hobby und nicht beruflich.
    @frifri

    Der Kollege oben will dir mit seinen Antwort nicht auf den Finger fühlen, sondern einen Lernimpuls geben.

    ErfinderDesRades schrieb:

    lies dazu die Doku.

    ist genau der richtige Ansatz.

    Es will dir hier niemand was böses, im Gegenteil :)
    Es ist nur frustrierend, wenn man eine (qualifizierte) Antwort gibt mit dem Anstoß "schau doch mal da rein, setz dich damit auseinander und dann wird das wie von alleine klappen" und der Wald vor lauter Bäumen nicht gesehen wird.

    Das hat nichts damit zu tun, sich nicht in die Lage eines anderen versetzen zu tun, sondern das ist rein die Erfahrung. Auch als Hobbyprogrammierer wirst du da noch hinter kommen! Glaub mir
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Dass man was nicht versteht ist ja ganz normal. Allerdings muss dann nach den richtigen Fragen gesucht werden.
    Fertiglösungen enthalten meistens mehr tamtam als das, wonach man sucht.

    frifri schrieb:

    um es ganz von Hand einzutragen müsste ich die Feldlänge in der Access Datenbank auslesen. Da hakt es.
    Was ist denn bei dir die Feldlänge, dass das nicht auszulesen ist von Hand?

    SQL-Abfrage

    1. SELECT * FROM MSysObjects INNER JOIN MSysColumns ON MSysObjects.Id = MSysColumns.Id WHERE [Name]="Whatever"
    Ists dadrin?

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Wenn man in Access ein Feld anlegt, muss man ja angeben wieviel, bei Textfeldern zum Beispiel, Zeichen in das Feld passen. Dass bräuchte ich um über einen SELECT Befehl eine Daten Tabelle in mariaDB anzulegen.
    Ich hab das jetzt aber anders gelöst.

    Ich exportiere die Tabellen mit einem ODBC Datenbanktreiber nach MariaDB. War gar nicht so einfach da einen alten zu bekommen. Ich hab ein ganz altes Access. Dass brauche ich ja nur wenn sich mal an der Struktur was ändert.
    Dann schreibe ich den neuen/geänderten Datensatz in die Access Datenbank und in die mariaDB.
    sollte der Datenbastand mal zu abweichend sein, lösche ich in MariaDB alle Datensätze und kopiere die von Access nach mariaDB rüber.

    Wenn einer nach dem Sinn fragt, ich habe alles mit Access gelöst und switche jetzt ganz langsam auf mariaDB um, weil ich das ganze im Browser machen möchte.
    Erst mal will ich nur die Datensätze abfragen. Für die Neuanlage und das Verbuchen nehme ich weiterhin Access bis ich irgendwann soweit bin.
    wie gesagt: MIt Connection.GetSchema bekommst du solche Informationen. Das Bild in post#2 zeigt es beispielhaft: Die Spalte 'Bemerkung' der Tabelle 'Foto' hat Character_Maximum_Length = 50

    Im Bild die Tabelle rechts stellt die DataTable dar, die du erhälst, wenn du connection.GetSchema("Columns") aufrufst.
    Das setzt natürlich voraus, dass du mit einer DataTable was anfangen kannst.