2016-07-07 5 views
0

Ich versuche, den Vorgang des Hinzufügens einer verknüpften Tabelle in MS Access zu automatisieren.Auswählen einer eindeutigen Datensatzkennung dynamisch mit vba?

ich habe es bekommen, wie das Hinzufügen der verknüpfte Tabelle in so weit zu arbeiten,

' RUN ME 
Sub testItOut() 

    Dim loginInfo As New AuthInfoz 

    loginInfo.workgroup = "E:\xxxdatas\SEC\Secured.mdw" 
    loginInfo.username = "XXXXX" 
    loginInfo.password = "XXXX" 
    loginInfo.dbs = "E:\xxxdatas\username\Report.mdb" 

    Call DeleteRelinkToViewAndRename(loginInfo, "sometable", "ServiceProvision_Schema.hrpersnl") 
End Sub 

' Deletes the old table and relinks it 
' to the new schema 

Sub DeleteRelinkToViewAndRename(loginInfo As AuthInfoz, tblName, tblTarget) 
    Dim objAccess As Access.application 

    Dim view_ucp_consumers2_qf As DAO.QueryDef 

    ' Open the thing manually first... 
    'Shell """C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE""" & " " & loginInfo.dbs 
    Set objAccess = GetObject(loginInfo.dbs).application 

    objAccess.CurrentDb 

    ' Delete the Linked Table...THIS WORKS UNCOMMENT LATER... 
    objAccess.DoCmd.DeleteObject acTable, tblName 

    ' Relink the old table to the new schema 
    ' THIS IS WHERE THE DIALOG APPEARS 
    objAccess.DoCmd.TransferDatabase _ 
     acLink, _ 
     "ODBC Database", _ 
     "ODBC;DSN=MEDSN;Database=MEDATABASE;Trusted_Connection=Yes", _ 
     acTable, _ 
     tblTarget, _ 
     tblName 
    ' Close out... 
    objAccess.Quit acQuitSaveAll 

End Sub 

... aber dann ein Dialogfeld erscheint, einen Primärschlüssel anfordert oder wie sie nennt es einen Eindeutigen Datensatzbezeichner . Gibt es das überhaupt?

+1

Hat 'tblTarget' ein PK und Access ignoriert es? oder gibt es überhaupt keinen PK? – Brad

+0

Nein wirklich alt db. – leeand00

+0

'Mid $ (CreateObject (" Scriptlet.TypeLib "). GUID, 2, 36)' gibt als GUID zurück. – Jeeped

Antwort

2

Okay, die Antwort auf ein altes MS-Access-Forum gefunden; mit dieser Methode nur Links in der Tabelle nach oben, keine Fragen gestellt ... und keine Primärschlüssel ...

' Deletes the old table and relinks it 
' to the new schema 
Sub DeleteRelinkToViewAndRename(loginInfo As AuthInfoz, tblName, tblTarget) 

    Dim objAccess As Access.application 
    Dim db As DAO.database 

    Dim tdf As DAO.TableDef 

    ' Open the thing manually first... 
    'Shell """C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE""" & " " & loginInfo.dbs 
    Set objAccess = GetObject(loginInfo.dbs).application 
    Set db = objAccess.CurrentDb 

    ' Delete the Linked Table...THIS WORKS UNCOMMENT LATER... 
    objAccess.DoCmd.DeleteObject acTable, tblName 

    ' Relink the old table to the new schema 
    Set tdf = db.CreateTableDef(tblName, 0, tblTarget, "ODBC;DSN=MEDSN;Database=MEDATABASE;Trusted_Connection=Yes") 

    ' Add the new table def 
    db.TableDefs.Append tdf 

End Sub 

Sie die primary key programmatically as well einstellen.

+0

Der Link funktioniert, aber jetzt, wo kein PK vorhanden ist, kannst du etwas mit dem Tisch machen? Aktualisieren/löschen/einfügen? – Brad

+0

@Brad Es macht nur Lesevorgänge. – leeand00

+0

Gotcha, hört sich gut an – Brad

Verwandte Themen