Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
1,6 MB
Nội dung
Nguyễn Phương 2011 TÀI LIỆU THỰC HÀNH CƠ SỞ DỮ LIỆU PHÂN TÁN Phần 1.1 BÀI TẬP Bài tập chương a Chuẩn đầu ra: sau người học có thể: − Định nghĩa loại phân mảnh sử dụng đại số quan hệ − Vẽ phân mảnh đọan liệu − Viết đọan mã code xử lý vấn tin liệu phân tán theo yêu cầu tóan cụ thể b Chuẩn bị: Đọc trước phần lý thuyết chương 2, ví dụ mẫu c Phương tiện: Giấy, viết d Thời lượng: tiết e Nội dung thực hành: Thực tập đến Hướng dẫn giải tập hướng dẫn ví dụ lý thuyết Bài Cho lược đồ toàn cục sau: PATIENT(NUMBER, TREATMENT) NAME, SSN, AMOUNT-DUE, DEPT, DOCTOR, MED- DEPARTMENT(DEPT, LOCATION, DIRECTOR) STAFF(STAFFNUM, DIRECTOR, TASK) Giả sử Dom(LOCATION)={HN,SG} Định nghĩa phân đoạn chúng sau: (a) DEPARTMENT phân đoạn ngang LOCATION với hai vị trí; phòng ban quản lý DIRECTOR (b) Nhân viên phòng quản lý Director văn phòng STAFF phân đoạn ngang dẫn xuất theo DEPARTMENT semi-join thuộc tính DIRECTOR (c) PATIENT phân đoạn hỗn hợp: Các thuộc tính NUMBER, NAME, SSN, AMOUNT-DUE tạo thành phân đoạn dọc sử dụng cho mục đích tính toán; thuộc tính NUMBER, NAME, DEPT, DOCTOR MED-TREATMENT tạo thành phân đoạn dọc sử dụng cho việc mô tả Phân đoạn thứ hai phân đoạn ngang dẫn xuất từ DEPARTMENT semi-join thuộc tính DEPT Đưa biểu thức tái tạo quan hệ toàn cục từ phân đoạn Bài Hãy xem lược đồ toàn cục, phân đoạn định vị sau: Lược đồ toàn cục: STUDENT(NUMBER, NAME, DEPT) Lược đồ phân đoạn: STUDENT1 = σDEPT=”EE” STUDENT Nguyễn Phương 2011 STUDENT2 = σDEPT=”CS” STUDENT Lược đồ định vị: : STUDENT1 at sites 1,2 STUDENT2 at sites 3,4 Với Dom(DEPT) = { “EE”, “CS”} (a) Viết ứng dụng đòi hỏi nhập vào mã số (number) sinh viên từ terminal xuất tên khoa, mức 1,2 suốt (b) Viết ứng dụng để chuyển sinh viên có số 232 từ phòng “EE” đến khoa “CS” mức 1,2 suốt (c) Viết ứng dụng để chuyển sinh viên có mã số khoa đưa terminal đến khoa khác, mức suốt (d) Hãy xem trường hợp ứng dụng lập lại cho nhiều giá trị số sinh viên Viết ứng dụng: • Truy cập sở liệu cho mã sinh viên cho terminal • Truy cập sở liệu sau tập hợp vài thông số đầu vào từ terminal Hãy viết ứng dụng suốt mức EXAMPLE_DDB cho thao tác chuyển nhà cung cấp 157 từ “SF” sang “LA” (xem thông tin SUPPLIER, SUPPLY; sử dụng phát biểu SQL: “INSERT INTO QUERY”.) Bài Cho quan hệ phổ quát chứa thông tin việc thực tập sinh viên sau : THUCTAP gồm thuộc tính: MASV, HOTEN, NOISINH, HOCLUC, TENDETAI, KINHPHI, NOITHUCTAP, KETQUA Tân từ: sinh viên thực tập với đề tài nhất, tỉnh xác định (NOITHUCTAP) đạt kết điểm(KETQUA) Quan hệ phân rã thành phân mảnh sau: - Tại phân mảnh – THUCTAP_THANHPHO, lưu trữ thông tin trình thực tập với NOITHUCTAP thành phố Hồ Chí Minh - Tại phân mảnh - THUCTAP_TINH_1, lưu trữ thông tin trình thực tập sinh viên với nơi thực tập không thành phố, kèm theo điều kiện kinh phí 05 triệu đồng thực tập đạt loại giỏi (kết từ 7.0 trở lên) - Tại phân mảnh - THUCTAP_TINH_2, lưu trữ thông tin trình thực tập sinh viên với nơi thực tập không thành phố, kèm theo điều kiện kinh phí không 05 triệu đồng thực tập đạt loại giỏi (kết từ 7.0 trở lên) - Tại phân mảnh - THUCTAP_TINH_3, lưu trữ thông tin sinh viên lại Biết có site lưu trữ sau: Site 1: chứa phân mảnh THUCTAP_THANHPHO Site 2: chứa phân mảnh THUCTAP_TINH_1 THUCTAP_TINH_2 Site 3: chứa phân mảnh THUCTAP_TINH_2 THUCTAP_TINH_3 Nguyễn Phương 2011 a Viết biểu thức đại số quan hệ thực việc phân rã thành phân mảnh tái hợp theo yêu cầu b Hiển thị thông tin việc thực tập sinh viên quê Nha Trang, gồm MASV, HOTEN, HOCLUC, TENDETAI, KETQUA c Thay đổi nơi thực tập sinh viên SV001 từ Nha Trang thành phố Hồ Chí Minh d Điều chỉnh kết thực tập sinh viên Lê Văn A thêm 0.5 điểm (gđịnh sv A có 1) Với câu b, c d yêu cầu viết câu truy vấn mức suốt Bài Cho quan hệ phổ quát chứa thông tin tài khoản ngân hàng sau TAIKHOAN(MATAIKHOAN, LOAITIEN, LOAITK) TENCHUTK, NGAYMO, CHINHANH, SODU, Tân từ: tài khoản có mã tài khoản (MATAIKHOAN) để phân biệt với tài khoản khác Mỗi tài khoản thuộc chủ tài khoản (TENCHUTK), mở vào ngày (NGAYMO), chi nhánh (CHINHANH) lựa chọn hai loại tiền (LOAITIEN) USD hay VND Khi mở tài khoản, chủ tài khoản đăng ký loại tài khoản (LOAITK) : tháng, tháng, năm không kỳ hạn Số tiền có tài khoản xác định thông qua số dư tài khoản (SODU) Quan hệ phổ quát phân rã thành phân đoạn sau: TK_1 : chứa thông tin tài khoản mở chi nhánh Hà Nội TK_2: chứa thông tin tài khoản mở TPHCM mà có số dư từ 100 triệu trở lên TK_3: chứa thông tin tài khoản mở TPHCM mà có số dư 100 TK_4: chứa thông tin tài khoản lại Biết có site lưu trữ sau: Site 1: chứa phân đoạn TK_1 TK_2 Site 2: chứa phân đoạn TK_2 TK_3 Site 3: chứa phân đoạn TK_3 TK_4 a Viết câu truy vấn để thực việc phân rã thành phân đoạn theo yêu cầu b Hiển thị thông tin số dư loại tiền có tài khoản khách hàng Lê Tuấn Anh c Chủ tài khoản TK001 cần thay đổi nơi giao dịch sang chi nhánh Hanoi d Khách hàng Trần Hoàng Vĩnh thực giao dịch nộp tiền vào tài khoản với số tiền triệu đồng Với câu b, c d yêu cầu viết câu truy vấn mức suốt Nguyễn Phương 2011 Bài Cho quan hệ toàn cục: NV(MaNV, Hoten, MaNQL, Phong, Luong, Diachi) DA(MaDA, TenDA, Diadiem, KP) Phancong(MaNV,MaDA) Các quan hệ phân đoạn sau: NV1(MaNV, Hoten,MaNQL, Diachi, Phong): Gồm nhân viên có lương 5tr USD trở lên NV2(MaNV, Hoten,MaNQL, Diachi, Phong): Gồm nhân viên có lương 5tr USD NV3(MaNV, Hoten, Lương): Gồm nhân viên có lương 5tr USD trở lên NV4(MaNV, Hoten, Lương): Gồm nhân viên có lương 5tr USD DA1: Danh sách dự án TP.HCM có KP từ tỉ trở lên; DA2: Danh sách dự án TP.HCM có KP tỉ; DA3: Danh sách dự án tỉnh thành khác có KP từ 500 tr trở lên; DA4: Danh sách dự án tỉnh thành khác có KP 500 tr.; Quan hệ Phân công phân đoạn theo Dự án a Viết biểu thức đại số phân đoạn tái tạo quan hệ trên; b Vì nguyên nhân giả định, nhân viên có MaNV NV01005 vi phạm kỷ luật Quyết định phạt hành thành lập trừ lương tháng 2tr., thuyên chuyển công tác nhân viên làm bảo vệ dự án Đồng Nai rút kinh phí dự án nhân viên công tác 100tr đồng đưa vào ngân sách cty Viết truy vấn xử lý trường hợp (mức suốt định vị liệu) 1.2 Bài tập chương a Chuẩn đầu ra: sau người học có thể: − Phân mảnh liệu ngang dọc theo thuật toán PHORIZONTAL BEA b Chuẩn bị: Đọc trước phần lý thuyết chương 3, thuật tóan, ví dụ mẫu c Phương tiện: Giấy, viết d Thời lượng: tiết e Nội dung thực hành: Thực tập đến Hướng dẫn giải tập hướng dẫn ví dụ lý thuyết Bài 1: Nguyễn Phương 2011 Cho quan hệ NHANVIEN công ty dầu khí THAMNIEN PHONG PHAI CHUCVU MaNV HT E1 Trung M Manager 12 E2 Phương F Analyst 24 E3 Long M Analyst E4 Đại M Consultant 10 E5 Hùng M Engineer 48 E6 Dũng M Programmer 18 E7 Hương F Manager 24 E8 Thảo F Manager E9 Mai F Engineer 36 E10 Đạo M Manager 40 Nhân viên công ty tham gia dự án theo phòng ban, tổ phòng ban từ đến làm việc dự án văn phòng tất nữ nhân viên làm việc dự án này, tổ phòng ban từ trở làm việc dự án giàn khoan, tổng cộng công ty có 02 dự án thực 10 năm giàn khoan Vũng Tàu Q.1, TP.HCM Giả sử có hai ứng dụng truy xuất NHÂN VIÊN: Ứng dụng thứ truy cập CSDL để quản lý tiền lương nhân viên làm việc lương hưu nhân viên làm việc tuổi hưu Tuổi hưu xác định nam có thâm niên 30 năm, nữ 25 năm Ứng dụng thứ hai chạy phòng ban nào, truy cập thông tin nhân viên theo dự án Sử dụng thuật toán COM_IN PHORIZONTAL tìm tập hợp vị từ giao tối thiểu phân mảnh ngang cho quan hệ NHANVIEN theo yêu cầu ứng dụng Bài 2: Cho quan hệ NHANVIEN công ty dầu khí THAMNIEN PHONG PHAI CHUCVU MaNV HT E1 Trung M Manager 12 E2 Phương F Analyst 24 E3 Long M Analyst E4 Đại M Consultant 10 E5 Hùng M Engineer 48 E6 Dũng M Programmer 18 E7 Hương F Manager 24 E8 Thảo F Manager 5 E9 Mai F Engineer 36 E10 Hải F Manager 40 Nhân viên công ty tham gia dự án theo phòng ban, tổ phòng ban từ đến làm việc dự án văn phòng, tổ phòng ban làm việc dự án giàn khoan, tổng cộng công ty có 02 dự án thực 10 năm giàn khoan Vũng Tàu Q.1, TP.HCM Tất nam nhân viên làm việc văn phòng dự án giàn khoan Giả sử có hai ứng dụng truy xuất NHÂN VIÊN: Nguyễn Phương 2011 Ứng dụng thứ truy cập CSDL để quản lý tiền lương nhân viên làm việc lương hưu nhân viên làm việc tuổi hưu Tuổi hưu xác định nam có thâm niên 30 năm, nữ 25 năm Ứng dụng thứ hai chạy phòng ban nào, truy cập thông tin nhân viên theo dự án Sử dụng thuật toán COM_IN PHORIZONTAL tìm tập hợp vị từ giao tối thiểu phân mảnh ngang cho quan hệ NHANVIEN theo yêu cầu ứng dụng Bài Cho quan hệ toàn cục Nhân viên (NV), Phòng ban (PB) Dự án (DA) sau: NV(MaNV, HoNV, TenNV, NoiThuongTru, MaPhong) PB(MaPhong, TenPhong, MaDA) DA(MaDA, TenDA, Diadiem) Xét truy vấn q1: SELECT MaNV, HoNV, TenNV, MaPhong FROM NV q2: SELECT MaNV, HoNV, TenNV FROM NV WHERE MaPhong=Value q3: SELECT MaNV FROM NV WHERE MaPhong=Value AND NoiThuongTru=Value q4: SELECT TenNV FROM NV q5: SELECT MaNV, HoNV, TenNV FROM NV S1 S2 S3 q1 10 20 0 10 q2 Tần số sử dụng truy vấn site sau: 35 q3 10 q4 15 q5 a Xây dựng ma trận lực tất thuộc tính quan hệ NV; b Cho biết số truy xuất đến cặp thuộc tính cho ứng dụng vị trí refi(qj)=1 Phân đoạn dọc quan hệ NV sử dụng thuật toán lượng nối BEA 1.3 Bài tập chương a Chuẩn đầu ra: sau người học có thể: − Vẽ truy vấn ứng với tóan cụ thể − Biến đổi truy vấn tòan cục sang truy vấn phân mảnh liệu phân tán có − Xác định chi phí truy vấn, xử lý liệu − Đưa truy vấn tối ưu cho tóan cụ thể b Chuẩn bị: Đọc trước phần lý thuyết chương 4, ví dụ mẫu c Phương tiện: Giấy, viết d Thời lượng: tiết Nguyễn Phương 2011 e Nội dung thực hành: Thực tập đến Hướng dẫn giải tập hướng dẫn ví dụ lý thuyết Bài Cho quan hệ toàn cục Nhân viên (NV), Phòng ban (PB) Dự án (DA) sau: NV(MaNV, HoNV, TenNV, NoiThuongTru, MaPhong) PB(MaPhong, TenPhong, MaDA) DA(MaDA, TenDA, Diadiem) Quan hệ Nhân viên phân làm mảnh lưu danh sách nhân viên theo mã Phòng Dự án chia làm mảnh theo địa điểm thuộc hai miền Nam Bắc Phòng Ban chia theo mã dự án Biến đổi câu truy vấn sau mảnh: SELECT HoNV, TenNV FROM NV, PB, DA WHERE NV.MaPhong=PB.MaPhong AND PB.MaDA=DA.MaDA AND Diadiem = “LONGAN” AND TenPhong = “QUAN LY” Bài Cho lược đồ sở liệu Trong quan hệ gồm khách hàng (customer), người gửi (depositor), tài khoản (account), chi nhánh (branch), người vay (borrower), tiền vay (loan) Quan hệ account chia làm đoạn theo số tiền dư balance: lớn 100 triệu USD site, lại lưu site thứ Loan phân hoạch theo mảnh tương tự, với số tiền vay amount với ranh giới 100triệu đồng lưu site khác Hay bảng depositor borrower phân mảnh ngang tương ứng theo account loan đặt site khác tương ứng Hãy biến đổi truy vấn sau thành vấn tin rút gọn mảnh select distinct customer_name from borrower, loan Nguyễn Phương 2011 where borrower.loan_number = loan.loan_number and branch_name = “Perryridge” and (branch_name, customer_name) in (select branch_name, customer-name from depositor, account where depositor.account_number =account.account_number) Bài Cho quan hệ toàn cục: DEPT( dept, category, location, director); - phòng ban có director, thuộc category STAFF( staffnum, director, task); PATIENT( number, name, ssn, dept, doctor, med-treatment, drug, quan) Trong khoa Nhi không dùng thuốc aspirin, ssn = {Y,N} Các quan hệ phân mảnh sau: DEPT_NOI: Chứa thông tin phòng ban Khoa Nội (category=NOI), lưu trữ site 1; DEPT_NGOAI: Chứa thông tin phòng ban Khoa Ngoại, lưu trữ site 2; DEPT_NHI: Chứa thông tin phòng ban Khoa Nhi, lưu trữ site 3; DEPT#: Chứa thông tin các phòng ban Khoa lại, lưu trữ site 4; STAFF_NOI: Các nhóm cán phòng ban Khoa Nội, lưu trữ site 1; STAFF_NGOAI: Các nhóm cán phòng ban Khoa Ngoại, lưu trữ site 2; STAFF_NHI: Các nhóm cán phòng ban Khoa Nhi, lưu trữ site 3; STAFF#: Các nhóm cán phòng ban Khoa khác, lưu trữ site 4; PATIENT_Y(number, name, ssn): Dùng quản lý chung bệnh nhân, ssn=“Y”, lưu trữ site 1,4; PATIENT_N(number, name, ssn): Dùng quản lý chung bệnh nhân, ssn= “N”, lưu trữ site 2,3; PATIENT_N1(number, dept, doctor, med-treatment,drug,quan): Quản lý Khoa Nội, điều trị nhạy cảm (med-treatment= “intensive”), lưu trữ site 1,3; PATIENT_N2(number, dept, doctor, med-treatment,drug,quan): Quản lý Khoa Nội,điều trị không nhạy cảm, lưu trữ site 2,4; PATIENT_N3(number, dept, doctor, med-treatment,drug,quan): Quản lý Khoa Ngoại, site 2,5; PATIENT_N4(number, dept, doctor, med-treatment,drug,quan): Quản lý Khoa Nhi, site 3,7; PATIENT#(number, dept, doctor, med-treatment,drug,quan): Quản lý khoa lại, site 4,8; Nguyễn Phương 2011 a) Vẽ phân mảnh viết biểu thức định nghĩa phân mảnh, tái hợp phân mảnh trên; (1 điểm) b) Viết truy vấn chuyển bệnh nhân có name nhập từ terminal từ khoa sang khoa khác, tên khoa nhập từ terminal, Giả định việc nhập vào tên khoa không giống tên khoa có bệnh nhân, name không trùng lặp nhau, viết mức ánh xạ cục bộ; (4 điểm) c) Vẽ sơ đồ kết của: (1 điểm) DEPT JNdept=dept PATIENT DEPT JNdirector=director STAFF d) Biến đổi truy vấn toàn cục thành phân mảnh Ψcategory,avg(quan)Пcategory,taskσdrug= “aspirin” (DEPT NJN STAFF JN dept=dept PATIENT) (1 điểm) Phần THỰC HÀNH Nguyễn Phương 2011 a Chuẩn đầu ra: sau người học có thể: − Xây dựng từ điển liệu, xác định lược đồ sở liệu phân tán − Xây dựng phần mềm có chức sau: i quản lý sở liệu phân tán; ii quản lý từ điển liệu sở liệu phân tán; iii thao tác xử lý liệu CSDL phân tán: cầu nối người dùng sở liệu vật lý iv phân mảnh liệu b Chuẩn bị: Ôn tập kết hợp tất chương 1-4 c Phương tiện: Máy tính có cài đặt ngôn ngữ cấp cao, hệ quản trị sở liệu: SQL Server Oracle… d Thời lượng: 10 tiết thực hành + 50 tiết chuẩn bị nhà (kéo dài học kỳ) e Nội dung thực hành: Thực tập đến Bài Tạo chương trình theo yêu cầu sau: a Làm việc sở liệu phân tán máy tính (site) Lược đồ phân mảnh, phải tồn quan hệ phân mảnh, quan hệ phân hỗn hợp mảnh Lược đồ định vị liệu không giống site, giao lược đồ khác rỗng b Thiết lập từ liệu để quản lý lược đồ sở liệu Từ điển liệu phải quản lý tất thông tin lược đồ, đối tượng server, database, tables, attribute, predicates, operators… c Chương trình tối thiểu cho người dùng: i thao tác sở liệu với thao tác sau: tìm kiếm mở rộng tiêu chí, thông tin có CSDL, chỉnh sửa, thêm xóa thông tin tìm Giao diện tùy chọn thiết kế Người dùng bảng, cấu trúc sở liệu Chỉ biết tìm kiếm hiệu chỉnh liệu có ii Quản lý thông tin từ diển liệu, phù hợp với thay đổi từ điển liệu biến đổi liệu sở liệu d Nội dung báo cáo: − Mô tả toán, sở liệu, lược đồ liệu site − Xác định từ điển liệu 10 - Phần mã lệnh: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace Ex10_3 { public partial class Form1 : Form { // Chuỗi kết nối string strConnectionString = "Data Source=DAONGUYEN-PC;Initial Catalog=QuanLyBanHang;Integrated Security=True"; // Đối tượng kết nối SqlConnection conn = null; // Đối tượng đưa liệu vào DataTable dtKhachHang SqlDataAdapter daKhachHang = null; // Đối tượng hiển thị liệu lên Form DataTable dtKhachHang = null; // Đối tượng đưa liệu vào DataTable dtThanhPho SqlDataAdapter daThanhPho = null; // Đối tượng hiển thị liệu lên Form DataTable dtThanhPho = null; Giảng viên : Nguyễn Minh Đạo Trang 10 public Form1() { InitializeComponent(); } void LoadData() { try { // Khởi động connection conn = new SqlConnection(strConnectionString); if (conn.State == ConnectionState.Open) conn.Close(); conn.Open(); // Vận chuyển liệu vào DataTable dtThanhPho daThanhPho = new SqlDataAdapter("SELECT * FROM THANHPHO", conn); dtThanhPho = new DataTable(); dtThanhPho.Clear(); daThanhPho.Fill(dtThanhPho); // Đưa liệu lên ComboBox DataGridView (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).DataSource = dtThanhPho; (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).DisplayMember = "TenThanhPho"; (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).ValueMember = "ThanhPho"; // Vận chuyển liệu vào DataTable dtKhachHang daKhachHang = new SqlDataAdapter("SELECT * FROM KHACHHANG", conn); dtKhachHang = new DataTable(); dtKhachHang.Clear(); daKhachHang.Fill(dtKhachHang); // Đưa liệu lên DataGridView dgvKHACHHANG.DataSource = dtKhachHang; } catch (SqlException) { MessageBox.Show("Không lấy nội dung table KHACHHANG Lỗi rồi!!!"); } } private void Form1_Load(object sender, EventArgs e) { LoadData(); } private void btnReLoad_Click(object sender, EventArgs e) { LoadData(); } Giảng viên : Nguyễn Minh Đạo Trang 11 private void btnThoat_Click(object sender, EventArgs e) { // Khai báo biến traloi DialogResult traloi; // Hiện hộp thoại hỏi đáp traloi = MessageBox.Show("Chắc không?", "Trả lời", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); // Kiểm tra có nhắp chọn nút Ok không? if (traloi == DialogResult.OK) Application.Exit(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Giải phóng tài nguyên dtKhachHang.Dispose(); dtKhachHang = null; // Hủy kết nối conn = null; } } } III Các thao tác liệu: Thêm – Sửa - Xóa Ví dụ 10.4: Từ Ví dụ 10.3, bổ sung button sau Xóa (btnXoa): xóa record hành khỏi table KhachHang Khi chọn mẫu tin click nút Xóa, thông báo xác nhận việc xóa Giảng viên : Nguyễn Minh Đạo Trang 12 Click nút Yes để xóa No để hủy thao tác Khi click Yes, thông báo: Click nút Reload, ta thấy mẫu tin bị xóa Khi click No, thông báo: - Phần mã nguồn using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace Ex10_4 { Giảng viên : Nguyễn Minh Đạo Trang 13 public partial class Form1 : Form { // Chuỗi kết nối string strConnectionString = "Data Source=DAONGUYEN-PC;Initial Catalog=QuanLyBanHang;Integrated Security=True"; // Đối tượng kết nối SqlConnection conn = null; // Đối tượng đưa liệu vào DataTable dtKhachHang SqlDataAdapter daKhachHang = null; // Đối tượng hiển thị liệu lên Form DataTable dtKhachHang = null; // Đối tượng đưa liệu vào DataTable dtThanhPho SqlDataAdapter daThanhPho = null; // Đối tượng hiển thị liệu lên Form DataTable dtThanhPho = null; public Form1() { InitializeComponent(); } void LoadData() { try { // Khởi động connection conn = new SqlConnection(strConnectionString); if (conn.State == ConnectionState.Open) conn.Close(); conn.Open(); // Vận chuyển liệu vào DataTable dtThanhPho daThanhPho = new SqlDataAdapter("SELECT * FROM THANHPHO", conn); dtThanhPho = new DataTable(); dtThanhPho.Clear(); daThanhPho.Fill(dtThanhPho); // Đưa liệu lên ComboBox DataGridView (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).DataSource = dtThanhPho; (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).DisplayMember = "TenThanhPho"; (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).ValueMember = "ThanhPho"; // Vận chuyển liệu vào DataTable dtKhachHang daKhachHang = new SqlDataAdapter("SELECT * FROM KHACHHANG", conn); dtKhachHang = new DataTable(); dtKhachHang.Clear(); daKhachHang.Fill(dtKhachHang); // Đưa liệu lên DataGridView Giảng viên : Nguyễn Minh Đạo Trang 14 dgvKHACHHANG.DataSource = dtKhachHang; } catch (SqlException) { MessageBox.Show("Không lấy nội dung table KHACHHANG Lỗi rồi!!!"); } } private void Form1_Load(object sender, EventArgs e) { LoadData(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Giải phóng tài nguyên dtKhachHang.Dispose(); dtKhachHang = null; // Hủy kết nối conn = null; } private void btnThoat_Click(object sender, EventArgs e) { // Khai báo biến traloi DialogResult traloi; // Hiện hộp thoại hỏi đáp traloi = MessageBox.Show("Chắc không?", "Trả lời", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); // Kiểm tra có nhắp chọn nút Ok không? if (traloi == DialogResult.OK) Application.Exit(); } private void btnReLoad_Click(object sender, EventArgs e) { LoadData(); } private void btnXoa_Click(object sender, EventArgs e) { // Mở kết nối if (conn.State == ConnectionState.Open) conn.Close(); conn.Open(); try { // Thực lệnh SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; Giảng viên : Nguyễn Minh Đạo Trang 15 // Lấy thứ tự record hành int r = dgvKHACHHANG.CurrentCell.RowIndex; // Lấy MaKH record hành string strMAKH = dgvKHACHHANG.Rows[r].Cells[0].Value.ToString(); // Viết câu lệnh SQL cmd.CommandText = System.String.Concat("Delete From KhachHang Where MaKH='" + strMAKH + "'"); cmd.CommandType = CommandType.Text; // Hiện thông báo xác nhận việc xóa mẫu tin // Khai báo biến traloi DialogResult traloi; // Hiện hộp thoại hỏi đáp traloi = MessageBox.Show("Chắc xóa mẫu tin không?", "Trả lời", MessageBoxButtons.YesNo, MessageBoxIcon.Question); // Kiểm tra có nhắp chọn nút Ok không? if (traloi == DialogResult.Yes) { // Thực câu lệnh SQL cmd.ExecuteNonQuery(); // Cập nhật lại DataGridView LoadData(); // Thông báo MessageBox.Show("Đã xóa xong!"); } else { // Thông báo MessageBox.Show("Không thực việc xóa mẫu tin!"); } } catch (SqlException) { MessageBox.Show("Không xóa Lỗi rồi!!!"); } // Đóng kết nối conn.Close(); } } } Ví dụ 10.5: Từ Ví dụ 10.4, bổ sung đối tượng sau - Panel, có + TextBox: txtMaKH, txtTenCty, txtDiachi, txtDienthoai + ComboBox: cbThanhpho - Button: btnThem, btnSua, btnLuu, btnHuy * Yêu cầu: - Thiết kế không cho người dùng thao tác (Enabled = false) load form: Giảng viên : Nguyễn Minh Đạo Trang 16 + Panel + Các Button Lưu, Hủy - Điều chỉnh lại thuộc tính (properties) DataGridView + AllowUserToAddRows = False + EditMode = EditProgrammatically - Khi Form load: đưa liệu từ table KhachHang lên DataGridView (dgvKHACHHANG), có bẫy lỗi - Nhắp vào Button ReLoad: load lại nội dung table KhachHang lên dgvKHACHHANG - Nhắp vào Button Thêm: + Xóa trống đối tượng Panel + Cho phép nhập thông tin khách hàng vào đối tượng Panel + Không cho phép thao tác Button: Thêm, Sửa, Xóa, Thoát + Cho phép thao tác Button: Lưu, Hủy - Nhắp vào Button Sửa: + Đưa thông tin khách hàng chọn DataGridView lên Panel + Cho phép nhập / sửa thông tin khách hàng vào / đối tượng Panel + Không cho phép thao tác Button: Thêm, Sửa, Xóa, Thoát + Cho phép thao tác Button: Lưu, Hủy - Nhắp vàp Button Lưu + Insert / Update thông tin khách hàng từ Panel vào table KhachHang + ReLoad lại DataGridView - Nhắp vàp Button Hủy: + Xóa trống đối tượng Panel Giảng viên : Nguyễn Minh Đạo Trang 17 + Không cho phép nhập thông tin khách hàng vào đối tượng Panel - Phần mã lệnh: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace Ex10_5 { public partial class Form1 : Form { // Chuỗi kết nối string strConnectionString = "Data Source=DAONGUYEN-PC;Initial Catalog=QuanLyBanHang;Integrated Security=True"; // Đối tượng kết nối SqlConnection conn = null; // Đối tượng đưa liệu vào DataTable dtKhachHang SqlDataAdapter daKhachHang = null; // Đối tượng hiển thị liệu lên Form DataTable dtKhachHang = null; // Đối tượng đưa liệu vào DataTable dtThanhPho SqlDataAdapter daThanhPho = null; // Đối tượng hiển thị liệu lên Form DataTable dtThanhPho = null; // Khai báo biến kiểm tra việc Thêm hay Sửa liệu bool Them; public Form1() { InitializeComponent(); } void LoadData() { try { // Khởi động connection conn = new SqlConnection(strConnectionString); if (conn.State == ConnectionState.Open) conn.Close(); conn.Open(); // Vận chuyển liệu vào DataTable dtThanhPho daThanhPho = new SqlDataAdapter("SELECT * FROM THANHPHO", conn); dtThanhPho = new DataTable(); Giảng viên : Nguyễn Minh Đạo Trang 18 dtThanhPho.Clear(); daThanhPho.Fill(dtThanhPho); // Đưa liệu lên ComboBox DataGridView (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).DataSource = dtThanhPho; (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).DisplayMember = "TenThanhPho"; (dgvKHACHHANG.Columns["ThanhPho"] as DataGridViewComboBoxColumn).ValueMember = "ThanhPho"; // Vận chuyển liệu vào DataTable dtKhachHang daKhachHang = new SqlDataAdapter("SELECT * FROM KHACHHANG", conn); dtKhachHang = new DataTable(); dtKhachHang.Clear(); daKhachHang.Fill(dtKhachHang); // Đưa liệu lên DataGridView dgvKHACHHANG.DataSource = dtKhachHang; // Xóa trống đối tượng Panel this.txtMaKH.ResetText(); this.txtTenCty.ResetText(); this.txtDiaChi.ResetText(); this.txtDienThoai.ResetText(); // Không cho thao tác nút Lưu / Hủy this.btnLuu.Enabled = false; this.btnHuy.Enabled = false; this.panel.Enabled = false; // Cho thao tác nút Thêm / Sửa / Xóa / Thoát this.btnThem.Enabled = true; this.btnSua.Enabled = true; this.btnXoa.Enabled = true; this.btnThoat.Enabled = true; } catch (SqlException) { MessageBox.Show("Không lấy nội dung table KHACHHANG Lỗi rồi!!!"); } } private void Form1_Load(object sender, EventArgs e) { LoadData(); } private void btnReLoad_Click(object sender, EventArgs e) { LoadData(); } Giảng viên : Nguyễn Minh Đạo Trang 19 private void btnXoa_Click(object sender, EventArgs e) { // Mở kết nối if (conn.State == ConnectionState.Open) conn.Close(); conn.Open(); try { // Thực lệnh SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; // Lấy thứ tự record hành int r = dgvKHACHHANG.CurrentCell.RowIndex; // Lấy MaKH record hành string strMAKH = dgvKHACHHANG.Rows[r].Cells[0].Value.ToString(); // Viết câu lệnh SQL cmd.CommandText = System.String.Concat("Delete From KhachHang Where MaKH='" + strMAKH + "'"); cmd.CommandType = CommandType.Text; // Hiện thông báo xác nhận việc xóa mẫu tin // Khai báo biến traloi DialogResult traloi; // Hiện hộp thoại hỏi đáp traloi = MessageBox.Show("Chắc xóa mẫu tin không?", "Trả lời", MessageBoxButtons.YesNo, MessageBoxIcon.Question); // Kiểm tra có nhắp chọn nút Ok không? if (traloi == DialogResult.Yes) { // Thực câu lệnh SQL cmd.ExecuteNonQuery(); // Cập nhật lại DataGridView LoadData(); // Thông báo MessageBox.Show("Đã xóa xong!"); } else { // Thông báo MessageBox.Show("Không thực việc xóa mẫu tin!"); } } catch (SqlException) { MessageBox.Show("Không xóa Lỗi rồi!!!"); } // Đóng kết nối conn.Close(); } Giảng viên : Nguyễn Minh Đạo Trang 20 private void btnThoat_Click(object sender, EventArgs e) { // Khai báo biến traloi DialogResult traloi; // Hiện hộp thoại hỏi đáp traloi = MessageBox.Show("Chắc không?", "Trả lời", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); // Kiểm tra có nhắp chọn nút Ok không? if (traloi == DialogResult.OK) Application.Exit(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Giải phóng tài nguyên dtKhachHang.Dispose(); dtKhachHang = null; // Hủy kết nối conn = null; } private void btnThem_Click(object sender, EventArgs e) { // Kich hoạt biến Them Them = true; // Xóa trống đối tượng Panel this.txtMaKH.ResetText(); this.txtTenCty.ResetText(); this.txtDiaChi.ResetText(); this.txtDienThoai.ResetText(); // Cho thao tác nút Lưu / Hủy / Panel this.btnLuu.Enabled = true; this.btnHuy.Enabled = true; this.panel.Enabled = true; // Không cho thao tác nút Thêm / Xóa / Thoát this.btnThem.Enabled = false; this.btnSua.Enabled = false; this.btnXoa.Enabled = false; this.btnThoat.Enabled = false; // Đưa liệu lên ComboBox this.cbThanhPho.DataSource = dtThanhPho; this.cbThanhPho.DisplayMember = "TenThanhPho"; this.cbThanhPho.ValueMember = "ThanhPho"; // Đưa trỏ đến TextField txtMaKH this.txtMaKH.Focus(); } private void btnSua_Click(object sender, EventArgs e) { // Kích hoạt biến Sửa Giảng viên : Nguyễn Minh Đạo Trang 21 Them = false; // Đưa liệu lên ComboBox this.cbThanhPho.DataSource = dtThanhPho; this.cbThanhPho.DisplayMember = "TenThanhPho"; this.cbThanhPho.ValueMember = "ThanhPho"; // Cho phép thao tác Panel this.panel.Enabled = true; // Thứ tự dòng hành int r = dgvKHACHHANG.CurrentCell.RowIndex; // Chuyển thông tin lên panel this.txtMaKH.Text = dgvKHACHHANG.Rows[r].Cells[0].Value.ToString(); this.txtTenCty.Text = dgvKHACHHANG.Rows[r].Cells[1].Value.ToString(); this.txtDiaChi.Text = dgvKHACHHANG.Rows[r].Cells[2].Value.ToString(); this.cbThanhPho.SelectedValue = dgvKHACHHANG.Rows[r].Cells[3].Value.ToString(); this.txtDienThoai.Text = dgvKHACHHANG.Rows[r].Cells[4].Value.ToString(); // Cho thao tác nút Lưu / Hủy / Panel this.btnLuu.Enabled = true; this.btnHuy.Enabled = true; this.panel.Enabled = true; // Không cho thao tác nút Thêm / Xóa / Thoát this.btnThem.Enabled = false; this.btnSua.Enabled = false; this.btnXoa.Enabled = false; this.btnThoat.Enabled = false; // Đưa trỏ đến TextField txtMaKH this.txtMaKH.Focus(); } private void btnLuu_Click(object sender, EventArgs e) { // Mở kết nối if (conn.State == ConnectionState.Open) conn.Close(); conn.Open(); // Thêm liệu if (Them) { try { // Thực lệnh SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; // Lệnh Insert InTo cmd.CommandText = System.String.Concat("Insert Into KhachHang Values(" + "'" + Giảng viên : Nguyễn Minh Đạo Trang 22 this.txtMaKH.Text.ToString() + "',N'" + this.txtTenCty.Text.ToString() + "',N'" + this.txtDiaChi.Text.ToString() + "','" + this.cbThanhPho.SelectedValue.ToString() + "','" + this.txtDienThoai.Text.ToString() + "')"); cmd.CommandType = CommandType.Text; cmd.ExecuteNonQuery(); // Load lại liệu DataGridView LoadData(); // Thông báo MessageBox.Show("Đã thêm xong!"); } catch (SqlException) { MessageBox.Show("Không thêm Lỗi rồi!"); } } if (!Them) { try { // Thực lệnh SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; // Thứ tự dòng hành int r = dgvKHACHHANG.CurrentCell.RowIndex; // MaKH hành string strMAKH = dgvKHACHHANG.Rows[r].Cells[0].Value.ToString(); // Câu lệnh SQL cmd.CommandText = System.String.Concat("Update KhachHang Set TenCty=N'" + this.txtTenCty.Text.ToString() + "', DiaChi=N'" + this.txtDiaChi.Text.ToString() + "', ThanhPho='" + this.cbThanhPho.SelectedValue.ToString() + "', DienThoai='" + this.txtDienThoai.Text.ToString() + "' Where MaKH='" + strMAKH + "'"); // Cập nhật cmd.CommandType = CommandType.Text; cmd.ExecuteNonQuery(); // Load lại liệu DataGridView LoadData(); // Thông báo MessageBox.Show("Đã sửa xong!"); } catch (SqlException) { MessageBox.Show("Không sửa Lỗi rồi!"); } } Giảng viên : Nguyễn Minh Đạo Trang 23 // Đóng kết nối conn.Close(); } private void btnHuy_Click(object sender, EventArgs e) { // Xóa trống đối tượng Panel this.txtMaKH.ResetText(); this.txtTenCty.ResetText(); this.txtDiaChi.ResetText(); this.txtDienThoai.ResetText(); // Cho thao tác nút Thêm / Sửa / Xóa / Thoát this.btnThem.Enabled = true; this.btnSua.Enabled = true; this.btnXoa.Enabled = true; this.btnThoat.Enabled = true; // Không cho thao tác nút Lưu / Hủy / Panel this.btnLuu.Enabled = false; this.btnHuy.Enabled = false; this.panel.Enabled = false; } } } Giảng viên : Nguyễn Minh Đạo Trang 24 [...]... 2011 Bài 2 Tạo chương trình cho phép phân mảnh dữ liệu theo thuật toán năng lượng kết (BEA) Bài 3 Nâng cấp chương trình ở bài 1, cho phép người dùng phân mảnh dữ liệu ngang, dọc theo ý muốn dựa trên các thông tin của từ điển dữ liệu và cơ sở dữ liệu sẵn có 11 Nguyễn Phương 2011 TÀI LIỆU THAM KHẢO 1 Nguyễn Trung Trực Cơ sở dữ liệu phân bố NXB ĐHQG 2004 2 Nguyễn Bá Tường Nhập môn cơ sở dữ liệu phân tán, ... nối dữ liệu từ ngôn ngữ cấp cao (đính kèm trang sau) 12 Bài 10-11: LẬP TRÌNH KẾT NỐI CƠ SỞ DỮ LIỆU Bước 1: - Database được sử dụng (DATABASENAME) là QuanLyBanHang, gồm có các bảng sau: + Nhanvien + HoaDon + Sanpham + ChiTietHoaDon + Khachhang Giảng viên : Nguyễn Minh Đạo Trang 1 + ThanhPho Bước 2: Nhập dữ liệu cho các bảng : Bảng ThanhPho Bài tập 1: Đưa dữ liệu lên các đối tượng ListBox / ComboBox... trong ListBox private void lstThanhPho_Click(object sender, EventArgs e) { MessageBox.Show("Bạn chọn Thành phố :" + lstThanhPho.SelectedValue.ToString(), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } Nhập dữ liệu cho bảng KhachHang: Giảng viên : Nguyễn Minh Đạo Trang 4 Bài tập 2 Đưa dữ liệu lên DataGridView Ví dụ 10.2: Thiết kế form như sau * Yêu cầu: Khi Form load: đưa dữ... Nguyễn Minh Đạo Trang 8 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // Giải phóng tài nguyên dtKhachHang.Dispose(); dtKhachHang = null; // Hủy kết nối conn = null; } } } Bài tập 3: Đưa dữ liệu vào ComboBox trong DataGridView Ví dụ 10.3: Từ Ví Dụ 10.2, bổ sung button ReLoad (btnReLoad): load lại nội dung của table KhachHang vào DataGridView Chú ý: Vào trong thuộc tính Columns... lệnh SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; Giảng viên : Nguyễn Minh Đạo Trang 15 // Lấy thứ tự record hiện hành int r = dgvKHACHHANG.CurrentCell.RowIndex; // Lấy MaKH của record hiện hành string strMAKH = dgvKHACHHANG.Rows[r].Cells[0].Value.ToString(); // Viết câu lệnh SQL cmd.CommandText = System.String.Concat("Delete From KhachHang Where MaKH='"... conn.Close(); conn.Open(); try { // Thực hiện lệnh SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; // Lấy thứ tự record hiện hành int r = dgvKHACHHANG.CurrentCell.RowIndex; // Lấy MaKH của record hiện hành string strMAKH = dgvKHACHHANG.Rows[r].Cells[0].Value.ToString(); // Viết câu lệnh SQL cmd.CommandText = System.String.Concat("Delete From KhachHang Where MaKH='"... được Lỗi rồi!"); } } if (!Them) { try { // Thực hiện lệnh SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; // Thứ tự dòng hiện hành int r = dgvKHACHHANG.CurrentCell.RowIndex; // MaKH hiện hành string strMAKH = dgvKHACHHANG.Rows[r].Cells[0].Value.ToString(); // Câu lệnh SQL cmd.CommandText = System.String.Concat("Update KhachHang Set TenCty=N'" + this.txtTenCty.Text.ToString()... this.cbThanhPho.DataSource = dtThanhPho; this.cbThanhPho.DisplayMember = "TenThanhPho"; this.cbThanhPho.ValueMember = "ThanhPho"; // Cho phép thao tác trên Panel this.panel.Enabled = true; // Thứ tự dòng hiện hành int r = dgvKHACHHANG.CurrentCell.RowIndex; // Chuyển thông tin lên panel this.txtMaKH.Text = dgvKHACHHANG.Rows[r].Cells[0].Value.ToString(); this.txtTenCty.Text = dgvKHACHHANG.Rows[r].Cells[1].Value.ToString();... dtKhachHang.Dispose(); dtKhachHang = null; // Hủy kết nối conn = null; } } } III Các thao tác trên dữ liệu: Thêm – Sửa - Xóa Ví dụ 10.4: Từ Ví dụ 10.3, bổ sung button sau Xóa (btnXoa): xóa record hiện hành ra khỏi table KhachHang Khi chọn mẫu tin và click nút Xóa, sẽ hiện thông báo xác nhận việc xóa Giảng viên : Nguyễn Minh Đạo Trang 12 Click nút Yes để xóa và No để hủy thao tác Khi click Yes, hiện