WELCOME
Chào mừng quý vị đến với Blog Tin học PT- CNTT&GD.
Quý vị chưa đăng nhập hoặc chưa đăng ký làm thành viên, vì vậy chưa thể tải được các tư liệu của Thư viện về máy tính của mình.
Nếu chưa đăng ký, hãy đăng ký thành viên tại đây hoặc xem phim hướng dẫn tại đây
Nếu đã đăng ký rồi, quý vị có thể đăng nhập ở ngay ô bên phải.
Lập trình VB6 Chương 15

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Nguyễn Thái Đức (trang riêng)
Ngày gửi: 11h:40' 27-03-2009
Dung lượng: 171.5 KB
Số lượt tải: 4
Nguồn:
Người gửi: Nguyễn Thái Đức (trang riêng)
Ngày gửi: 11h:40' 27-03-2009
Dung lượng: 171.5 KB
Số lượt tải: 4
Số lượt thích:
0 người
Chương Mười Lăm - Lập trình với kỹ thuật DAO
Reference DAO
Trong bài nầy ta sẽ học những cách lập trình căn bản với MS Access database qua kỹ thuật DAO mà không cần dùng đến Control Data như trong bài trước. Ta sẽ cần đến vài Objects trong thư viện DAO, do đó nếu bạn mở một dự án VB6 mới thì hãy dùng Menu Command Project | References... để chọn Microsoft DAO 3.51 Object Library bằng cách click cái checkbox bên trái như trong hình dưới đây. (Một cách để nhớ tên của Object nầy là nhớ câu "thằng cha cua ĐÀO 35 con dê").
Sau đó trong code của Form chính ta sẽ declare variable myDatabase cho một instance của DAO database và variable myRS cho một DAO recordset. Ở đây ta nói rõ Database và Recordset là thuộc loại DAO để phân biệt với Database và Recordset thuộc loại ADO (ActiveX Data Object) sau nầy. Để ý là Intellisense giúp ta trong lúc viết code:
Bây giờ bạn hãy đặt lên Form chính, tên frmDAO, 4 labels với captions: Title, Year Published, ISBN và Publisher ID. Kế đó cho thêm 4 textboxes tương ứng và đặt tên chúng là txtTitle, txtYearPublished, txtISBN và txtPublisherID. Điều ta muốn làm là khi Form mới được loaded, nó sẽ lấy về từ database một Recordset chứa tất cả records trong table Titles theo thứ tự về mẫu tự (alphabetical order) của field Title và hiển thị record đầu tiên.
Dùng keyword SET
Chuyện trước hết là mở một Database Object dựa vào tên đầy đủ (full path name) của Access database:
` Open main database
Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")
Để ý chữ Set trong câu code trên. Đó là vì myDB là một Pointer đến một Object. Mặc dầu từ rày về sau ta sẽ dùng myDB như một Database theo cách giống như bất cứ variable thuộc data type nào khác, nhưng khi chỉ định lần đầu là nó từ đâu đến thì ta dùng chữ Set, để nói rằng thật ra myDB không phải là Object Database, nhưng là Pointer đến Object Database. Điểm nầy càng nói đến càng khó hiểu. Đại khái là VB6 runtime dynamically allocates (dành ra cho khi cần) một phần trong bộ nhớ (memory) để chứa Object Database khi ta nhận được nó từ execution của Method OpenDatabase. Dầu vị trí chỗ chứa Object Database trong bộ nhớ không nhất định, nhưng vì ta nắm cái cán chỉ đến vị trí ấy nên ta vẫn có thể làm việc với nó một cách bình thường. Cái cán ấy là value (trị số) của variable myDB. Vì value nầy không phải là Object, nhưng nó chứa memory address chỉ đến (point to hay refer to) Object Database, nên ta gọi nó là Pointer. Lập trình dùng Pointer nói chung rất linh động là hiệu năng trong các ngôn ngữ như C, Pascal, C++ ,v.v.. Tuy nhiên, lập trình viên phải nhớ trả lại Operating System phần memory mình dùng khi không còn cần nó nữa để Operating System lại allocate cho Object khác. Nếu công việc quản lý dùng lại memory không ổn thỏa thì có những mảnh memory nằm lang bang mà Operating Sytem không biết. Lần lần Operating System sẽ không còn memory dư nữa. Ta gọi hiện tượng ấy là memory leakage (rỉ). Các ngôn ngữ sau nầy như Java, C# đều không dùng Pointer nữa. Visual Basic không muốn lập trình viên dùng Pointer. Chỉ trong vài trường hợp đặc biệt VB6 mới lộ ra cho ta thấy thật ra ở trong hậu trường VB6 Runtime dùng Pointer, như trong trường hợp nầy. Tương tự như vậy, vì Recordset là một Pointer đến một Object, ta cũng dùng Set khi chỉ định một DAO Recordset lấy về từ Method OpenRecordset của database myDB.
`Open recordset
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
Cái parameter loại String ta dùng cho method OpenRecordset là một Lệnh (Statement) SQL. Nó chỉ định cho database lấy tất cả mọi fields (columns) (Select *) của mỗi record từ Table Titles (from Titles) làm một Recordset và sort các records trong Recordset ấy theo alphabetical order của field Title (ORDER BY Title). Nhớ là Recordset nầy cũng giống như property Recordset của một Control Data mà ta dùng trong bài trước. Bây giờ có Recordset rồi, ta có thể hiển thị chi tiết của record đầu tiên nếu Recordset ấy có ít nhất một record. Ta kiểm tra điều ấy dựa vào property RecordCount của Recordset như trong code dưới đây:
Private Sub Form_Load()
` Fetch Folder where this program EXE resides
AppFolder = App.Path
` make sure it ends with a back slash
If Right(AppFolder, 1) <> "" Then AppFolder = AppFolder & ""
` Open main database
Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")
`Open recordset
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
` if Recordset is not empty
Reference DAO
Trong bài nầy ta sẽ học những cách lập trình căn bản với MS Access database qua kỹ thuật DAO mà không cần dùng đến Control Data như trong bài trước. Ta sẽ cần đến vài Objects trong thư viện DAO, do đó nếu bạn mở một dự án VB6 mới thì hãy dùng Menu Command Project | References... để chọn Microsoft DAO 3.51 Object Library bằng cách click cái checkbox bên trái như trong hình dưới đây. (Một cách để nhớ tên của Object nầy là nhớ câu "thằng cha cua ĐÀO 35 con dê").
Sau đó trong code của Form chính ta sẽ declare variable myDatabase cho một instance của DAO database và variable myRS cho một DAO recordset. Ở đây ta nói rõ Database và Recordset là thuộc loại DAO để phân biệt với Database và Recordset thuộc loại ADO (ActiveX Data Object) sau nầy. Để ý là Intellisense giúp ta trong lúc viết code:
Bây giờ bạn hãy đặt lên Form chính, tên frmDAO, 4 labels với captions: Title, Year Published, ISBN và Publisher ID. Kế đó cho thêm 4 textboxes tương ứng và đặt tên chúng là txtTitle, txtYearPublished, txtISBN và txtPublisherID. Điều ta muốn làm là khi Form mới được loaded, nó sẽ lấy về từ database một Recordset chứa tất cả records trong table Titles theo thứ tự về mẫu tự (alphabetical order) của field Title và hiển thị record đầu tiên.
Dùng keyword SET
Chuyện trước hết là mở một Database Object dựa vào tên đầy đủ (full path name) của Access database:
` Open main database
Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")
Để ý chữ Set trong câu code trên. Đó là vì myDB là một Pointer đến một Object. Mặc dầu từ rày về sau ta sẽ dùng myDB như một Database theo cách giống như bất cứ variable thuộc data type nào khác, nhưng khi chỉ định lần đầu là nó từ đâu đến thì ta dùng chữ Set, để nói rằng thật ra myDB không phải là Object Database, nhưng là Pointer đến Object Database. Điểm nầy càng nói đến càng khó hiểu. Đại khái là VB6 runtime dynamically allocates (dành ra cho khi cần) một phần trong bộ nhớ (memory) để chứa Object Database khi ta nhận được nó từ execution của Method OpenDatabase. Dầu vị trí chỗ chứa Object Database trong bộ nhớ không nhất định, nhưng vì ta nắm cái cán chỉ đến vị trí ấy nên ta vẫn có thể làm việc với nó một cách bình thường. Cái cán ấy là value (trị số) của variable myDB. Vì value nầy không phải là Object, nhưng nó chứa memory address chỉ đến (point to hay refer to) Object Database, nên ta gọi nó là Pointer. Lập trình dùng Pointer nói chung rất linh động là hiệu năng trong các ngôn ngữ như C, Pascal, C++ ,v.v.. Tuy nhiên, lập trình viên phải nhớ trả lại Operating System phần memory mình dùng khi không còn cần nó nữa để Operating System lại allocate cho Object khác. Nếu công việc quản lý dùng lại memory không ổn thỏa thì có những mảnh memory nằm lang bang mà Operating Sytem không biết. Lần lần Operating System sẽ không còn memory dư nữa. Ta gọi hiện tượng ấy là memory leakage (rỉ). Các ngôn ngữ sau nầy như Java, C# đều không dùng Pointer nữa. Visual Basic không muốn lập trình viên dùng Pointer. Chỉ trong vài trường hợp đặc biệt VB6 mới lộ ra cho ta thấy thật ra ở trong hậu trường VB6 Runtime dùng Pointer, như trong trường hợp nầy. Tương tự như vậy, vì Recordset là một Pointer đến một Object, ta cũng dùng Set khi chỉ định một DAO Recordset lấy về từ Method OpenRecordset của database myDB.
`Open recordset
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
Cái parameter loại String ta dùng cho method OpenRecordset là một Lệnh (Statement) SQL. Nó chỉ định cho database lấy tất cả mọi fields (columns) (Select *) của mỗi record từ Table Titles (from Titles) làm một Recordset và sort các records trong Recordset ấy theo alphabetical order của field Title (ORDER BY Title). Nhớ là Recordset nầy cũng giống như property Recordset của một Control Data mà ta dùng trong bài trước. Bây giờ có Recordset rồi, ta có thể hiển thị chi tiết của record đầu tiên nếu Recordset ấy có ít nhất một record. Ta kiểm tra điều ấy dựa vào property RecordCount của Recordset như trong code dưới đây:
Private Sub Form_Load()
` Fetch Folder where this program EXE resides
AppFolder = App.Path
` make sure it ends with a back slash
If Right(AppFolder, 1) <> "" Then AppFolder = AppFolder & ""
` Open main database
Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")
`Open recordset
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
` if Recordset is not empty
 





















Các ý kiến mới nhất