我正在寻找使用 vb.net 删除使用 Access 2007 DB 中的代码创建的关系。数据库可能已从旧级别升级。
所以这里是做的,我用ADO连接字符串打开数据库,数据库是加密和密码保护的,我也在模式=12打开,以获得独占权限。这一切都有效。我将 MSysObjects 和 MSysRelationships 的 SELECT、DELETE 和 ALTER 权限授予管理员用户。
问题是所使用的关系是一个 GUID,它仅作为文本存储在这些系统表中,但不能从建立关系的表中删除,即。
ALTER TABLE [MyTable] DROP CONSTRAINT '{D86827C0-some-GUID-6A6449F1FB07}';
或者
ALTER TABLE [MyTable2] DROP CONSTRAINT '{D86827C0-some-GUID-6A6449F1FB07}';
这失败了,因为在表上找不到 GUID,我已经尝试了关系两边的表。我能够获得 szRelationship 值,这就是我将其应用于上述 ALTER 查询的方式,但如前所述,在任一表上都找不到它作为关系名称。这让我相信数据库可能是从旧的 Access 迁移来的。系统对象表显示了这种关系,所以我知道它存在并且它出现在关系图中。也可以在那里手动删除。不过,我有数百个需要此编辑的数据库。
所以我的替代方法是直接从两个系统表中删除。
DELETE [MSysObjects], [MSysRelationships] FROM [MSysObjects]
INNER JOIN [MSysRelationships]
WHERE [MSysObjects].[Name] = [MSysRelationships].[szRelationship]
AND [MSysObjects].[Name] = '" & relationName & "';
但这会在 From 子句上返回语法错误。我已经搜索了高和低的替代语句来尝试和调试这个语句,但没有运气......这个链接提供了一些示例和语法的起点。