Thao tác xoá dữ liệu

Một phần của tài liệu Tài liệu Tài liệu hướng dẫn giảng dạy - Chứng chỉ tin học quốc gia trình độ B pdf (Trang 105 - 110)

Khi người sử dụng muốn bỏ bớt lượng thông tin đang lưu trữ trong hệ thống thì họ sẽ thực hiện thao tác xoá dữ liệu. Việc xoá thông tin trên bảng có thể gây ra lỗi trên quan hệ giữa dữ liệu.

Do đó, khi xoá dữ liệu ta luôn phải kèm theo thao tác kiểm tra dữ liệu cần xoá có hợp lệ hay không.

Chứng chỉ B Tin Học Quốc Gia Trang 105/131

V.1. Cách thức xoá mẫu tin trên Form

V.1.1. Những vấn đề về xoá dữ liệu trên Form

Giống như việc thêm mới hay sửa dữ liệu trên Form, thao tác xoá mẩu tin trong nguồn dữ liệu của Form phụ thuộc vào thuộc tính Allow Deletions.

Thuộc tính Allow Deletions có kiểu là Boolean. Giá trị của thuộc tính này có thể được thiết lập thông qua trang thuộc tính, khi đó giá trị của nó là Yes hoặc No. Ngoài ra, ta cò có thể gán giá trị của thuộc tính này trong cửa sổ lệnh VBA, khi này giá trị của nó là True hoặc False. Thuộc tính Allow Deletions của Form cho phép dữ liệu trên Form có được xoá hay không tuỳ vào giá trị của nó:

ƒ Yes/True: cho phép xoá mẩu tin trên Form

ƒ No/ False: không cho phép xoá dữ liệu có trên Form

Do đó, khi thực hiện thao tác xoá ta phải chú ý đến thuộc tính Allow Deletions. Thao tác xoá dữ liệu của Form có thể được thực hiện bằng 2 cách:

ƒ Sử dụng cơ chế xoá tự động của Form bằng cách chọn mẩu tin cần xoá và nhấn phím Delete, tương tự như xoá mẩu tin của bảng.

ƒ Cách khác là ta sẽ thiết kế nút lệnh để thực hiện thao tác xoá mẩu tin hiện hành trên Form.

V.1.2. Thiết kế chức năng xoá

Thiết kế một điều khiển để kích hoạt chức năng xoá của Form, thường là Command Button. Trong thủ tục xử lý sự kiện của điều khiển đó, ta sẽ gọi thực thi lệnh xoá mẩu tin hiện hành của Form theo cú pháp như sau:

DoCmd.RunCommand acCmdDeleteRecord

Thao tác xoá tổ hiện hành trên Form thực hiện qua các bước sau:

ƒ Chọn sự kiện click của nút Xoá tổ, giả sử đặt tên cho nút là cmdXoaTo ƒ Trong thủ tục của sự kiện click ta viết đoạn lệnh sau:

Private Sub cmdXoaTo_Click()

DoCmd.RunCommand acCmdDeleteRecord End Sub

Chứng chỉ B Tin Học Quốc Gia Trang 106/131

V.2. Kiểm tra ràng buộc khi xoá dữ liệu của bảng

V.2.1. Lỗi phát sinh khi xoá dữ liệu

Thao tác xoá có thể phát sinh lỗi về ràng buộc dữ liệu giữa các bảng trong quan hệ. Trong mối quan hệ một – nhiều, nếu ta thực hiện thao tác xoá dữ liệu của bảng 1 thì có thể xảy ra lỗi khi trong bảng nhiều có thông tin liên quan đến mẩu tin cần xoá bên bảng 1.

Ta có 3 cách để xử lý để tránh lỗi khi xoá dữ liệu của bảng 1 như sau:

ƒ Chọn tính chất tự động xoá (Cascade Delete Related Records) khi thiết lập quan hệ giữa 2 bảng. Lúc này, nếu ta thực hiện thao tác xoá dữ liệu của bảng 1 thì tất cả những dòng dữ liệu liên quan đến đến mẩu tin bị xoá có trong bảng nhiều cũng sẽ bị xoá.

