【问题标题】:Accessing the Schema of an Access 2013 database访问 Access 2013 数据库的架构
【发布时间】:2013-03-19 16:07:36
【问题描述】:

如果我尝试读取 Access 2013 数据库的架构,我会收到以下错误:

no read permission on 'MSysRelationships'

现在帮助告诉我

User-level security features are not available in Access apps, web databases, 
or databases that use one of the new file formats (.accdb, .accde, .accdc, .accdr).

=> 如何读取该数据库的架构?

编辑:

这是我在 Linqpad 中的代码:

var stringBuilder = new OleDbConnectionStringBuilder();
stringBuilder.Provider = "Microsoft.ACE.OLEDB.12.0";
stringBuilder.DataSource = @"C:\Recommendations.accdb";

using (var connection = new OleDbConnection(stringBuilder.ToString().Dump()))
{
    connection.Open();
    var schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, null, "TABLE"});
    var sheetName = schemaTable.AsEnumerable().Select(row => row.Field<string>("TABLE_NAME")).First();
    schemaTable.Dump();

    string  namesQuery = "SELECT DISTINCT szRelationship, szReferencedObject, szObject FROM MSysRelationships";
    string  namesQuery2 =  string.Format("select Name, Age from [{0}]", "Users");

    using (var command = new OleDbDataAdapter(namesQuery, connection))
    {
        var dataSet = new DataSet();
        command.Fill(dataSet, sheetName);
        dataSet.Dump();
    }
    connection.Close();
}

【问题讨论】:

  • 您使用什么机制来尝试“读取架构”? FWIW,我刚刚在 Access_2013 查询的 SQL 窗格中输入了SELECT * FROM MSysRelationships,它运行良好。
  • 那些新界面真的让我迷失了。我什至看不到 SQL 窗格的位置.....
  • 一旦我将隐藏表设置为显示(文件/选项/当前数据库/导航选项),我就可以通过 Gui 访问 MSysResources

标签: database ms-access ms-office oledb


【解决方案1】:

从对先前类似问题here 的回答来看,我怀疑您根本无法通过 OleDb 连接直接读取 Access 中的系统表。不过,您或许可以通过OleDbConnection.GetSchema 方法获取您需要的信息(详情here)。

【讨论】:

    【解决方案2】:

    在连接字符串中,设置“用户 ID=Admin”。

    用Access打开数据库,Ctrl-G得到“立即”窗口,然后执行以下命令:

    CurrentProject.Connection.Execute "GRANT SELECT ON MSysRelationships TO Admin;"
    

    这将授予“用户 ID”从该表中读取 (SELECT) 的权限。 这同样适用于其他系统表,例如“MSysObjects”。

    【讨论】:

    • 这可以在 R 中使用 DBI/ODBC 包查询系统表
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2011-02-23
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多