Như các bạn đã biết thì Microsoft Access là một phần mềm dữ liệu đơn giản, và chúng ta đặt câu hỏi làm thế nào liên kết VBA trong AutoCAD với phần mềm này, tạo nên một cơ sở dữ liệu để sử dụng. Ví dụ giải bài toán Nền móng, có rất nhiều bảng dữ liệu hay bài toán kiểm định dầm bê tông... Một thư viện MBD của Microsoft Access sẽ được gọi trong VBA, và sử dụng lệnh của VBA để vẽ chúng ra thì thật là tuyệt phải không?
Hướng dẫn dưới đây sẽ giúp bạn hiểu đơn giản về Access và các kết nối Access với VBA trong AutoCAD.
1. Sơ lược về M.Access
a. Tạo 1 bảng dữ liệu đơn giản.
Tạo một bảng trong Access: Chọn NEW để lập một bảng mới sau đó dùng Design để tạo các trường trong bản đó.
Bước 2 Đó là các trường (fields) trong bảng (table) ngồm có: ID, NAME, FULLNAME,ADDRESS
Để làm thử các câu lệnh QUERRY trong Access Chọn New -> Design View -> Close
Để làm thử các câu lệnh QUERRY trong Access Chọn New -> Design View -> Close
b. Hướng dẫn dùng câu lệnh QUERRY trong Access
Ví dụ bạn gõ lên SELECT như trên, và bấm RUN. Một bảng dữ liệu sẽ được trả về cho bạn
Câu lệnh SELECT Dùng để chọn tất các dữ liệu trong bảng: Cú pháp:
SELECT [TÊN CÁC CỘT] FROM [TÊN BẢNG] WHERE [ĐIỀU KIỆN1] [OR, AND,IN,=,>,<] [ĐIỀU KIỆN 2]
Hoặc SUBQUERRY
SELECT [TÊN CÁC CỘT] FROM [TÊN BẢNG] WHERE [ĐIỀU KIỆN1 =, IN (CÂU LỆNH SELECT KHÁC)]
VD: Select * From VBAADO Chọn tất cả dữ liệu trong bảng VBAADO
Select * from VBAADO Where Na me =’VD’ Chọn tất cả các dữ liệu nào có tên là VD trong bảng đó
Câu lệnh CHÈN INSERT cú pháp:
INSERT INTO [TÊN BẢNG] VALUES([TẬP HỢP DỮ LIỆU CẦN ĐƯA VÀO BẢNG])
VD: INSETRT INTO VBAADO VALUES(‘6’,’VD1’,’VD1’,’VD1’) Chèn dữ liệu trên vào bảng của VBAADO
Câu lệnh UPDATE Cú pháp :
UPDATE [Tên bảng] SET [Trường dữ liệu cần update] WHERE [Điều Kiện]
VD: Update VBAADO SET ADDRESS=’Vi du VBA MDB’ WHERE NAME =’VD’
Tức là câu lệnh này sẽ update dữ liệu cho trường ADDRESS cho những người có tên ‘VD’
Có thể bỏ WHERE nhưng như thế câu lệnh sẽ tự update hết cho tất cả.
Câu lệnh DELETE Cú pháp:
DELETE FROM [TÊN BẢNG] WHERE [Điều Kện]
VD: DELETE * FROM VBAADO WHERE ID='1' xóa tất cả dữ liệu tại những trường có ID là 1
2. Kết nối Database với VBA AUTOCAD
Giả sử tôi có file dữ liệu là Testmdb.mdb như ở trên có một bảng VBAAD. Tôi sẽ copy file này đường dẫn như trên ảnh. (thư mục mà bạn cài Autocad).
- Trong VBA bạn chọn: Liên kết Reference Bạn vào Tool -> Reference.
Hộp References sẽ hiện ra, vấn đề ở đây bạn phải tìm được MICROSOFT DAO 3.6 Object Library, chức năng của thư viện này là để giúp bạn truy cập vào thư viện MDB hay M.ACCESS.
Để liên kết được với thư viện này trong VBA bạn sử dụng lệnh sau:
Dim db As Database
Dim rs As Recordset
Dim index As Integer
index = 0
Set db = DBEngine.Workspaces(0).OpenDatabase(App.Path & "\ [Tên file mdb (trong trường hợp này là Testado.mdb nhưở trên)] ")
Set rs = db.OpenRecordset([Câu lệnh SELECT ])
Set db = DBEngine.Workspaces(0).OpenDatabase(App.Path & "\ [Tên file mdb (trong trường hợp này là Testado.mdb nhưở trên)] ")
Set rs = db.OpenRecordset([Câu lệnh SELECT ])
[Nơi bạn viết tiếp mã lệnh]
Sau khi làm việc với Database xong phải đóng Database đó lại bằng 2 hàm sau:
Set db = Nothing
Set rs = Nothing
Set rs = Nothing
Ví dụ dưới đây giúp bạn hiểu hơn về đọc dữ liệu từ M.Access 1 listBox
Bạn cần tạo một form như sau.
Với Listbox1 : sẽ có các thuộc tính sau: ở List Box Properties chú ý đến:
+ ColumnCount: Số lượng cột
+ ColumnHeads: Hiện hay ẩn tiêu đề của cột
+ ColumnHeads: Hiện hay ẩn tiêu đề của cột
với CommandButton1: khi bấm cho để nó có thể đọc dữ liệu từ file MDB vào ta làm các lệnh như sau:
Dim db As Database
Dim rs As Recordset
Dim index As Integer
index = 0
Set db = DBEngine.Workspaces(0).OpenDatabase(Application.Path & "\Testado.mdb")
Set rs = db.OpenRecordset("Select Name from VBAADO")
If rs.EOF = False Then
While Not rs.EOF
ComboBox1.AddItem rs("Name"), index
index = index + 1
DoEvents rs.MoveNext Wend End If
Set db = Nothing Set rs = Nothing
Giải thích:
DBEngine.Workspaces(0).OpenDatabase(Application.Path & "\Testado.mdb")
DBEngine.Workspaces(0).OpenDatabase(Application.Path & "\Testado.mdb")
Mở dữ liệu từ file TestADO.mdb
db.OpenRecordset("Select Name from VBAADO"):
db.OpenRecordset("Select Name from VBAADO"):
Mở bảng dữ liệu qua câu lệnh SELECT Name from VBAADO rs.EOF = Flase : kiểm tra xem trong bản đã có dữ liệu không?
While Not rs.EOF : nếu mà bản có dữ liệu thì vòng lệnh sẽ cho phép RecordSet đọc dữ liệu của bảng ra cho đến khi hết.
ComboBox1.AddItem rs("Name"), index
Thêm dữ liệu vào Combox tại vị trí theo Số thứ tự của Combox index = index + 1: Tằng lên theo số thứ tự của Combox DoEvents : Thự hiện các sự kiện rs.MoveNext : Nhẩy tới dong tiếp thoe của bảng dữ liệu
Wend: Lệnh của vong lặp While.
Wend: Lệnh của vong lặp While.
Sau khi chạy thử và bấm CommandButton1 ta sẽ có một Combox được đọc dữ liệu từ file mdb vào Combox như hình dưới.
Với ListBox tương tự, nhưng chú ý đển là là listbox có số lượng ColumnCount và RowCount
Để đưa dữ liệu vào Listbox chúng ta có 2 cách như sau:
ListBox1.ColumnCount = 3
ListBox1.AddItem "Row 1, Col 1" ListBox1.List(0, 1) = "Row 1, Col 2" ListBox1.List(0, 2) = "Row 1, Col 3"
ListBox1.AddItem "Row 2, Col 1" ListBox1.List(1, 1) = "Row 2, Col 2" ListBox1.List(1, 2) = "Row 2, Col 3"
ListBox1.AddItem "Row 3, Col 1" Tunt Nguyen 22 tunguyen2309@gmail.com
ListBox1.List(2, 1) = "Row 3, Col 2" ListBox1.List(2, 2) = "Row 3, Col 3"
ListBox1.TextColumn = 3
Hoặc theo kiểu Mảng như sau:
Dim i As Single ListBox1.ColumnCount = 3 For i = 0 To 5
MyArray(i, 0) = i Next i
MyArray(0, 1) = "Zero" MyArray(1, 1) = "One" MyArray(2, 1) = "Two" MyArray(3, 1) = "Three" MyArray(4, 1) = "Four" MyArray(5, 1) = "Five"
MyArray(0, 2) = "Zero" MyArray(1, 2) = "Un ou Une" MyArray(2, 2) = "Deux" MyArray(3, 2) = "Trois" MyArray(4, 2) = "Quatre" MyArray(5, 2) = "Cinq"
ListBox1.List() = MyArray
3. Dưới đây là Mã nguồn của toàn bài ví dụ:
Dim MyArray(6, 3)
Private Sub CommandButton1_Click() Dim db As Database Dim rs As Recordset Dim index As Integer index = 0 Set db = DBEngine.Workspaces(0).OpenDatabase(Application.Path & "\Testado.mdb") Set rs = db.OpenRecordset("Select Name from VBAADO")
If rs.EOF = False Then
While Not rs.EOF ComboBox1.AddItem rs("Name"), index index = index + 1 DoEvents rs.MoveNext
Wend End If
Set db = Nothing Set rs = Nothing
End Sub
Private Sub CommandButton2_Click() Dim i As Single ListBox1.ColumnCount = 3 For i = 0 To 5
MyArray(i, 0) = i Next i
'Load columns 2 and three of MyArray MyArray(0, 1) = "Zero" MyArray(1, 1) = "One" MyArray(2, 1) = "Two" MyArray(3, 1) = "Three" MyArray(4, 1) = "Four" MyArray(5, 1) = "Five"
MyArray(0, 2) = "Zero" MyArray(1, 2) = "Un ou Une" MyArray(2, 2) = "Deux" MyArray(3, 2) = "Trois" MyArray(4, 2) = "Quatre" MyArray(5, 2) = "Cinq"
ListBox1.List() = MyArray End Sub
Private Sub UserForm_Initialize()
ListBox1.ColumnCount = 3
ListBox1.AddItem "Row 1, Col 1", 0 ListBox1.List(0, 1) = "Row 1, Col 2" ListBox1.List(0, 2) = "Row 1, Col 3"
ListBox1.AddItem "Row 2, Col 1" ListBox1.List(1, 1) = "Row 2, Col 2" ListBox1.List(1, 2) = "Row 2, Col 3"
ListBox1.AddItem "Row 3, Col 1" ListBox1.List(2, 1) = "Row 3, Col 2" ListBox1.List(2, 2) = "Row 3, Col 3"
ListBox1.TextColumn = 3 End Sub
Private Sub ListBox1_Change() TextBox1.Text = ListBox1.Text End Sub
Sau khi chạy chương trình sẽ được như sau: Giải thích một số lệnh cơ bản: ListBox1_Change() khi bấm vào Listbox trên màn hình thì TextBox1 sẽ nhận được giá trị của ListBox UserForm_Initialize() Khi khởi động form tất cả giá trị trong vòng lệnh này sẽ được thực hiện không cần thao tác.
Mã nguồn một số ví dụ:
Theo viet3g.com
0 Comments
Vui lòng viết tiếng Việt có dấu!!!