LẬP TRÌNH CƠ SỞ DỮ LIỆU

21 669 3
LẬP TRÌNH CƠ SỞ DỮ LIỆU

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 162 CHƯƠNG 7 LẬP TRÌNH SỞ DỮ LIỆU Access không những là một hệ quản trị CSDL mạnh mà còn cung cấp những công cụ mạnh cho phép phát triển một CSDL đơn thuần thành một sản phẩm đóng gói thương mại. Chúng ta đã được học Queries, Forms, Report – đó là những công cụ khá mạnh và dễ học dùng để xây dựng các truy vấn, biểu mẫu và báo cáo in ấn trong Access. Chương 7 đã được làm quen với ngôn ngữ VBA- một ngôn ngữ lập trình trực quan, hướng đối tượng trong các ứng dụng Microsoft Office nói chung cũng như trên Access. Đó là sở quan trọng để trong chương này chúng ta tìm hiểu những kỹ thuật lập trình CSDL bằng VBA- thể nói là một mức chuyên sâu tiếp theo những gì đã học VBA căn bản. Các chủ đề sẽ được bàn đến trong chương này bao gồm:  Lớp đối tượng truy cập dữ liệu (DAO- Data Access Objects);  Bài toán tìm kiếm;  Bài toán đặt lọc;  Một số bài toán khác. Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 163 1. Kỹ thuật DAO DAO (Data Access Objects – Các đối tượng truy xuất dữ liệu) là tập hợp bao gồm lớp các đối tượng thể dùng để lập trình truy cập và xử lý dữ liệu trong các hệ CSDL. Ở đây CSDL Access, ngôn ngữ lập trình VBA. DAO được phát triển khá sớm, gần đây nhất là phiên bản DAO 3.5 và 3.51- nó thể thực hiện tốt được trên các phiên bản Access từ 97 trở về trước. Với Access 2000, XP phải dùng phiên bản DAO 3.6. Với phiên bản mới này, DAO 3.6 sử dụ ng nền Microsoft Jet 4.0. Vì vậy, thể làm việc được trên nền Unicode dễ dàng. Để nạp thư viện DAO3.6 vào làm việc, hãy thực hiện như sau: Bước 1: Mở cửa sổ lập trình VBA; Bước 2: Chọn thực đơn Tools | References Hộp thoại sau xuất hiện: Hãy chọn (tích) mục Microsoft DAO 3.6 Object Libraly trên danh sách Available References; chọn xong, nhấn OK để đóng lại. Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 164 Trước khi bước vào học lập trình CSDL, các bạn hãy xem cách thức làm việc như thế nào? Trong đó: - Tầng ứng dụng: bao gồm những giao diện người sử dụng cũng như những công cụ đơn giản mà người lập trình thể dùng để xử lý dữ liệu theo các bài toán; - Tầng Kết nối dữ liệu: bao gồm tập hợp các công cụ, phương thứ c để kết nối tới những dữ liệu cần làm việc trong CSDL. Ở đây, tầng kết nối bao gồm các chuẩn Microsoft Jet 4.0 và các lớp đối tượng DAO; - Tầng sở dữ liệu: bao gồm các bảng, các query trong sở dữ liệu thực tại. Như vậy để lập trình trên một CSDL phải sử dụng các đối tượng, các phương thức ở tầng kế t nối như là những công cụ để thể truy cập được vào CSDL tác nghiệp xử lý. Tầng kết nối đó chính là Jet 4.0 và DAO 3.6 mà chúng ta sẽ được tìm hiểu dưới đây. 1.1 Lớp đối tượng DAO Cấu trúc một CSDL bao gồm nhiều thành phần, đòi hỏi lập trình cũng cần những thành phần tương ứng để làm việc. Lớp các thành phần tương ứng để thể lập trình được trên toàn bộ cấu trúc CSDL là lớp các đối tượng DAO. Chúng tên gọi, những tập thuộc tính, các phương thức làm việc và quan hệ mật thiết với nhau. Cây phân cấp lớp các đối tượng DAO sau đây thể hiện đi ều đó: sở dữ liệu Các kết nối dữ liệu Ứng dụng Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 165 Trong đó: • Workspaces – định nghĩa tập hợp các vùng làm việc. Đây thể coi là lớp làm việc cao nhất. Về lý thuyết thể khai báo một vài vùng làm việc (Workspace), những trên thực tế chỉ cần khai báo một vùng làm việc và vùng này luôn được khai báo ngầm định cho CSDL hiện tại. Nên sẽ không cần bàn nhiều đến lớp các WorkSpace này; • Databases - định nghĩa tập hợp các CSDL Access cần làm việc trên một dự án; • RecordSets- định nghĩa các tập hợp bản ghi (Records) cần làm việc; • QueryDefs - định nghĩa tập hợp các Query để làm việc. Querydefs và Recordsets là khả năng truy xuất, xử lý dữ liệu (Data Manipulation) của DAO; • TableDefs - định nghĩa tập hợp các bảng (Table) cần làm việc. Đây là khả năng định nghĩ dữ liệu (Data-Definition Language); • Relations - định nghĩa tập hợp các quan hệ (Relationship) cần làm vi ệc; Mỗi lớp các đối tượng trên sẽ bao gồm tất cả các đối tượng đối tượng cùng loại trong một đối tượng mẹ đang mở. Ví dụ: Workspaces Databases RecordSets QueryDefs TableDefs Relations Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 166 - Databases sẽ bao gồm tất cả các CSDL đang đựoc mở trong vùng làm việc hiện tại; - RecordSets sẽ bao gồm tập hợp tất cả các Recordset đang được mở trên CSDL hiện tại. Khi đó, để tham chiếu đến một đối tượng cụ thể cần làm việc, thể dùng chỉ số (số thứ tự của đối tượng đó trên tập hợp tất cả các đối tượ ng đó) hoặc dùng tên gọi đối tượng đó để tham chiếu. Ví dụ sau liệt kê tên của tất cả các Recordset đang sử dụng trong CSDL db. Dim db As DAO.Database '------------------------------------ 'các câu lệnh tiếp theo ở đây ' For i = 0 To db.Recordsets.Count MsgBox db.Recordsets(i).Name Next Để làm việc tới một đối tượng cụ thể, cần phải tham chiếu từ lớp các đối tượng mẹ của nó. Ví dụ: Để hiển thị giá trị của trường (Field) hoten trên tập hợp các bản ghi (Recordset) rs1 làm như sau: MsgBox rs1.Fields("hoten").Value ' hoặc MsgBox rs1.Fields![hoten].Value 1.2 Đối tượng Database Database là đối tượng dùng làm việc với một CSDL (trong trường hợp này thể hiểu một CSDL như một tệp Access .MDB). Lớp các đối tượng con của Database được thể hiện qua đồ sau: Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 167 Khai báo Dim db As DAO.Database ' Gán db cho một CSDL cụ thể Set db = OpenDatabase(“C:\Baitap\qlbh.mdb”) 'Đặc biệt, lệnh gán db cho CSDL hiện tại như sau: Set db = CurrentDb Khi không làm việc với CSDL nào đó, thể ra lệnh đóng để giải phóngd bộ nhớ bằng cách: db.Close Sau khi lệnh này thực thi, tất cả các đối tượng con của db nếu đang mở sẽ được đóng lại để giải phóng bộ nhớ. Bản thân db cũng được giải phóng bộ nhớ (bằng Nothing), tất nhiên tệp CSDL và dữ liệu vẫn còn nguyên trên đĩa. 1.3 Đối tượng RecordSet Recordset là đối tượng dùng để miêu tả tập hợp các bản ghi của một bảng, của một query hoặc tập các bản ghi kết quả của việc thi hành một câu lệnh SQL nào đó. Lớp các đối tượng con của Recordset được thể hiện qua đồ sau: Khai báo Set rs=db.OpenRecordset(<Name>) Trong đó: Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 168 - Set rs = db.OpenRecordset là lệnh để tạo ra tập hợp các bản ghi từ CSDL db gán vào biến kiểu recordset rs; - <Name> là một xâu ký tự chỉ ra nguồn dữ liệu sẽ trả về cho Recordset. Xâu này thể là tên một bảng, một Query hoặc một câu lệnh SQL; Mỗi biến Recordset khi làm việc, phải được chỉ ra Database xuất xứ của nó (phải được tham chiếu từ một biến kiểu Database đã được khai báo). Sau đây là các ví dụ: Ví dụ 1: Gán tập hợp các bản ghi từ một bảng vào biến Recordset (ở đây là bảng canbo). Dim rs As DAO.Recordset Set rs = db.OpenRecordset("canbo") Ví dụ 2: Gán tập hợp các bản ghi từ một câu lệnh chọn dữ liệu SQL vào biến Recordset (ở đây là các thông tin hoten, ngaysinh của tất cả các cán bộ nữ từ bảng canbo). Dim rs As DAO.Recordset Set rs = db.OpenRecordset("SELECT hoten, ngaysinh FROM canbo WHERE gioitinh = False") Một số thuộc tính của Recordset Thuộc tính Name Trả về xâu ký tự trong tham số <name> của lệnh gọi Recordset. Ví dụ: lệnh sau sẽ cho biết xâu ký tự tạo nguồn dữ liệu cho Recordset là gì? MsgBox rs.Name Thuộc tính AbsolutePosition Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 169 Cho biết vị trí bản ghi hiện tại (được tính từ 0). Trong trường hợp không bản ghi nào trên recordset hoặc con trỏ bản ghi đang nằm ở EOF- sẽ không thể lấy được giá trị thuộc tính này. Do vậy để sử dụng thuộc tính này thường phải đi kèm thuộc tính kiểm tra tồn tại bản ghi nào hay không (RecordCount > 0) và con trỏ bản ghi ở cuối tệp chưa (EOF = False). Thuộc tính RecordCount Cho biết tổng số bả n ghi trả về trên Recordset Thuộc tính EOF Cho biết con trỏ bản ghi hiện tại nằm ở EOF hay không? Nếu giá trị thuộc tính này là True, trái lại là False. Thuộc tính Fields Dùng tham chiếu tới các trường (Fields) trên tập hợp các bản ghi mà Recordset trả về. Thực tế Field cũng là một đối tượng và cũng bộ thuộc tính và các phương thức của nó. Với Field của Recordset thông thường người ta hay sử dụng thuộc tính Value. Nếu không chỉ định thuộc tính cụ thể nào cho Field, VBA vẫn hiểu ngầm định đó là Value. Ví dụ: Hiển thị giá trị trường hoten trong Recordset rs Msgbox rs.Fields("hoten").Value 'hoặc Msgbox rs.Fields("hoten") Một số phương thức của Recordset Phương thức Close Để đóng Recordset, giải phóng bộ nhớ. Chỉ thực hiện hành động này khi không làm việc với Recordset nào đó. Các phương thức di chuyển bản ghi của Recorset Phương thức MoveFirts Để chuyển con trỏ về bản ghi đầu tiên Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 170 Phương thức MoveLast Để di chuyển con trỏ về bản ghi cuối cùng Phương thức MoveNext Dịch đến bản ghi kề sau Phương thức MovePrevious Dịch đến bản ghi kề trước Ví dụ 3: Ví dụ sau duyệt và hiển thị toàn bộ Hoten của bảng canbo Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("canbo") If rs.RecordCount > 0 Then rs.MoveFirst While rs.EOF = False MsgBox rs.Fields("hoten").Value rs.MoveNext Wend End If Phương thức AddNew, Update Để thêm mới một bản ghi vào Recordset. Qui trình thêm một bản ghi mới như sau: 1. Ra lệnh Addnew 2. Gán giá trị cho các trường của bản ghi mới 3. Ra lệnh Update Dưới đây là ví dụ thêm mới một hồ cán bộ mới vào bảng canbo. Ví dụ 4: Dim db As DAO.Database Dim rs As DAO.Recordset Giáo trình Microsoft Access 2000 Copyright ® Nguyễn Sơn Hải Trang 171 Set db = CurrentDb Set rs = db.OpenRecordset("canbo") '---------------------- 'Ra lệnh thêm mới bản ghi ' rs.AddNew '-------- 'Gán giá trị cho các trường của bản ghi mới ' rs.Fields("canboID") = "CB00565" rs.Fields("hoten") = "Nguyễn Sơn Hải" rs.Fields("ngaysinh") = #2/11/1975# rs.Fields("gioitinh") = True rs.Fields("chucvuID") = "CV002" '-------- 'Ra lệnh ghi lại dữ liệu ' rs.Update Phương thức Edit, Update Phương thức Edit để sửa dữ liệu một bản ghi nào đó trên recordset. Qui trình để sửa một bản ghi như sau: 1. Định vị tới bản ghi cần sử trên recordset 2. Ra lệnh Edit 3. Gán giá trị mới cho các trường cần sửa 4. Ra lệnh Update Dưới đây là ví dụ về sửa hồ cán bộ mã CB000565 Ví dụ 5: Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb '------------------------------------- 'Định vị tới bản ghi cần sửa ' Set rs = db.OpenRecordset("SELECT * FROM canbo WHERE canboID='CB000565'") If rs.RecordCount > 0 Then [...]... vụ nhu cầu lọc dữ liệu; - Sử dụng đối tượng Sub-form/Sub-report trên thanh công cụ Toolbox để đưa form con vừa tạo lên form mẹ Ngầm định tên của sub-form này là Trang 180 Copyright® Nguyễn Sơn Hải Giáo trình Microsoft Access 2000 frm_formcon Chú ý đến tên gọi này vì phần tiếp sau sẽ sử dụng nó để lập trình Cuối cùng, giao diện thiết kế form mẹ như sau: Bước 3: Thiết lập lệnh lọc dữ liệu trên form mẹ... canbo.luongchinh = hesoluong * 290000" qr.Execute qr.Close Trang 174 Copyright® Nguyễn Sơn Hải Giáo trình Microsoft Access 2000 1.5 Đối tượng TableDef Đối tượng TableDef được dùng để tham chiếu tới các bảng dữ liệu (Table) trên CSDL Thông qua đối tượng này thể thiết kế, chỉnh sửa được cấu trúc các bảng dữ liệu trong chế độ Run-time của VBA như trên chế độ thiết kế bảng Design View Một số thuộc tính quan... tbl.CreateField(,,) Trong đó: - - tên trường mới cần tạo; - - là một tuỳ chọn để khai báo kiểu dữ liệu của trường cần tạo Kiểu dữ liệu được khai báo theo các hằng số như sau: Trang 176 Copyright® Nguyễn Sơn Hải Giáo trình Microsoft Access 2000 Giá trị: Tương ứng với kiểu dbBoolean Boolean dbByte Byte dbChar Char dbCurrency Currency dbDate Date/Time dbDecimal... GUID dbInteger Integer dbLong Long dbMemo Memo dbNumeric Numeric dbSingle Single dbText Text dbTime Time - là một tuỳ chọn để khai báo độ lớn dữ liệu nếu cần Tiếp theo là ví dụ minh hoạ cách tạo cấu trúc một bảng dữ liệu tổng hợp những hướng dẫn đã trình bày trên Ví dụ 2: Sub TaoBangMoi() On Error GoTo Loi Dim tbl As DAO.TableDef Set tbl = db.CreateTableDef("NewTable") tbl.Fields.Append tbl.Fields.Append... toán đặt lọc dữ liệu Đặt lọc là lớp bài toán phổ dụng trong thực tế Với bài toán này phải những yêu cầu cụ thể về lọc dữ liệu (điều kiện lọc) Kết quả trả về sẽ là một tập hợp các bản ghi, thể được kết xuất trên form hoặc được in ra máy in dưới dạng report Dưới đây là minh hoạ một bài toán đặt lọc sau khi đã được xây dựng và đang hoạt động: Trang 178 Copyright® Nguyễn Sơn Hải Giáo trình Microsoft...Copyright® Nguyễn Sơn Hải Giáo trình Microsoft Access 2000 rs.MoveFirst ' 'Ra lệnh sửa bản ghi ' rs.Edit ' 'Thực hiện sửa các trường dữ liệu cần thiết ' rs.Fields("hoten") = "Nguyễn Văn Hải" rs.Fields("ngaysinh") = #22/11/1975# ' 'Ra lệnh ghi lại dữ liệu vừa sửa ' rs.Update End If Phương thức Delete Để xoá bản ghi hiện... liệu trên form mẹ Công việc của bước này là làm sao để sau khi chọn tên một khách hàng ở hộp Combobox, danh sách các hoá đơn mua hàng của khách đó sẽ được hiển thị lên form con Muốn thế, việc lập trình lọc dữ liệu ở đây phải được thực hiện trong thủ tục đáp ứng sự kiện Combo0_Click Giải thuật sẽ là: - Tạo một biến Recordset để thi hành câu lệnh SQL đưa ra danh sách kết quả thoả mãn điều kiện đặt lọc... nút Xoá bản ghi của một mẫu nhập liệu (nhập vào biến Recordset rs) như sau: Ví dụ 6: Private Sub cmDelete_Click() Dim tbao tbao = MsgBox("Đã chắc chắn xoá chưa?", vbYesNo + vbCritical) If tbao = vbYes Then rs.Delete rs.MoveNext End If End Sub 1.4 Đối tượng QueryDef Đối tượng Querydef dùng để tham chiếu tới các Query sẵn (Buil-in) trên CSDL Access, hoặc cũng thể lập trình tạo các Query từ các câu... tạo một form con đáp ứng được các kết quả theo như bài toán Cụ thể từng bước như sau: - Tạo mới form ở chế độ Design view; - Thiết lập thuộc tính Record Source cho form là một Total Query như sau: Trang 179 Copyright® Nguyễn Sơn Hải Giáo trình Microsoft Access 2000 - Thiết lập thuộc tính Defaul View cho form con là Datasheets; - Mở cửa sổ FieldList và thiết kế form như sau: - Đóng thiết kế form con lại... Trim(khachID)='"+Trim(Combo0)" _ + " GROUP BY hoadonID, khachID, ngayban " - Gán thuộc tính Recorset của form con là biến kiểu recordset vừa tạo ra (chứa kết quả đã lọc); - Ra lệnh làm tươi dữ liệu cho form con Trang 181 Copyright® Nguyễn Sơn Hải Giáo trình Microsoft Access 2000 Tất nhiên, trước đó phải khai báo một biến kiểu Database toàn cục trong form và định nghĩa nó ở thủ tục Form_Load() Toàn bộ mã lệnh cho bài toán . và các lớp đối tượng DAO; - Tầng Cơ sở dữ liệu: bao gồm các bảng, các query trong cơ sở dữ liệu thực tại. Như vậy để lập trình trên một CSDL phải sử dụng. người lập trình có thể dùng để xử lý dữ liệu theo các bài toán; - Tầng Kết nối dữ liệu: bao gồm tập hợp các công cụ, phương thứ c để kết nối tới những dữ liệu

