Cách lấy thông tin (Tên bảng, trường) của tất cả các bảng trong Access vào Excel

Liên hệ QC

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia
18/3/08
Bài viết
8,281
Được thích
15,780
Giới tính
Nam
Nghề nghiệp
Làm ruộng.
Chào các anh chị GPE thân mến !

Cho em hỏi là làm cách nào để lấy thông tin (Tên bảng, trường) của tất cả các bảng trong 1 file Access vào Excel.

Em xin cám ơn trước
 

File đính kèm

  • Information.xls
    15 KB · Đọc: 65
Chào các anh chị GPE thân mến !

Cho em hỏi là làm cách nào để lấy thông tin (Tên bảng, trường) của tất cả các bảng trong 1 file Access vào Excel.

Em xin cám ơn trước

Bạn chép đoạn code sau vào một modul của Excel rồi chạy nó. Chú ý thay tên file cho đúng đường dẫn

PHP:
Sub LayTen()
    Dim DB As Database
    Dim i, j, n, m, k As Byte   
    Dim TenFile As String
    TenFile = ThisWorkbook.Path & "\GPE.mdb"
    Set DB = DBEngine.Workspaces(0).OpenDatabase(TenFile)
    n = DB.TableDefs.Count
    k = 1
    For i = 0 To n - 1
        If Left(DB.TableDefs(i).Name, 4) <> "MSys" Then
            Sheet1.Cells(1, k) = DB.TableDefs(i).Name
            m = DB.TableDefs(i).Fields.Count
            For j = 0 To m - 1
                Sheet1.Cells(j + 2, k) = DB.TableDefs(i).Fields(j).Name
            Next
            k = k + 1
        End If
    Next
    MsgBox "Xong"
    Set DB = Nothing
End Sub


Bạn nhớ chọn thư viện DAO 3.6 nhé
Thân
 
Lần chỉnh sửa cuối:
Bạn chép đoạn code sau vào một modul của Excel rồi chạy nó. Chú ý thay tên file cho đúng đường dẫn

PHP:
Sub LayTen()
    Dim DB As Database
    Dim i, j, n, m, k As Byte   
    Dim TenFile As String
    TenFile = ThisWorkbook.Path & "\GPE.mdb"
    Set DB = DBEngine.Workspaces(0).OpenDatabase(TenFile)
    n = DB.TableDefs.Count
    k = 1
    For i = 0 To n - 1
        If Left(DB.TableDefs(i).Name, 4) <> "MSys" Then
            Sheet1.Cells(1, k) = DB.TableDefs(i).Name
            m = DB.TableDefs(i).Fields.Count
            For j = 0 To m - 1
                Sheet1.Cells(j + 2, k) = DB.TableDefs(i).Fields(j).Name
            Next
            k = k + 1
        End If
    Next
    MsgBox "Xong"
    Set DB = Nothing
End Sub


Bạn nhớ chọn thư viện DAO 3.6 nhé
Thân
Rất chính xác anh à, bây giờ cho em hỏi thêm là làm sao mình có thể nhận biết được trường nào là khoá chính vậy anh (Ví dụ in đậm những trường là khoá chính)
Cám ơn anh
 
Rất chính xác anh à, bây giờ cho em hỏi thêm là làm sao mình có thể nhận biết được trường nào là khoá chính vậy anh (Ví dụ in đậm những trường là khoá chính)
Cám ơn anh

Chà!!! Cái này khó xơi à nghen. Để từ từ ngâm cứu. Trong Access thì làm ngon ơ (sử dụng DAO và ADOX) nhưng trong Excel chưa biết kết nối làm sao
Chờ nhé
Thân
 
Rất chính xác anh à, bây giờ cho em hỏi thêm là làm sao mình có thể nhận biết được trường nào là khoá chính vậy anh (Ví dụ in đậm những trường là khoá chính)
Cám ơn anh


Sau khi nghiên cứu, tạm thời đưa ra phương án này, domfootwear nghiên cứu áp dụng và có thể rút gọn được không nhé (vì thời gian hạn hẹp quá)

PHP:
Dim DB As Database
Dim i, n, m, k, j, x As Byte
Dim tdf As TableDef
Dim strField As String
Dim ind As Index
Dim fld As Field
Dim TenFile As String

 
Sub LayTen()
    TenFile = ThisWorkbook.Path & "\GPE.mdb"
    Set DB = DBEngine.Workspaces(0).OpenDatabase(TenFile)
    n = DB.TableDefs.Count
    k = 1
    For i = 0 To n - 1
        If Left(DB.TableDefs(i).Name, 4) <> "MSys" Then
            Sheet1.Cells(1, k) = DB.TableDefs(i).Name
            m = DB.TableDefs(i).Fields.Count
            For j = 0 To m - 1
                Sheet1.Cells(j + 2, k) = DB.TableDefs(i).Fields(j).Name
            Next
            k = k + 1
        End If
    Next
    Call LoaiTruong
    MsgBox "Xong"
    Set DB = Nothing
