连接Access库后,想用SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>'~') AND (Left$([Name],4) <> 'Msys') AND (MSysObjects.Type)=1 ORDER BY MSysObjects.Name语句查找库中所有表名,但提示没有权限,要如何解决

解决方案 »

  1.   

    MSysObjects这是系统表,不能这么直接读取!要在Access中,工具 -> 安全 -> 用户与组的权限,在对象名称中选定 MSysObjects ,然后权限中设置其权限。其实要编程实现返回Access库中的所有表名,要以用GetOleDbSchemaTable方法,MSDN中有示例.
    //返回数据库中的表的列表
    public DataTable GetTables(OleDbConnection conn)
    {
        conn.Open();
        DataTable SchemaTable=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
    new object[] {null,null,null,"TABLE"});
        conn.Close();
        return SchemaTable;
    }...OleDbConnection Conn=new OleDbConnection();
    Conn.ConnectionString=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\AccessFile.mdb";DataTable myTable=GetTables(Conn);  //调用GetTables方法返回一个DataTablefor(int i=1;i<=myTable.Rows.Count;i++)
    {
        MessageBox.Show(myTable.Rows[i-1]["Table_Name"].ToString()); 
    }