Ngày đăng: 29/09/2013, 03:20

Hình ảnh liên quan

-T ầng Cơ sở dữ liệu: bao gồm các bảng, các query trong cơ sở dữ liệu thực tại. Như  vậy để  lập trình trên một CSDL phải sử  dụng các đối tượng, các phươ ng  thức ở tầng kết nối như là những công cụđể có thể truy cập đượ c vào CSDL tác  nghiệp xử lý - LẬP TRÌNH CƠ SỞ DỮ LIỆU

ng.

Cơ sở dữ liệu: bao gồm các bảng, các query trong cơ sở dữ liệu thực tại. Như vậy để lập trình trên một CSDL phải sử dụng các đối tượng, các phươ ng thức ở tầng kết nối như là những công cụđể có thể truy cập đượ c vào CSDL tác nghiệp xử lý Xem tại trang 3 của tài liệu.
• TableDef s- định nghĩa tập hợp các bảng (Table) cần làm việc. Đây là khả - LẬP TRÌNH CƠ SỞ DỮ LIỆU

able.

Def s- định nghĩa tập hợp các bảng (Table) cần làm việc. Đây là khả Xem tại trang 4 của tài liệu.
Recordset là đố it ượng dùng để miêu tả tập hợp các bản ghi của một bảng, của một query hoặc tập các bản ghi kết quả của việc thi hành một câu lệnh SQL nào đó - LẬP TRÌNH CƠ SỞ DỮ LIỆU