End Sub
 
 
Sub LoaiTruong()
    TenFile = ThisWorkbook.Path & "\GPE.mdb"
    Set DB = DBEngine.Workspaces(0).OpenDatabase(TenFile)
    n = DB.TableDefs.Count
    k = 1
    For i = 0 To n - 1
        If Left(DB.TableDefs(i).Name, 4) = "MSys" Then
            i = i + 1
        Else
            Set tdf = DB.TableDefs(i)
            m = tdf.Fields.Count
            For j = 0 To m - 1
                strField = tdf.Fields(j).Name
                For Each ind In tdf.Indexes
                    For Each fld In ind.Fields
                        If fld.Name = strField Then
                            If ind.Primary Then
                                For x = 2 To m + 1
                                    If strField = Sheet1.Cells(x, k) Then Sheet1.Cells(x, k).Font.Bold = True
                                Next
                            End If
                        End If
                    Next
                Next
            Next
            k = k + 1
        End If
    Next
    Set DB = Nothing
End Sub


Thân
 
Rất chính xác anh à, bây giờ cho em hỏi thêm là làm sao mình có thể nhận biết được trường nào là khoá chính vậy anh (Ví dụ in đậm những trường là khoá chính)
Cám ơn anh

Rút gọn code lại như sau :

PHP:
Dim DB As Database
Dim i, n, m, k, j, x As Byte
Dim tdf As TableDef
Dim strField As String
Dim ind As Index
Dim fld As Field
Dim TenFile As String
 
 
Sub XacDinh()
    TenFile = ThisWorkbook.Path & "\GPE.mdb"
    Set DB = DBEngine.Workspaces(0).OpenDatabase(TenFile)
    n = DB.TableDefs.Count
    k = 1
    For i = 0 To n - 1
        If Left(DB.TableDefs(i).Name, 4) = "MSys" Then
            i = i + 1
        Else
            Set tdf = DB.TableDefs(i)
            Sheet1.Cells(1, k) = tdf.Name
            m = tdf.Fields.Count
            For j = 0 To m - 1
                strField = tdf.Fields(j).Name
                Sheet1.Cells(j + 2, k) = strField
                For Each ind In tdf.Indexes
                    For Each fld In ind.Fields
                        If fld.Name = strField Then
                            If ind.Primary Then
                                For x = 2 To m + 1
                                    If strField = Sheet1.Cells(x, k) Then Sheet1.Cells(x, k).Font.Bold = True
                                Next
                            End If
                        End If
                    Next
                Next
            Next
            k = k + 1
        End If
    Next
    MsgBox "Xong"
    Set DB = Nothing
End Sub


Thân
 
Các bạn chỉ giúp mình cách nào lấy (export) danh sách các table (gồm các cột và thuộc tính của nó) trong access ra excel được không ạ?
Mình muốn có 1 cái nhìn tổng quan về cấu trúc các table của csdl access, để điều chỉnh hay thay đổi thì cũng tiện hơn. Với lại cũng dễ kết nối với excel khi muốn import hay export dữ liệu giữa excel và access, tránh lỗi dữ liệu không phù hợp.
 
Lần chỉnh sửa cuối:
Các bạn chỉ giúp mình cách nào lấy (export) danh sách các table (gồm các cột và thuộc tính của nó) trong access ra excel được không ạ?
Mình muốn có 1 cái nhìn tổng quan về cấu trúc các table của csdl access, để điều chỉnh hay thay đổi thì cũng tiện hơn. Với lại cũng dễ kết nối với excel khi muốn import hay export dữ liệu giữa excel và access, tránh lỗi dữ liệu không phù hợp.

Bạn xem bài viết sau nhé: Cách lấy thông tin (Tên bảng, trường) của tất cả các bảng trong Access vào Excel
 
Thử tham chiếu đến Microsoft Office 12 access database engine object trong reference xem thế nào nhé.

Haiz, cuối cùng mình cũng giải quyết xong, tham chiếu đến Microsoft Office 12 access database engine object trong reference.

Ban đầu mình cũng thiết lập tham chiếu đến Microsoft Office 12 access database engine object trong reference, nhưng bị conflict với DAO. Sau bỏ ko dùng DAO, chỉ dùng mỗi tham chiếu đến Microsoft Office 12 access database engine object trong reference và đã chạy được.
 
Lần chỉnh sửa cuối:
Mình vừa cài xong office 2007, nhưng phần Access 2007: ngăn form, tạo nút lệnh bằng wizard lại không có mục "run application, run excel, run word" như access 2003 mà chỉ có Quit Application thui, mong các bạn biết giúp đỡ dùm.
Thanks
 
Web KT
Back
Top Bottom