none
MySQL letzte ID

    Allgemeine Diskussion

  • Ich ertselle in einer Mysql tabelle einen Datensatz in der dann das ID feld auto_increment ist

    nach der erstellung brauche ich diese ID um in meiner msAccess 2003 Datenbank einen eintrag in einer tabelle zu erzeugen

     

    wie komme ich an den ID wert ran?

    rs.Open "SELECT * FROM xt_media WHERE (((xt_media.file)='" & F1.Name & "') AND ((xt_media.class)='product'))", Cn, adOpenDynamic, adLockOptimistic

    ....
        rs.AddNew
        rs!file = F1.Name
        rs!Type = "images"
        rs!Class = "product"
        rs!download_status = "free"
        rs!Status = "true"
        rs!Owner = 1
        rs!max_dl_count = 0
        rs!max_dl_days = 0
        rs!total_downloads = 0
        rs.Update

    so hier öffne ich jetzt meine andere tabelle und brauche von de´m soeben erzeugtem datensatz die ID

    Donnerstag, 26. Mai 2011 09:56

Alle Antworten

  • hi,

         rs.AddNew
         rs.Update
    so hier öffne ich jetzt meine andere tabelle und brauche von de´m soeben erzeugtem datensatz die ID

    Ein MsgBox rs![ID] an dieser Stelle tuts nicht?


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Donnerstag, 26. Mai 2011 09:59
    Moderator
  • Leider  nein

    das war ja auch meine hoffnung - weder vor noch nach dem rs.Update

     

     

    Donnerstag, 26. Mai 2011 10:21
  • Ich habe mir jetzt ein

    rsDrei.Open "SELECT Max(xt_media.id) AS ID FROM xt_media;", Cn, adOpenDynamic, adLockOptimistic

    dazwischen gebaut - aber ob man das sauber nenen kann weiss ich auch nicht

     

    aber es geht so

    Donnerstag, 26. Mai 2011 10:36
  • hi,

    dazwischen gebaut - aber ob man das sauber nenen kann weiss ich auch nicht

    Nein, ist es nicht. Es kann in genau dem Zeitfenster bis dein Recordset da ist, ja ein anderer was eingefügt haben.

    Was anderes, öffne dein ursprüngliches Recordset mit der Option dbSeeChanges. Ggf. ist das im Treiber implementiert.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Donnerstag, 26. Mai 2011 10:44
    Moderator
  • dbSeeChanges kennt der odbc treiber wohl nicht - ist das ein ein CursorType oder LockType ?

     

    oder ein anderer parameter? ich konnte da so leider nichts finden was es ist

    Donnerstag, 26. Mai 2011 11:36
  • http://msdn.microsoft.com/en-us/library/aa175027%28v=office.11%29.aspx


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Donnerstag, 26. Mai 2011 11:46
    Moderator
  • Hallo!

    MCDPone schrieb:

    wie komme ich an den ID wert ran?

    Die ID aus einem aktiven DBMS steht erst nach dem update zur
    Verfügung.
    Allerdings ist nach dem Update der Datensatzzeiger nicht mehr auf dem
    zuletzt eingefügten DS.
    =>

     rs.Update
     rs.Bookmark = rs.LastModified
     ID = rs!ID
     ...

    Ich bin mir zwar nicht zu 100% sicher, aber ich glaube, das sollte
    auch beim MySQL funktionieren.

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Donnerstag, 26. Mai 2011 14:09
  • LastModified - kennt er nicht - denke mal das das am odbc treiber vom mysql liegt

     

    auch denke ich das es dann ähnlich sein müsste wie mit meiner variante

    rsDrei.Open "SELECT Max(xt_media.id) AS ID FROM xt_media;", Cn, adOpenDynamic, adLockOptimistic

    das ein anderer user ja einen datensatz angefügt haben könnte

    ich werde mir wohl eine hilfs ID in die tabelle schreiben und diese dann wieder abfragen und damit die wirkliche id auslesen

     

    aber danke

    Donnerstag, 26. Mai 2011 15:30
  • Hallo!

    MCDPone schrieb:

    LastModified - kennt er nicht - denke mal das das am odbc treiber vom mysql liegt

    Hast du schon alle ODBC-Einstellungen durch? Ich bin mir nicht mehr sicher, aber ich glaube mich zu erinnern, dass
    man etwas einstellen konnte um das Cursor-verhalten zu verbessern.
    Ob das für LastModified hilft, weiß ich aber auch nicht mehr. :-(

    Etwas anderes:
    Muss es unbedingt ein DAO- bzw. ADODB-Recordset auf die verknüpfte Tabelle sein?
    Vielleicht klappt es mit einem ADODB-Recordset mit direkter Verbindung zum MySQL-Server.
    Falls es nicht direkt im Recordset klappt, könntest du versuchen über
    die identische Connection (müsste dann eigentlich die gleiche Session
    sein) mysql_insert_id() o. ä. abzurufen.

     

    BTW: das mit Update und LastModified war übrigens nur für DAO. Bei ADODB sollte das nicht notwendig sein.

     
    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen



    Samstag, 28. Mai 2011 15:55
  • MCDPone wrote:

    rsDrei.Open "SELECT Max(xt_media.id) AS ID FROM xt_media;", Cn,
    adOpenDynamic, adLockOptimistic

    dazwischen gebaut - aber ob man das sauber nenen kann weiss ich auch nicht

    Ganz sauber ist das in einer Mehrbenutzerumgebung nicht, aber sollte hinreichend sein.

    Hast Du mal folgendes versucht (funtioniert mit MySQL allenfalls nicht):

    "SELECT @Identity"

    Alternativ: (das sollte eigentlich funktionieren, allerdings ist das DAO und nicht ADO)
    Versuche gleich nach dem Insert zum zuletzt geänderten Datensatz zu springen und dann von diesem die ID zu lesen.
    rs.bookmark = rs.lastmodified
    debugpring rs!ID

    HTH
    Henry

    Montag, 30. Mai 2011 04:04
  • Hallo Josef

    Josef Pötzl [MVP] wrote:

    LastModified - kennt er nicht - denke mal das das am odbc treiber vom
    mysql liegt

    Hast du schon alle ODBC-Einstellungen durch? Ich bin mir nicht mehr

    Er benutzt ADO, LastModified ist DAO

    Gruss
    Henry

    Montag, 30. Mai 2011 04:11
  • Hallo!

    Henry Habermacher schrieb:

    Er benutzt ADO, LastModified ist DAO

    Stimmt, das überah ich - zumindest bis zur Korrektur des letzten
    Beitrags von mir. ;-)

    Möglicherweise wird zwar ADODB verwendet aber trotzdem die verknüpfte
    Tabelle verwendet.
    Ich würde es einmal mit einer ADODB-Verbindung direkt auf den Server
    probieren. Das darf dann auch ruhig der ODBC-Treiber sein, den man
    über MSDASQL nutzt.

    Ich suchte nun einmal, nach einer ähnlichen Diskussion:
    http://www.eggheadcafe.com/microsoft/Access/35846095/letzte-id--mysql-und-a2007.aspx

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Montag, 30. Mai 2011 07:42
  • Danke für eure ansätze - ich habe es jetzt aber so gelöst das ich mir eben eine eigene ID erzeuge beim schreiben des datensatzes und nach dem schreiben mir diese ID wieder suche und dann auch die eigentliche ID habe und damit weiterarbeiten kann

    die mehrbenutzerumgebung kommt bei mir nicht so zum tragen aber ich denke es ist einfach die sauberste lösung

     

    Michael

    Dienstag, 31. Mai 2011 06:15