Lấy danh sách table trong một file Access bất kỳ (2 người xem)

  • Thread starter Thread starter vba_gpe
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

vba_gpe

Thành viên thường trực
Tham gia
15/12/10
Bài viết
296
Được thích
44
Nghề nghiệp
Thất nghiệp
Kính gửi GPE
Có cách nào dùng VB để lấy được "danh sách tên" của các table có trong một file access bất kỳ mà không mở file đó không? (Gần tương tự như việc lấy danh sách tên các sheet có trong một file Excel bất kỳ).
Em có tham khảo được một bài viết trên "stackoverflow.com" tuy nhiên chưa hiểu. Trên đây nhờ mọi người góp ý:
PHP:
Sub ListAccessTables2(strDBPath)
   Dim cnnDB As ADODB.Connection
   Dim rstList As ADODB.Recordset

   Set cnnDB = New ADODB.Connection

   ' Open the connection.
   With cnnDB
      .Provider = "Microsoft.Jet.OLEDB.4.0"
      .Open strDBPath
   End With

   ' Open the tables schema rowset.
   Set rstList = cnnDB.OpenSchema(adSchemaTables)

   ' Loop through the results and print the
   ' names and types in the Immediate pane.
   With rstList
      Do While Not .EOF
         If .Fields("TABLE_TYPE") <> "VIEW" Then
            Debug.Print .Fields("TABLE_NAME") & vbTab & _
               .Fields("TABLE_TYPE")
         End If
         .MoveNext
      Loop
   End With
   cnnDB.Close
   Set cnnDB = Nothing
End Sub
Cảm ơn mọi người
Mong nhận được hồi âm

Thân
 
Lần chỉnh sửa cuối:
Làm được, thậm chí ngay trong Excel này. Minh giới thiệu 1 cách:
Bạn thử làm như sau:
Bạn mở 1 Module, trong Reference bạn tham chiếu (chọn) : Microsoft DAO 3.6 Object Library
Ban nhập đoạn Code sau:

Mã:
Sub ListTable()
Dim Ds, i, DB As Database
Set DB = OpenDatabase(ThisWorkbook.Path & "\Vidu.mdb")
For i = 0 To DB.TableDefs.Count - 1
If Left(DB.TableDefs(i).Name, 4) <> "MSys" Then
Ds = Ds & " Table  :   " & DB.TableDefs(i).Name & Chr(10)
End If
Next
MsgBox Ds
End Sub

Vậy là bạn đã có danh sách các Tables trong file ví dụ rồi, bạn tham khảo cho công việc của mình.
Bạn lưu ý đoạn Code sau nhằm bỏ không kê các Table ẩn của Hệ thống : If Left(DB.TableDefs(i).Name, 4) <> "MSys" Then
Ví dụ mình gửi kèm bạn tải về và bung nén ra ổ đĩa, như vây code mới xác định được vị trí của file
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn anh Sealand
Em làm được rồi.
Tiện đây xin hỏi anh về vấn đề này nữa:
PHP:
' Fill the given combobox with all the tables and query names '
' starting with RP_ found in the given database. '
Public Sub FillWithAccessEntities(PathToAccessDB As String, combox As ComboBox)
    Dim db As DAO.Database
    Dim td As DAO.TableDef
    Dim qd As DAO.QueryDef
    combox.Clear
    ' Open the db in exclusive and read-only mode '
    Set db = DBEngine.OpenDatabase(PathToAccessDB, True, True)
    For Each td In db.TableDefs
        If Left(td.Name, 3) = "Msy" Then
            combox.AddItem td.Name
        End If
    Next
    For Each qd In db.QueryDefs
        If Left(qd.Name, 3) = "Msy" Then
            combox.AddItem qd.Name
        End If
    Next
    db.Close
    Set db = Nothing
End Sub
Trong đoạn code trên xin nhờ anh giải thích giúp em 3 ý nghĩa của 3 biến: db,qd,td (bằng tiếng Việt) vì em không rành về tiếng Anh trong Access nhiều lắm nên không biết người ta khai báo 3 biến trên nghĩa ra sao cả:
PHP:
    Dim db As DAO.Database
    Dim td As DAO.TableDef
    Dim qd As DAO.QueryDef

Thân.
 
Lần chỉnh sửa cuối:
Ba biến đó có ý nghĩa như sau:

1/ Dim db As DAO.Database
D
ây là biến gán cho 1 Database (Có thể hiểu là 1 file *.mdb).
Trong Code của mình có áp dụng để gán cho file Vidu.mdb

2/Dim td As DAO.TableDef
Đây là biến để gán cho 1 Table trong File

3/Dim qd As DAO.QueryDef
Đây là biến để gán cho 1 Query

Bạn có thể tham khảo cuốn Hướng dẫn lập trình MS ACCESS của Nguyễn Văn Tâm rất chi tiết vấn đề này.


 
Bạn có thể tham khảo cuốn Hướng dẫn lập trình MS ACCESS của Nguyễn Văn Tâm rất chi tiết vấn đề này.
Cảm ơn anh sealand
Hiện tại em tìm trong diển đàn mình chỉ biết được bộ hướng dẫn lập trình VB trong Access do tác giả Phạm Thị Kim Ngoan biên tập.
Xin hỏi anh bộ sách anh nêu trên là ở dạng file mềm hay là phải vào bookstore vậy.

Hihi. Nếu được xin nhờ anh Sealand cung cấp giúp nhé.
Cảm ơn anh nhiều.

Thân.
 
Đây là sách có rất nhiều bán ở các hiệu sách hay các cửa hàng sách cũ.
(Hì, mình thường kiếm sách ở hiệu sách cũ rất hiệu quả đó nha)

Hoặc bạn vào đây tham khảo mệt nghỉ luôn
 
Lần chỉnh sửa cuối:
Làm được, thậm chí ngay trong Excel này. Minh giới thiệu 1 cách:
Bạn thử làm như sau:
Bạn mở 1 Module, trong Reference bạn tham chiếu (chọn) : Microsoft DAO 3.6 Object Library
Ban nhập đoạn Code sau:

Mã:
Sub ListTable()
Dim Ds, i, DB As Database
Set DB = OpenDatabase(ThisWorkbook.Path & "\Vidu.mdb")
For i = 0 To DB.TableDefs.Count - 1
If Left(DB.TableDefs(i).Name, 4) <> "MSys" Then
Ds = Ds & " Table  :   " & DB.TableDefs(i).Name & Chr(10)
End If
Next
MsgBox Ds
End Sub

Vậy là bạn đã có danh sách các Tables trong file ví dụ rồi, bạn tham khảo cho công việc của mình.
Bạn lưu ý đoạn Code sau nhằm bỏ không kê các Table ẩn của Hệ thống : If Left(DB.TableDefs(i).Name, 4) <> "MSys" Then
Ví dụ mình gửi kèm bạn tải về và bung nén ra ổ đĩa, như vây code mới xác định được vị trí của file

Nhân tiện đây xin đố vui với các bạn là làm sao để lấy tên table mà không cần dùng vòng lặp ?
 
Danh sách này nằm trong MSysObject gồm tất tần tật list table, query....query table này thì ko cần vòng lặp !! :-)
 
Web KT

Bài viết mới nhất

Back
Top Bottom