现在有一个access,里面的各个表的表名要取出来,放入一个datatable中,但是sql语句:
SELECT Name FROM MsysObjects Where type = 1 and ParentID In (Select ID From MsysObjects Where Name = 'Tables') And Name Not Like 'Msys*')
报msysobjects没有权限,请教高手...

解决方案 »

  1.   

    两个办法
    1.给admin访问msysobjects的权限
    先在选项里显示系统对象和隐藏对象
    然后在工具--->安全--->用户与组权限--->设置对应的权限2。用GetOleDbSchemaTable(推荐)
    Public Function GetAccessTables(ByVal conn_access As OleDb.OleDbConnection) As ArrayList
            Dim s As New ArrayList        conn_access.Open()
            Dim dt As DataTable = conn_access.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
            conn_access.Close()        Dim t As String
            Dim dr As DataRow
            For Each dr In dt.Rows
                t = dr.Item("TABLE_NAME")
                If Not s.Contains(t) Then
                    s.Add(t)
                End If
            Next        Return s
        End Function
      

  2.   

    不好意思,刚刚的程序是vb.net的,附上c#的public ArrayList GetAccessTables(OleDb.OleDbConnection conn_access) 

     ArrayList s = new ArrayList(); 
     conn_access.Open(); 
     DataTable dt = conn_access.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]{null, null, null, "TABLE"}); 
     conn_access.Close(); 
     string t; 
     DataRow dr; 
     foreach (int dr in dt.Rows) { 
       t = dr.Item("TABLE_NAME"); 
       if (!(s.Contains(t))) { 
         s.Add(t); 
       } 
     } 
     return s; 
    }