Announcement

Collapse
No announcement yet.

über Access kein Zugriff auf einige mySQL-Tabellen

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

  • über Access kein Zugriff auf einige mySQL-Tabellen

    Hallo,

    hoffentlich kann mir jemand helfen.

    Ich habe aus meiner Access-Datenbank die Tabellen auf eine mySQL-Datenbank (Maria-DB) exportiert und auch direkt in der mySQL selber noch Tabellen erzeugt.
    Die Tabellen habe ich jetzt über einen ODBC-Conector (mySQL 5.1 und 5.3) wieder mit meiner Access-Datenbank verbunden.

    Das Problem ist aber dass ich von etwa 20 Tabellen nur in einer einzigen Tabelle Datensätze anfügen und ändern kann.

    Access 2013 sagt nur dass Datensätze nicht eingefügt werden konnten.

    Auch wenn ich die verknüpfte mySQL-Tabelle durch Doppelklick direkt öffne funktioniert es nicht. Nur bei einer einzigen Tabelle. Also kann es ja nicht an irgenwelchen Formularen liegen die Fehlerhaft sind.

    Mein Problem ist jetzt herauszubekommen warum nur eine einzige Tabelle Datenänderungen zulässt und die anderen nicht.

    Ich kann keinen Unterschied erkennen zwischen den verschiedenen Tabellen oder deren Rechte.
    Alle Tabellen sind in der selben Datenbank in mySQL und alle Tabellen haben die selben Rechte bei diesem User.

    Jemand eine Idee wie ich den Fehler finden kann?
    Wo kann man was debuggen? geht das mit myPhPAdmin oder muss ich auf meiner Diskstation irgendwelche Logfiles ansehen? Wenn ja welche?

    DANKE

    IngoF

  • #2
    Wirf die Tabellen wieder raus und verknüpfe sie erneut.
    Kenne die akt. Access Versionen nicht, aber achte beim Verknüpfen auf alles, was mit der Angabe der Primärschlüssel zu tun hat.
    Ggf. gibt es auch ein Problem mit exotischen Datentypen.
    Gruß, defo

    Comment


    • #3
      Danke für die Antowrt.

      Originally posted by defo View Post
      Wirf die Tabellen wieder raus und verknüpfe sie erneut.
      Kenne die akt. Access Versionen nicht, aber achte beim Verknüpfen auf alles, was mit der Angabe der Primärschlüssel zu tun hat.
      Ggf. gibt es auch ein Problem mit exotischen Datentypen.
      War mir sicher die schon mehrfach aus Access rausgeschmissen und wieder verknüpft zu haben... Werde es morgen oder übermorgen noch mal probieren..

      Was meinst Du mit der Angabe des Primärschlüssels? Beim Verknüpfen kann ich doch keine weiteren Angaben machen außer die Tabellennamen die in Access als Verknüpfung erstellt werden sollen.
      Mit den Datentypen sollte es kein Problem geben es gibt auch einige Tabellen die nur ein Textfeld und den Primärschlüssel enthalten. Die Tabelle die funktioniert hat den selben Aufbau und noch weitere Felder..

      Gruß
      IngoF

      Comment


      • #4
        Muss es denn Access sein?
        Aus meinen Erfahrungen ist die Kombination Access + ODBC + MySQL so ziemlich das Problematischte was man sich vorstellen kann.

        Comment


        • #5
          Originally posted by IngoF View Post
          Was meinst Du mit der Angabe des Primärschlüssels? Beim Verknüpfen kann ich doch keine weiteren Angaben machen außer die Tabellennamen die in Access als Verknüpfung erstellt werden sollen.
          Also wie gesagt, ich habe länger kein Access mehr bedient, aber es war so (ältere Version), dass man ggF. den/die Primärschlüsselfelder angeben muss während man die Verknüpfung anlegt.
          Vielleicht kann Access das heute automatisch, oder glaubt es zumindest zu können, aber vielleicht gibt es da auch Treiberprobleme.
          Um mal auszukundschaften, wie Access so tickt, würde ich
          a) eine Tabelle ohne PK anlegen und verknüpfen - Wird nun ein PK Dialog gezeigt?
          b) Editierverhalten dieser Tabelle mit den anderen vergleichen
          c) einen View über diese Tabelle legen und diese "Tabelle", also den View verknüpfen, dann b)
          d) einen View über eine der nicht funktionierenden Tabellen legen, damit ebenfalls testen

          Ansonsten genau zu dem Thema Primärschlüssel bei Verknüpfung mal die Doku befragen.
          Außerdem die ODBC Treiber checken, sind sie aktuelle und sie sie für genau die mysql Version, die vorliegt?

          PS zum Doku Thema:
          Schon die ersten paar Zeilen machen deutlich, das geht bei mySQL offenbar nur mit Mühen, aber immerhin, es wurde was dazu aufgeschrieben. Viel Spaß damit!
          http://dev.mysql.com/doc/connector-o...ft-access.html
          Gruß, defo

          Comment


          • #6
            Mit was für einem Benutzer meldest Du Dich über odbc an MySQL an ? Eventuell verwendest Du einen, der nur diese eine Tabelle bearbeiten darf.

            Comment


            • #7
              Danke für die ganzen Antworten.

              Das Problem mit den nicht änderbaren Tabellen hatte ich mir bei der Fehlersuche selber eingebaut.
              Ich hatte in der Verknüpfung den falschen Usernamen und ACCESS selber hat das bearbeiten der Tabellen verboten.

              Also jetzt das richtige Ursprüngliche Problem.

              Ich kann an Tabellen keine Änderungen vornehmen. Ich bekomme immer die Meldung "Ein anderer User hat die Daten bereits verändert"
              Laut Google kommt das Problem wenn man keinen PrimaryKey und kein Timestamp Feld hat. Wenn diese Felder nicht exisitieren fragt ACCESS alle Felder (außer Memofelder) ab ob die sich geändert haben und Durch Rundungsfehler z.B bei Float sieht Access eine Änderung und denkt dass das ein anderer User war.

              Habe jetzt nochmal bei jeder Tabelle ein timestamp-Feld zusätzlich eingefügt.

              Demnach sollte automatisch erkannt werden dass ein PK und timestamp-Feld existiert und nur noch PK und timestamp vergleichen.

              ALso aus so was:
              UPDATE Kunden SET Name ='Mueller' WHERE Kundennummer='D10000' AND Name ='Müller' AND Ort ='Frankfurt' AND Anrede ='Herr' AND Plz='60437' AND Strasse ='Berner Str. 23' AND OffeneRechnungen=100.03" ...

              soll sowas werden:
              UPDATE Kunden SET Name ='Mueller' WHERE Kundennummer='D10000' AND Timestamp =xxx"

              Habe mal die SQL vom Connector mitloggen lassen.
              Es werden aber immer noch die erste viel zu lange und fehlerhafte Version verwendet.

              Beim Verknüpfen wurde doch in Access erstmals nach einem Primary-Key gefragt.
              Allerdings wurde automatisch das erste Feld umrandet. Dass dann auch der PK war.
              Habe inzwischen herausgefunden dass das noch keine Defaultmäßige Vorauswahl war und ich erst noch jedes Feld anklicken musste was dann auch blau geworden ist.

              Nachdem ich überall einen PK und Timestamp hatte wurde bei der ODBC-Verknüpfung auch nicht mehr nach dem PK gefragt.

              Hat jemand eine Idee warum nicht die PK und der Timestamp kontrolliert wird, sondern alle Felder?

              Gruß
              IngoF

              Comment


              • #8
                Originally posted by IngoF View Post
                Hat jemand eine Idee warum nicht die PK und der Timestamp kontrolliert wird, sondern alle Felder?
                Ich hab Access nicht programmiert, aber vermutlich sieht sich das System nicht im Stande, einen brauchbaren PK zu finden. Also wird alles (jedes Feld) als Schlüssel verwendet, und zwar mit den Folgen, die durch unsaubere Vergleiche entstehen (DS wird nicht wiedergefunden)

                Insgesamt finde ich Deinen letzten Beitrag etwas unübersichtlich. Was hast Du nun durchgeführt und was hat (etwas) geholfen, was geht noch nicht?

                Und: Wie gehst Du überhaupt vor? Nutzt Du Access Formulare, lässt Du irgendwas generieren, arbeitest Du nur auf Tabellenebene?
                Gruß, defo

                Comment


                • #9
                  Warum legst du nicht einen PK aus einem Autoincrement-Feld an?
                  Oder zumindestens aus Felden die zusammmen dann eindeutig sind.
                  Christian

                  Comment


                  • #10
                    So das erste große Problem ist gelöst. Alle Tabellen sind in Access direkt zu öffnen und zu editieren.

                    Hatte nachträglich das timestamp-Feld eingefügt. Die Tabellenfelder wurden dann mit "0000-00-00 00:00:00" angezeigt. Damit klappt es aber nicht.
                    Habe dann über SQL allen timestamp-Felder die den Wert "0000-00-00 00:00:00" hatten einfach "2015-09-10 10:11:12" zugewiesen. Jetzt klappt es in den Tabellen selber.



                    Wie mache ich das denn am besten mit Abfragen bei verknüpften ODBC-Tabellen?

                    Uber Abrage in Access kann ich über die Formulare zwar neue Datensätze einfügen. Kann sie dann aber nicht mehr verändern.

                    Über ein View in Access dass ich dann in Acces verknüpft habe kann ich keine neuen Datensätze einfügen:
                    Code:
                    ODBC Einfügen in einer verknüpften Tabelle `Standort Abfrage` fehlgeschlagen.
                    [MySQL]ODBC 5.1 Driver][mysqld-5.5.43.MariaDBThe target table Standort Abfrage of the INSERT is not insertable to (#1471)
                    Zuletzt editiert von IngoF; 17.09.2015, 13:36.

                    Comment


                    • #11
                      Zunächst würde ich verifizieren, ob Abfragen (oder Views, die als Tabelle verknüpft wurden oder wiederum als Abfrage angesprochen werden) grundsätzlich auf dem Weg editierbar sind. Und zwar mit einer simplen 1:1 Abfrage / View, die natürlich den Regeln folgt, die Du bis jetzt herausgefunden hast.
                      Wenn das geht, würde ich mich an Abfragen mit Joins machen. Was hier geht und was nicht, ist
                      1. Abhängig von den Fähigkeiten der DB
                      2. Von der Konstruktion des Selektstatements
                      3. Abhängig vom Verfahren des Werkzeugs

                      zu 1
                      kann ich nicht viel sagen, außer dass man das am besten per Doku klärt und ggF. per sql console abprüft. (Ein View, der sich per Insert / Update Command nicht "editieren" lässt, macht das erst Recht nicht via Access)
                      zu 2
                      da gibt es einige naheliegende Voraussetzungen für die Editierbarkeit, die man wahrscheinlich per Nachdenken herausfindet (oder per Doku). Ich nenne mal 2:
                      - Ein berechnetes Feld kann nicht editiert werden
                      - Eine Abfrage, die kein Schlüsselfeld mehr beinhaltet, kann nicht editiert werden.
                      zu 3
                      hier stören im wesentlichen Vorgehensweisen, die Punkt 2 verletzen.

                      Mal so nebenbei aus Neugier:
                      Warum quälst Du Dich mit sowas rum? Wer will sowas benutzen? (Geschweige programmieren, warten, ..?)
                      Gruß, defo

                      Comment


                      • #12
                        Ups.. hatte garnicht gesehen dass es schon eine zweite Seite mit Antworten gibt.. Gibt es hier keine Mailbenachrichtigung bei neuen Beiträgen?

                        Warum ich sowas mache?
                        Die Datenbank ist im Laufe von mehreren Jahren in Access entstanden vobei permanent immer neue Funktionen in VB programmiert worden sind.
                        (z.B. verschiedene XLS-Formulare teilweise ausfüllen und in Ordner verschieben. GPS-Koordinaten auf dem Bild anklicken und übernehmen, Entfernungen aus GPS berechnen. Export für verschiedene Navis, Android-Handy(Memento), Materailbestellung für die Standorte und noch weitere Sachen die mir Spontan nicht mehr einfallen.)

                        "Migriert" auf my SQL habe ich um die aktuellesten Datenstand über Web per Handy/Tablet anzeigen zu können. Mit GoogleDrive die Datenbank zu verteilen ist auch nicht sooo super gewesen.

                        Es macht jetzt keinen Sinn die Daten in mySQL und in Access gleichzeitig zu pflegen.


                        Ich habe jetzt z.B. zwei Tabellen mit jeweils einer Timestamp und eigener ID.
                        In einer Tabelle sind z.B. Daten zum Depot wie Anschrift, Name
                        In der anderen Tabelle sind die Depot-ID (andere Tabelle) verschiedene GPS-Koordinaten zu diesem Standort. Meistens sind es zwei bis drei verschiedene GSP-Koordinaten.

                        In Views kann ich zwar beide Tabellen "Verbinden" und anzeigen lassen.
                        Aber beim Ändern gibt es dann Das Problem mit dem timestamp.
                        Logisch würde es Sinn machen von beiden Timestamps das aktuellste Datum zu nehmen.
                        Habe aber noch kein Erfolg gehabt.
                        in mySQL-Views gibt es keinen PK.

                        Also werden wieder die kompletten Felder der Tabellen über das Netzt gejagt und nicht nur Timestamp und PK wie bei den Tabellen.
                        Das hat zur Folge dass die Tabellen sich nicht ändern lassen oder geänderte Textfelder nicht erkannt werden.


                        Habe jetzt mal zwei Testtabellen in mySQL erstellt und eine Abfrage in Acces erstellt. Seltsamerweise funktioniert es dort. Daten Eingeben und ändern.

                        Aber warum das mit der aktuellen Abfrage nicht geht ist mir unerklärlich.

                        Keine Ahnung wie ich herausbekommen soll warum die Abfrage nicht so funktioniert wie sie soll.

                        Als Workaround müsste ich dann wohl in VB die Tabellen einzeln einlesen und die Daten in jeder Tabelle einzeln aktualisieren und eben nicht mehr über die Abfrage gehen. Fragt sich nur was schneller und einfacher ist.

                        Oder kann man in der mySQL noch ein erweitertes Debugging einschalten?

                        Comment


                        • #13
                          Originally posted by IngoF View Post
                          Gibt es hier keine Mailbenachrichtigung bei neuen Beiträgen?
                          Weiß ich nicht.

                          Also Du möchtest Deinen ganzen Access Code nicht wegwerfen.
                          Aber offenbar ist die Kombination Access / mySQL nicht der natural fit..
                          Man könnte also Überlegungen anstellen, ob es eine Alternative zu mySQL gibt (immerhin bin ich mir sehr sicher, dass ein analoges Verfahren mit Oracle statt mySQL super funktioniert, zumindest vor ein paar Jahren)
                          Oder man schaut mal andersrum, wie sich VBA Module in Visual Basic .Net einbinden lassen.

                          Wenn Du unbedingt bei Access bleiben willst / musst, wäre natürlich generell ein MS Produkt die erste Wahl, also angefangen bei den kostenlosen MSDE bzw. den SQL Server Versionen (Express?).
                          Gruß, defo

                          Comment


                          • #14
                            Ja, so einfach ist das nicht wirklich. Allerdings will/muss ich bei mySQL bleiben.
                            Habe mySQL auf der NAS laufen und kann/will dort ganz sicher keine MS-Produkte installieren (Linux).

                            Also sind meine beiden Möglichkeiten:
                            (1) Das Problem an der Abfrage zu finden. Generell ist ja möglich. Mit der kleinen Testabelle/Abfrage hat es ja geklappt.
                            (2) Oder mit VB nur auf die einzelne Tabelle zugreifen um die Daten über VB zu ändern. Vermutlich ist das die schnellere Lösung.

                            Werde aber erst mal nur noch einen kleinen Versuch starten den Fehler an der Abfrage/Tabelle zu finden.

                            DANKE an alle für die Hilfe....

                            Comment


                            • #15
                              Originally posted by IngoF View Post
                              kann/will dort ganz sicher keine MS-Produkte installieren (Linux).
                              Wieso nicht, Du nutzt ja schließlich auch Access ?!

                              Es gibt ja für Linux nicht nur mySQL, spontan fällt mir noch ein Firebird und PostgreSQL. Vielleicht haben die eine bessere Connectivity unter Access.
                              Gruß, defo

                              Comment

                              Working...
                              X