ƒ Không chọn tính chất tự động xoá của quan hệ, thay vào đó ta sẽ thông báo cho người sử dụng biết mẩu tin cần xoá không xoá được do tính chất của quan hệ.

ƒ Không chọn tính chất tự động xoá của quan hệ, ta sẽ viết lệnh để xóa tất cả những dữ liệu liên quan có trong bảng nhiều.

V.2.2. Thông báo khi không xoá được

Đối với hướng xử lý này, khi thực hiện lệnh xoá mẩu tin trên bảng 1 ta sẽ tìm trên những bảng có quan hệ với bảng chứa mẩu tin cần xoá, nếu tìm thấy thông tin liên quan thì thông báo cho người dùng biết là không xoá được và bỏ qua thao tác xoá, ngược lại thì thực hiện lệnh xoá mẩu tin hiện hành.

Các bước thực hiện:

ƒ Bước 1: Tìm xem thông tin của mẩu tin cần xoá có nằm trên các bảng liên quan hay không?

ƒ Bước 2: Xử lý tương ứng cho từng trường hợp tìm kiếm ở bước 1 ƒ Bước 3: Cập nhật trạng thái các điều khiển trên form

Chi tiết thực hiện các bước:

Bước 1: Tìm thông tin của mẩu tin cần xoá

ƒ Sử dụng hàm DCount hay DLookup để tìm thông tin trong các bảng liên quan với bảng chứa mẩu tin cần xoá dữ liệu, dựa vào quan hệ để tìm các bảng liên quan.

ƒ Việc tìm kiếm sẽ thực hiện trên bảng nhiều (bảng liên quan) dựa trên giá trị của Field là khoá ngoại liên kết với bảng một.

Bước 2: Xử lý theo kế quả tìm

ƒ Nếu tìm thấy thì thông báo là không xoá được và bỏ qua thao tác xoá ƒ Nếu không tìm thấy thì gọi thực hiện lệnh xoá:

DoCmd.RunCommand acCmdDeleteRecord

Bước 3: Cập nhật trạng thái các điều khiển trên Form

Chứng chỉ B Tin Học Quốc Gia Trang 107/131

Form bị rỗng, không có mẩu tin nào. Do đó ta cần phải cập nhật trạng thái sáng mờ của chức năng xoá để chặn lỗi.

ƒ Khi thực hiện thao tác xoá thì dữ liệu nguồn có thể không còn dòng nào, sau khi xoá mẩu tin cuối cùng, khi đó câu lệnh xoá sẽ gây ra lỗi ở lần thi hành tiếp theo. Vì vậy điều quan trọng nhất khi thực hiện thao tác xoá là ta phải kiểm tra xem nguồn dữ liệu còn không, nếu hết thì ta phải vô hiệu hoá chức năng xoá cho đến khi nguồn dữ liệu có mẩu tin. Ngoài ra, khi trên Form có các nút di chuyển thì ta cũng phải làm mờ chức năng di chuyển trên form

ƒ Sử dụng thuộc tính RecordsetClone.RecordCount của Form để biết được số mẩu tin hiện có trên form. Nếu RecordCount = 0 thì ta phải làm làm mờ chức năng xoá.

Ví dụ:

Xây dựng chức năng xoá thông tin của bảng DMTO cho màn hình bên dưới

Giả sử màn hình trên được thiết kế để thao tác dữ liệu trên bảng DMTO. Khi xoá thông tin của tổ hiện hành ta phải kiểm tra xem trong bảng DMNV có chứa thông tin của mẩu tin cần xoá hay không (thông qua Field MATO trong bảng DMNV), thực hiện thông báo khi không xoá được. Ta làm như sau:

ƒ Chọn sự kiện click của nút Xoá tổ, giả sử đặt tên cho nút là cmdXoaTo ƒ Trong thủ tục của sự kiện click ta viết đoạn lệnh sau:

Private Sub cmdXoaTo_Click()