ecordset.

là đố it ượng dùng để miêu tả tập hợp các bản ghi của một bảng, của một query hoặc tập các bản ghi kết quả của việc thi hành một câu lệnh SQL nào đó Xem tại trang 6 của tài liệu.
Ví dụ sau duyệt và hiển thị toàn bộ Hoten của bảng canbo - LẬP TRÌNH CƠ SỞ DỮ LIỆU

d.

ụ sau duyệt và hiển thị toàn bộ Hoten của bảng canbo Xem tại trang 9 của tài liệu.
Ví dụ 2: Giả sử đã thêm một trường mới trên bảng cán bộ có tên luongchinh. Tạo UPDATE query để tính giá trị cho trường này = hesoluong * 290000 - LẬP TRÌNH CƠ SỞ DỮ LIỆU

d.

ụ 2: Giả sử đã thêm một trường mới trên bảng cán bộ có tên luongchinh. Tạo UPDATE query để tính giá trị cho trường này = hesoluong * 290000 Xem tại trang 13 của tài liệu.
Để tạo ra một bảng mới bằng VBA. Cú pháp tạo bảng mới như sau: - LẬP TRÌNH CƠ SỞ DỮ LIỆU

t.

ạo ra một bảng mới bằng VBA. Cú pháp tạo bảng mới như sau: Xem tại trang 15 của tài liệu.
Tiếp theo là ví dụ minh hoạ cách tạo cấu trúc một bảng dữ liệu tổng hợp những hướng dẫn đã trình bày trên - LẬP TRÌNH CƠ SỞ DỮ LIỆU

