none
Access 2003 zu MSSQL (2008R2) Autowert VBA

    Frage

  • Ich bin dabei meine mdb BE in SQL zu überführen(Migriren)
    Ist ja schon klar das nicht alles so läuft

    Problem: Ich erstelle einen Datensatz die Tabelle hat ein Autowert danach öffne ich ein Formular mit dem Autowert als Filter - in Access habe ich den AUtowert schon bei der erstellung des datensatzes in mssql wohl erst wenn der datensatz geschrieben wird

    Meine frage: Wie komme ich jetzt an den richtigen autowert vom sql server

    hier ein auszug

    AK.Update
    Intern = AK!Intern
    AK.Close
    
    Set AK = Nothing
    
    DoCmd.OpenForm "frmAU", , , "Intern=" & Intern
    

    wobei Intern der Autowert ist - vor dem AK.Update kenne ich ihn nicht und nach dem AK.Update sitzt der Curser nicht mehr auf dem Datensatz und wenn ich nach dem letzten wert suchen würde könnte ja bereits ein anderer etwas geschrieben haben

    Mittwoch, 21. Dezember 2011 09:49

Antworten

  • Hallo MCDPone
     
    Einer der Unterschiede zwischen Access BE und SQL Server BE ist, dass der Autowert in Access beim SQL Server erst bekannt wird, wenn der Datensatz auch wirklich vom SQL Server angelegt worden ist.
    In Access wird der sofort vergeben.
    Du musst Access also dazu zwingen den zuletzt angelegten Datensatz neu einzulesen.
    IIRC geht das über:
    rs.bookmark = rs.LastModified
    Nun solltst Du den vergebenen Wert auslesen können.
    In Deinem Fall also:
     
    AK.Update
    AK.Bookmark = AK.LastModified
    intern = AK!Intern
    AK.Close
     
    HTH
    Henry
     

    Problem: Ich erstelle einen Datensatz die Tabelle hat ein Autowert danach öffne ich ein Formular mit dem Autowert als Filter - in Access habe ich den AUtowert schon bei der erstellung des datensatzes in mssql wohl erst wenn der datensatz geschrieben wird

    Meine frage: Wie komme ich jetzt an den richtigen autowert vom sql server

    hier ein auszug

    AK.Update
    Intern = AK!Intern
    AK.Close
    
    Set AK = Nothing
    
    DoCmd.OpenForm "frmAU", , , "Intern=" & Intern
    

    wobei Intern der Autowert ist - vor dem AK.Update kenne ich ihn nicht und nach dem AK.Update sitzt der Curser nicht mehr auf dem Datensatz und wenn ich nach dem letzten wert suchen würde könnte ja bereits ein anderer etwas geschrieben haben

    • Als Antwort markiert MCDPone Donnerstag, 22. Dezember 2011 06:50
    Mittwoch, 21. Dezember 2011 10:26

Alle Antworten

  • Hallo MCDPone
     
    Einer der Unterschiede zwischen Access BE und SQL Server BE ist, dass der Autowert in Access beim SQL Server erst bekannt wird, wenn der Datensatz auch wirklich vom SQL Server angelegt worden ist.
    In Access wird der sofort vergeben.
    Du musst Access also dazu zwingen den zuletzt angelegten Datensatz neu einzulesen.
    IIRC geht das über:
    rs.bookmark = rs.LastModified
    Nun solltst Du den vergebenen Wert auslesen können.
    In Deinem Fall also:
     
    AK.Update
    AK.Bookmark = AK.LastModified
    intern = AK!Intern
    AK.Close
     
    HTH
    Henry
     

    Problem: Ich erstelle einen Datensatz die Tabelle hat ein Autowert danach öffne ich ein Formular mit dem Autowert als Filter - in Access habe ich den AUtowert schon bei der erstellung des datensatzes in mssql wohl erst wenn der datensatz geschrieben wird

    Meine frage: Wie komme ich jetzt an den richtigen autowert vom sql server

    hier ein auszug

    AK.Update
    Intern = AK!Intern
    AK.Close
    
    Set AK = Nothing
    
    DoCmd.OpenForm "frmAU", , , "Intern=" & Intern
    

    wobei Intern der Autowert ist - vor dem AK.Update kenne ich ihn nicht und nach dem AK.Update sitzt der Curser nicht mehr auf dem Datensatz und wenn ich nach dem letzten wert suchen würde könnte ja bereits ein anderer etwas geschrieben haben

    • Als Antwort markiert MCDPone Donnerstag, 22. Dezember 2011 06:50
    Mittwoch, 21. Dezember 2011 10:26
  • Danke Henry - genau so geht es

    Nur wie hoch ist da das risiko in einer mehrbenutzerumgebung das sich hier datensätze überschneiden?

    Donnerstag, 22. Dezember 2011 06:51
  • Hallo MCDPone

    Lies mal den Remark: (c) Microsoft Access VBA OH

    You can use the LastModified property to move to the most recently added or updated record. Use the LastModified property with table- and dynaset-type Recordset objects. A record must be added or modified in the Recordset object itself in order for the LastModified property to have a value.

    Das Risiko ist also 0, da Du nur den Record als LastModified zurückbekommst, der in Deinem Recordset Objekt geändert/hinzugefügt wurde und das kann kein anderer der Benutzer, sondern nur die lokal laufende Instanz. Ist also Mehrbenutzer tauglich.

    Gruss
    Henry

    Donnerstag, 22. Dezember 2011 08:35