Liệt kê các bảng dữ liệu trong database

Liên hệ QC

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,706
Giới tính
Nam
Chào các bạn,
Đôi khi trong lập trình với CSDL MS Access, chúng ta cần biết xem bảng dữ liệu có tồn tại hay không? Hoặc các trường trong bảng dữ liệu là gì?

Chúng ta có nhiều cách thực hiện, tôi xin giới thiệu các bạn một cách:
Để test tôi sẽ tạo một form, trên form có hai Listbox: Listbox1 Listbox2
Khi mở form tôi sẽ liệt kê các bảng dữ liệu vào Listbox1.
Mỗi khi người dùng click vào Listbox1 thì các trường dữ liệu tương ứng sẽ được liệt kê vào Listbox2.

Ngoài ra còn một nút cmdExit, chỉ để đóng form lại mà thôi.

Đoạn code của UserForm như sau:
Mã:
Option Explicit

Private Sub cmdExit_Click()
    End
End Sub

Private Sub ListBox1_Click()
    Dim sTableName As String, sFieldName As String
    Dim rsFields As ADODB.Recordset
    Dim i As Long, j As Long
    i = ConnectToDB()
    If i = 1 Then
        If Me.ListBox1.ListIndex <> -1 Then
            'Clear first
            Me.ListBox2.Clear
            sTableName = Me.ListBox1.Text
            If gcnAccess.state = adStateClosed Then
                gcnAccess.Open
            End If
            'We have the table name, so we Query that table in order to get
            'the field names.  1 record is more than good enough, hence the
            'Second argument Is 1#
            Set rsFields = gcnAccess.Execute("SELECT * FROM [" & sTableName & "]", 1, 1)
            For j = 0 To rsFields.Fields.Count - 1
                sFieldName = rsFields.Fields(j).Name
                With Me.ListBox2
                    .AddItem "Field Name: " & sFieldName
                    .AddItem "  Type: " & ConvType(rsFields(j).Type)
                    .AddItem "  Attributes: " & ConvAttr(rsFields.Fields(j).Attributes)
                    .AddItem "  DefinedSize: " & rsFields.Fields(j).DefinedSize
                    .AddItem "  NumbericScale: " & rsFields.Fields(j).NumericScale
                    .AddItem "  Precision: " & rsFields.Fields(j).Precision
                End With

            Next j
            rsFields.Close
        End If
    End If
End Sub

Private Sub UserForm_Initialize()
    Dim rst As ADODB.Recordset
    Dim i As Long
    Dim sTableName As String

    i = ConnectToDB()
    If i = 1 Then
        If gcnAccess.state = adStateClosed Then
            gcnAccess.Open
        End If
        Set rst = gcnAccess.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))
        Do Until rst.EOF
            ' Since MS current schema returns tables named "MSys...."
            ' as well as their TABLE_TYPE is also "TABLE", we exclude them.
            If UCase(Left(rst!Table_name, 4)) <> "MSYS" Then
                sTableName = rst!Table_name
                Me.ListBox1.AddItem sTableName
            End If
            rst.MoveNext
        Loop
        rst.Close
    End If

End Sub

Mấu chốt là phương thức OpenSchema của gcnAccess (biến connection)

Trong đoạn code trên chúng ta chỉ liệt kê các bảng dữ liệu của người dùng mà thôi, đó là lý do tại sao chúng ta có đoạn code:
Mã:
If UCase(Left(rst!Table_name, 4)) <> "MSYS" Then

Chúc các bạn ngày lễ vui vẻ.

Lê Văn Duyệt
 
Web KT

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

Back
Top Bottom