i.

ếp theo là ví dụ minh hoạ cách tạo cấu trúc một bảng dữ liệu tổng hợp những hướng dẫn đã trình bày trên Xem tại trang 16 của tài liệu.
Đối tượng Relation dùng để tạo kết nối (RelationShip) giữa 2 bảng trong CSDL Access. Dưới đây là một ví dụ  tạo kết nối giữa 2 bả ng hoadon và khach trong  CSDL Quản lý bán hàng - LẬP TRÌNH CƠ SỞ DỮ LIỆU

i.

tượng Relation dùng để tạo kết nối (RelationShip) giữa 2 bảng trong CSDL Access. Dưới đây là một ví dụ tạo kết nối giữa 2 bả ng hoadon và khach trong CSDL Quản lý bán hàng Xem tại trang 17 của tài liệu.
MsgBox &#34; Đã tồn tại bảng có tên &#34; + tbl.Name - LẬP TRÌNH CƠ SỞ DỮ LIỆU

sg.

Box &#34; Đã tồn tại bảng có tên &#34; + tbl.Name Xem tại trang 17 của tài liệu.
để làm việc này. Mục đích là đưa danh sách các khách hàng từ bảng khach vào hộp Combo để chọn, phục vụ nhu cầu lọc dữ liệu;  - LẬP TRÌNH CƠ SỞ DỮ LIỆU

l.

àm việc này. Mục đích là đưa danh sách các khách hàng từ bảng khach vào hộp Combo để chọn, phục vụ nhu cầu lọc dữ liệu; Xem tại trang 19 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan