使用vba动态选择唯一记录标识符?

Posted

技术标签:

【中文标题】使用vba动态选择唯一记录标识符?【英文标题】:Selecting a Unique Record Identifier dynamically with vba? 【发布时间】:2016-07-07 20:33:42 【问题描述】:

我正在尝试自动化在 MS Access 中添加链接表的过程。

就添加链接表而言,我已经让它工作了,

' 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

...但随后会弹出一个对话框,请求主键或称为唯一记录标识符。反正有这个吗?

【问题讨论】:

tblTarget 是否有 PK 并且 Access 会忽略它?还是根本没有PK? 不是很老的数据库。 Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36) 作为 GUID 返回。 @Jeeped 该 GUID 指向什么? 这是一个新的 GUID,可用作唯一标识符。它没有指向任何东西。 【参考方案1】:

好的,在旧的 MS-Access 论坛上找到了答案;使用这种方法只是将表格链接起来,不问任何问题......也没有主键......

' 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

您可以设置primary key programmatically as well。

【讨论】:

链接有效,但现在没有PK,您可以对桌子做任何事情吗?更新/删除/插入?

以上是关于使用vba动态选择唯一记录标识符?的主要内容,如果未能解决你的问题,请参考以下文章

SQL:如何选择每个唯一标识符的值最低的记录

sql2005中设置字段属性时,如何设标识列(自增1)和必须唯一

能够唯一标识某一控件的属性的是啥

MAUI之Android记录设备号+动态授权

为 hive 表中新添加的记录更新唯一 id 列

您可以使用 NSPredicate 指定“从...中选择唯一名称”吗?