Chương IV: THỰC HIỆN CAØI ĐẶT CHƯƠNG TRÌNH
IV.3 MỘT SỐ ĐOẠN CHƯƠNG TRÌNH TRONG BAØI SỬ DỤNG CÁC PHƯƠNG THỨC TRÊN.
PHƯƠNG THỨC TRÊN.
Để hiển thị dư liệu đã có trên table ta có đoạn mã lệnh sau:
Private Sub Display_Listview()
Dim rs As New ADODB.Recordset Dim Str
Dim mItem As listItem listItem.ListItems.Clear
Str = "select * from tblTinh order by Matinh asc"
Set rs = cn.Execute(Str) 'Thuc Hien Mot Lenh SQL duoc chi ra boi str If rs.EOF = False Then
While Not rs.EOF
Set mItem = listItem.ListItems.Add(, , rs!MaTinh) mItem.SubItems(1) = rs!TenTinh
rs.MoveNext Wend
End If End Sub
Ơû đây ListItem là đối tượng Listview có chức năng hiển thị dữ liệu, trong đoạn chương trình trên ta sử dụng phương thức (Set rs = cn.Execute(Str)) để thực hiện một câu truy vấn (Câu truy vấn trả về một Record là thông tin của table tỉnh)kết quả trả về từ câu truy vấn này được gán cho rs và được hiển thị trên Listview.
Để thêm mới một tỉnh (thành) ta có mã lệnh sau
Trong đó DE là đối tượng Data Environment mà ta đã nói ở trên còn SP_NhapTinh là các hàm (hay các Stored Procedure) đã được viết và lưu trong cơ sở dữ liệu, câu lệnh truy vấn tạo mới một tỉnh như sau:
Create proc Sp_NhapTinh
@MaTinh nchar(3), -- MaTinh và TenTinh là các tham số dầu vào của @TenTinh char(30) -- Stored Procedure
AS
Insert Into tblTINH ( MaTinh, TenTinh ) Values ( @MaTinh,@TenTinh ) GO
Tương tự với phương Stored Procedure sửa tên tỉnh
Với việc xoá một tỉnh có khác chút ít việc xoá một tỉnh có liên quan đến các ràng buộc toàn vẹn. Việc xoá một tỉnh không chỉ xóa đi tỉnh đó, việc này phải đi kém với việc xoá tất cả các huyện cũng như các xa thuộc tỉnh ngoài ra ta còn phải xoá tất các các bệnh nhân và nhân viên (cùng giấy tờ kèm theo) thuộc tỉnh cần xoá. Mã lệnh có dạng như sau:
--- Thủ tục dùng để xoá một tỉnh --- CREATE PROCEDURE Sp_XoaTinh
@Matinh nchar(3), ‘Tham số đầu vào của Stored Procedure @TenTinh char(30)
AS
--- Xoá khám bệnh úng với bệnh nhân thuộc tỉnh DELETE From tblKhamBenh
Where tblKhamBenh.MaBenhNhan in ( Select MaBenhNhan
From TblBenhNhan
Where tblBenhNhan.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen Where tblHuyen.MaTinh=@MaTinh))) --- Xoá khám bệnh úng với nhân viên thuộc tỉnh
DELETE From tblkhamBenh
( Select MaNhanVien From TblNhanVien
Where tblNhanVien.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen
Where tblHuyen.MaTinh=@MaTinh))) ---- Xóa dùng thuốc ứng với đơn thuốc của bệnh nhân DELETE From tblDungThuoc
Where tblDungThuoc.MaDonThuoc in (Select MaDonThuoc From tblDonThuoc Where tblDonThuoc.MaBenhNhan in (Select MaBenhNhan From tblBenhNhan Where tblBenhNhan.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen
Where tblHuyen.MaTinh=@MaTinh)))) -- Xoá đơn thuốc của bệnh nhân thuộc tỉnh
DELETE From tblDonThuoc
Where tblDonThuoc.MaBenhNhan in (Select MabenhNhan
From tblBenhNhan
Where tblBenhNhan.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen
Where tblHuyen.MaTinh=@MaTinh))) --- Xoá tạm ứng của bệnh nhân thuộc tỉnh
DELETE From tblTamUng
Where tblTamUng.MaBenhNhan in ( Select MaBenhNhan
From TblBenhNhan
Where tblBenhNhan.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen
Where tblHuyen.MaTinh=@MaTinh))) --- Xoá bệnh án của bệnh nhân
DELETE From tblBenhAn
Where tblBenhAn.MaBenhNhan in ( Select MaBenhNhan
From TblBenhNhan
Where tblBenhNhan.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen Where tblHuyen.MaTinh=@MaTinh))) ---Xoá các bệnh nhân thuộc tỉnh --- DELETE From tblBenhNhan
Where tblBenhNhan.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen Where tblHuyen.MaTinh=@MaTinh)) --- Xoá dùng thuốc mà nhân viên thuộc tỉnh lập DELETE From tblDungThuoc
Where tblDungThuoc.MaDonThuoc in (Select MaDonThuoc From tblDonThuoc Where tblDonThuoc.MaNhanVien in (Select MaNhanVien From tblNhanVien Where tblNhanVien.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen
Where tblHuyen.MaTinh=@MaTinh)))) --- Xoá đơn thuốc mà nhân viên lập
DELETE From tblDonThuoc
Where tblDonThuoc.MaNhanVien in (Select MaNhanVien
From tblNhanVien
Where tblNhanVien.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen
--- Xoá bệnh án mà nhân viên lập DELETE From tblBenhAn
Where tblBenhAn.MaNhanVien in ( Select MaNhanVien
From TblNhanVien
Where tblNhanVien.maXa in (Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen
Where tblHuyen.MaTinh=@MaTinh))) ---Xoá tất cả nhân viên thuộc tỉnh---
DELETE From tblNhanVien Where tblNhanVien.maXa in
(Select MaXa From tblXa Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen
Where tblHuyen.MaTinh=@MaTinh)) --- Xoá tất cả các xã thuộc tỉnh--- DELETE From tblXa
Where tblXa.MaHuyen in
(Select MaHuyen From tblHuyen Where tblHuyen.MaTinh = @Matinh) ---Xoá tất cả các huyện thuộc tỉnh--- DELETE From tblHuyen
Where tblHuyen.Matinh = @Matinh --- Xoá tỉnh có mã tỉnh được chỉ ra-- DELETE From tblTinh
Where MaTinh=@Matinh GO
Đối với các thủ tục xoá một huyện cũng nhaư một xã ta cũng phải đi xó tất cả các bệnh nhân và nhân viên trực thuộc địa danh đó.
Trong qúa trình trình bày dữ liệu chúng tôi đã sử dụng một số View để kết nối bảng ví dụ với View địa chỉ như sau:
CREATE VIEW dbo.vwDiaChi AS
SELECT dbo.tblTINH.TenTinh, dbo.tblHUYEN.TenHuyen, dbo.tblXA.TenXa, dbo.tblXA.Maxa
FROM dbo.tblHUYEN INNER JOIN
dbo.tblTINH ON dbo.tblHUYEN.MaTinh = dbo.tblTINH.MaTinh INNER JOIN
dbo.tblXA ON dbo.tblHUYEN.MaHuyen = dbo.tblXA.MaHuyen Để tìm kiếm một bệnh nhân chúng tôi sử dụng một hàm tìm kiếm hàm này trả về một table các tiêu chí tìm kiếm được chỉ ra bằng các tham số đầu vào của hàm. Ví dụ về một hàm tìm kiếm bệnh nhân theo họ và tên đầy đủ trong chương trình.
CREATE FUNCTION udf_TimBenhNhanTheoHoTen (@HoBenhNhan Char(20), @TenBenhNhan char(20)) RETURNS Table --- AS --- Return Select * From tblBenhNhan
Where (tblBenhNhan.HoBenhNhan= @HoBenhNhan) and (tblBenhNhan.TenBenhNhan= @TenBenhNhan) GO
---
Trọng đoạn chương trình trên việc tìm một bệnh nhân là khá đơn giản. Giả sử ta nhớ đầy đủ họ và tên đầy đủ của bệnh nhân ta có thể tìm theo phương pháp trên. Song nếu chỉ nhớ được họ hoặc tên của bệnh nhân thi ta cũng có thể tìm được bệnh nhân bằng các hàm tìm theo họ, theo tên bệnh nhân, trong chương trình còn sử dụng một số hàm khác mà chúng tôi không tiện trình bày trong báo cáo này.
Thoạt tiên ta có cảm giác một hàm (Function) hơi giống với một View song với View thì không có dữ liệu đầu vào còn với hàm thì ngược lại. Rõ ràng để truy xuất dữ liệu với hàm là linh hoạt hơn với View rất nhiều.