使用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动态选择唯一记录标识符?的主要内容,如果未能解决你的问题,请参考以下文章