If DCount("MaNv", "DMNV", "MaTo = '" & txtMaTo & "'") > 0 Then MsgBox "Khong xoa duoc to vi co nhan vien trong to"

Else DoCmd.RunCommand acCmdDeleteRecord End If If RecordsetClone.RecordCount = 0 then cmdThemTo.SetFocus cmdXoaTo.Enabled = False ‘Làm mờ các nút di chuyển nếu có End If

Chứng chỉ B Tin Học Quốc Gia Trang 108/131

End Sub

V.2.3. Xoá thông tin của bảng liên quan

Khi thực hiện lệnh xoá mẩu tin trên bảng 1 ta sẽ tìm trên những bảng có quan hệ với bảng chứa mẫu tin cần xoá, nếu tìm thấy thông tin liên quan ta sẽ xoá tất cả những thông tin liên quan trước, sau đó sẽ thực hiện thao tác xoá trên bảng một.

Để thực hiện thao tác xoá thông tin liên quan ta sẽ sử dụng cú pháp như sau: DoCmd.RunSQL “Câu truy vấn xoá dữ liệu”

Các bước thực hiện:

Bước 1: Tìm xem thông tin của mẩu tin cần xoá có nằm trên bảng liên quan hay không Bước 2: Xử lý khi tìm thấy mẩu tin liên quan

Bước 3: Gọi thực hiện lệnh xoá mẩu tin hiện hành trên Form Bước 4: Cập nhật trạng thái các điều khiển trên Form

Chi tiết thực hiện các bước:

Bước 1: Tìm thông tin của mẩu tin cần xoá

ƒ Sử dụng hàm DCount hay DLookup để tìm thông tin trong các bảng liên quan với bảng cần xoá dữ liệu, dựa vào quan hệ để tìm các bảng liên quan.

ƒ Việc tìm kiếm sẽ thực hiện trên bảng nhiều (bảng liên quan) dựa trên giá trị của Field là khoá ngoại liên kết với bảng một.

Bước 2: Xử lý khi tìm thấy mẩu tin liên quan

ƒ Gọi thực hiện lệnh xoá dữ liệu trên bảng liên quan (bảng tìm), theo cú pháp sau: DoCmd.RunSQL “Delete * From [Tên Bảng Tìm] Where [Biểu Thức Điều Kiện Xoá]”

Biểu thức điều kiện xoá là điều kiện để câu lệnh trên xoá những dòng dữ liệu trong

bảng tìm, những dòng dữ liệu này có thông tin liên quan đến mẩu tin cần xoá của Form.

Bước 3: Thực hiện lệnh xoá mẩu tin hiện hành trên Form

ƒ Gọi thực hiện câu lệnh: DoCmd.RunCommand acCmdDeleteRecord

Bước 4: Cập nhật trạng thái các điều khiển

ƒ Tương tự như thao tác xoá có báo lỗi

Sử dụng ví dụ của phần trên những ta sẽ xoá những dòng dữ liệu có trong bảng nhiều nếu tìm thấy.

Ta thực hiện như sau:

ƒ Chọn sự kiện click của nút Xoá tổ, giả sử đặt tên cho nút là cmdXoaTo ƒ Trong thủ tục của sự kiện click ta viết đoạn lệnh sau:

Chứng chỉ B Tin Học Quốc Gia Trang 109/131

If DCount("MaNv", "DMNV", "MaTo = '" & txtMaTo & "'") > 0 Then

DoCmd.RunSQL "Delete * From DMNV Where MaTo= '" & txtMaTo & "'" End If DoCmd.RunCommand acCmdDeleteRecord If RecordsetClone.RecordCount = 0 then cmdThemTo.SetFocus cmdXoaTo.Enabled = False ‘Làm mờ các nút di chuyển End If End Sub

Một phần của tài liệu Tài liệu Tài liệu hướng dẫn giảng dạy - Chứng chỉ tin học quốc gia trình độ B pdf (Trang 105 - 110)

Tải bản đầy đủ (PDF)

(132 trang)