- 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 và 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ấ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:
Chúc các bạn ngày lễ vui vẻ.
Lê Văn Duyệt
Đô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 và 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