Các điều khiển này đều có thể trực tiếp nối kết với một trường trong một cơ sở dữ liệu thông qua một điều khiển dữ liệu hoặc nguồn dữ liệu khác như trình thiết kế DataEnvironment.
Nhập dữ liệu với điều khiển TEXTBOX : Dùng sữa đổi dữ liệu kiểu chuỗi và kiểu số từ một cơ sở dữ liệu.
Ràng buộc vào trình thiết kế DataEnvironment : Là khả năng tạo một giao diện người sử dụng ràng buộc dữ liệu. Bởi vì có thể chia sẽ trình thiết kế DataEnvironment qua nhiều biểu mẫu và nhiều ứng dụng, điều này sẽ cho tất cả các tính năng và sự dễ dàng lập trình trong một ứng dụng ràng buộc dữ liệu bởi vì không cần ràng buộc từng điều khiển riêng rẽ với nguồn dữ liệu.
90 trang |
Chia sẻ: Dung Lona | Lượt xem: 1448 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Quản lý cán bộ tiền lương, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
rả lời trong kho lương
Tìm câu trả lời trong các kho còn lại
Kết quả
End
Begin
Y
Y
N
N
CHƯƠNG IV:
SỬ DỤNG NGÔN NGỮ LẬP TRÌNH VISUAL BASIC
ĐỂ THIẾT KẾ CHƯƠNG TRÌNH
1. Ngôn ngữ lập trình Visual Basic
Visual Basic có rất nhiều tính năng mới. Các điều khiển mới cho phép viết các chương trình ứng dụng kết hợp giao diện, cách xử lý và tính năng của Microsoft Office 97 và trình duyệt Web Internet Explorer, không nhất thiết phải có một bản sao của điều khiển trên biểu mẫu.
Visual Basic cho phép :
Lập trình để thêm điều khiển vào đề án tự động và có thể tạo ra các điều khiển Activex hiệu chỉnh.
Viết các chương trình ứng dụng phía máy chủ (Server side) dùng HTML động nhúng kết nối với các thư viện liên kết động của Internet Information Server.
Một vài cải tiến cho phép làm việc với các ứng dụng truy cập dữ liệu ở tầm cỡ vĩ mô liên quan đến hàng trăm, hàng nghìn người sử dụng qua mạng hay qua Internet.
Visual Basic cung cấp các đối tượng dữ liệu Activex cho phép kết nối với các tập tin cơ sở dữ liệu. Ngoài các điều khiển Activex Visual Basic còn có một bộ công cụ và kỹ thuật mới giúp truy cập dữ liệu dễ dàng hơn. Trình thiết kế môi trường dữ liệu cho phép xem xét và thao tác dữ liệu trong CSDL khác nhau. Bởi vì bản thân môi trường dữ liệu là những đối tượng, có thể sử dụng chúng như một điều khiển dữ liệu. Thậm chí có thể gắn nó với các điều khiển khác.
Visual Basic cung cấp một vài điều khiển dữ liệu mới cho phép tận dụng các thế mạnh của điều khiển dữ liệu ADO. Điều khiển DataGrid cho phép xem dữ liệu dưới dạng bảng gồm các dòng và cột. DataList và DataCombo tương tự như DBList và DBCombo, có thể dùng chúng để lấy một danh sách dữ liệu từ điều khiển ADO trong cấu hình hộp danh sách (ListBox) hoặc hộp kết hợp (ComboBox).
Visual Basic mở rộng khả năng báo cáo với trình báo cáo dữ liệu cho phép tạo, xem trước, và in các báo cáo trong Visual Basic tương tự như Access và có thể lấy các điều khiển báo cáo từ hộp công cụ báo cáo dữ liệu mới và đưa vào biểu mẫu báo cáo dữ liệu.
2. Các đối tượng truy cập dữ liệu
Dynamic Data Exchange (DDE) : Trao đổi dữ liệu động
Cho phép các các ứng dụng chia sẽ thông tin với nhau trong lúc thi hành. Cớ chế giao tiếp là một ứng dụng sẽ gửi dữ liệu vào một vùng được quy định sẵn bởi một ứng dụng khác. Tuy nhiên, người lập trình phải thiết lập mọi thứ cho giao tiếp trao đổi dữ liệu nên cách thực hiện theo DDE rất phức tạp.
Object Linking and Embedding (OLE) : Nhúng và kết nối đối tượng
OLE tuân thủ triết lý của Windows (Click chuột, kéo và thả). OLE có thể kéo dữ liệu từ ứng dụng này và thả vào ứng dụng khác.
OLE có hai kỹ thuật :
Khởi động tại chổ (In-place activation) : Một dữ liệu được tạo ra bởi ứng dụng 1 và được thả vào ứng dụng 2. Nhấn Double click chuột lên dữ liệu ở ứng dụng 2 nó sẽ hoạt động giống như ở ứng dụng 1.
Tự động hóa (Automation) : áp dụng khả năng tái sử dụng đối tượng và tận dụng triệt để các thế mạnh của các đối tượng.
Activex
Activex là thế hệ sau của OLE. Nên Activex chứa đựng tất cả tính năng của OLE và được bổ sung thêm nhiều chức năng khác như cho phép việc sử dụng các đoạn chương trình có sẵn mà không cần quan tâm chúng có nguồn gốc từ đâu hay hoạt động như thế nào.
3. Sử dụng các đối tượng truy cập dữ liệu trong chương trình
Điều khiển DAO (Data Access Objects)
Cho phép thi hành các câu truy vấn, cập nhật giá trị trong các bảng cơ sở dữ liệu và tạo cấu trúc cơ sở dữ liệu bao gồm các bảng, các câu truy vấn chứa sẵn và mối quan hệ giữa các bảng.
Ưu điểm : Giao diện lập trình của DAO vô cùng mạnh mẽ và dễ sử dụng. Với các cơ sở dữ liệu Jet của Microsoft, DAO cho phép truy cập các tính năng không có sẵn trong SQL hay ADO (Đối tượng dữ liệu Activex – Activex Data Object). DAO có thể sử dụng để truy cập các cơ sở dữ liệu trên máy cá nhân hay Client/Server.
Khuyết điểm : Mô hình đối tượng DAO khá phức tạp
Thông qua các tập hợp sở hữu đối tượng Database có thể thao tác trên dữ liệu và cấu trúc của một cơ sở dữ liệu, tạo các đối tượng cơ sở dữ liệu mới, kiểm tra cấu trúc và dữ liệu chứa trong một cơ sở dữ liệu.
Trong lập trình DAO, có một tập hợp cốt lõi gồm các kỹ thuật thông dụng được sử dụng gần như cho mọi chương trình, bao gồm :
Thi hành câu truy vấn SELECT để lấy về các dữ liệu từ cơ sở dữ liệu.
Duyệt qua từng mẫu tin trong một RecordSet
Thi hành câu truy vấn hành động (bao gồm các câu truy vấn Update, Delete, Append)
Sữa đổi cấu trúc cơ sở dữ liệu
Xử lý lỗi phát sinh bởi truy cập cơ sở dữ liệu.
Điều khiển ADODC (Microsoft ADO Data Control 6.0 (OLEDB) )
Visual Basic cung cấp các đối tượng dữ liệu ActiveX (ActiveX Data Object - ADO). ADO tổng hợp và thay thế việc truy cập dữ liệu của DAO (Đối tượng truy cập dữ liệu – Data Access Object) và RDO (Đối tượng dữ liệu từ xa – Remote Data Object). ADO là công nghệ truy cập cơ sở dữ liệu hướng đối tượng tương tự như DAO và RDO,ø giao diện dựa trên đối tượng cho công nghệ dữ liệu OLEDB. Ngoài ra, ADO dễ sử dụng và có tầm hoạt động rộng hơn dùng để kết nối với các tập tin cơ sở dữ liệu và có thể truy cập dữ liệu từ xa.
ADO được xem là kỹ thuật để truy cập cơ sở dữ liệu từ Web Server. Bởi vì ADO được cung cấp dưới dạng thư viện Activex Server (tương tự DAO và RDO), nên rất thuận lợi dùng trong ứng dụng Visual Basic. Trong thực tế, bằng nhiều cách đã chứng minh rằng sử dụng ADO để làm việc với cơ sở dữ liệu Client/Server thì dễ hơn các kỹ thuật khác.
Phần lớn các nhà lập trình Visual Basic không tương tác trực tiếp với OLEDB. Thay vào đó, họ lập trình với ADO, mô hình đối tượng cung cấp giao diện với OLEDB.
Khi dùng ADO thì chỉ cần lập trình với phần giao diện người sử dụng ở phía Client. Bởi vì việc truy cập dữ liệu trên cả trình duyệt Wed và ứng dụng Visual Basic được chuyển hết về phía Activex Server nên logic chương trình luôn nhất quán, bất kể loại ứng dụng nào đang được sử dụng.
Client Application
Remote Data
Objects
ODBC Driver
ODBC Driver
Manager
Activex Data
Objects
OLEDB Data
Provider
OLEDB
Relational Database
Document
Server
Email
Server
Client Workstation
Cách sử dụng ADO và OLEDB để tăng cường truy cập thông tin
trong một cơ sở dữ liệu
Client Application
Activex Data
Objects
OLEDB ODBC Provider
ODBC
Driver
Relational Database
Client Workstation
ODBC Driver
Manager
OLEDB
Cấu trúc truy cập cơ sở dữ liệu ODBC dùng trình cung cấp OLEDB
Cấu trúc này cho phép dùng thành phần lập trình Activex thông dụng trên cả trình duyệt Wed và ứng dụng Client Visual Basic.
Kết nối với
chứa
Kết nối với
Biểu mẫu
VB
Các thuộc tính DataSource, DataField của điều khiển ràng buộc dữ liệu
Các thuộc tính ConnectionString, RecordSource của điều khiển ADO Data
Cơ sở dữ liệu
Cách thức của điều khiển ADO Data kết nối với cơ sở dữ liệu trong ứng dụng
4. Các điều khiển giao diện người sử dụng
Điều khiển nội tại (Hoạt động với mọi ấn bản của Visual Basic)
Các điều khiển này đều có thể trực tiếp nối kết với một trường trong một cơ sở dữ liệu thông qua một điều khiển dữ liệu hoặc nguồn dữ liệu khác như trình thiết kế DataEnvironment.
Nhập dữ liệu với điều khiển TEXTBOX : Dùng sữa đổi dữ liệu kiểu chuỗi và kiểu số từ một cơ sở dữ liệu.
Ràng buộc vào trình thiết kế DataEnvironment : Là khả năng tạo một giao diện người sử dụng ràng buộc dữ liệu. Bởi vì có thể chia sẽ trình thiết kế DataEnvironment qua nhiều biểu mẫu và nhiều ứng dụng, điều này sẽ cho tất cả các tính năng và sự dễ dàng lập trình trong một ứng dụng ràng buộc dữ liệu bởi vì không cần ràng buộc từng điều khiển riêng rẽ với nguồn dữ liệu.
Truy cập giá trị Boolean với điều khiển CHECKBOX : dùng CheckBox để hiển thị một giá trị True hay False từ một trường trong một cơ sở dữ liệu.
Sử dụng điều khiển LISTBOX để hiển thị dữ liệu : dùng ListBox để hiển thị các phần tử trong một danh sách chọn lựa dành cho người sử dụng. Nhưng khi sử dụng ListBox để hiển thị dữ liệu từ một cơ sở dữ liệu vẫn có một số hạn chế về lượng dữ liệu dùng để chứa và hiển thị.
TabControl : Làm cho các chức năng của chương trình nằm gọn trên một form.
Điều khiển Activex (Là những thành phần bổ sung cho bản Professional và Enterprise của Visual Basic)
Khác với các điều khiển giao diện người sử dụng, các điều khiển này không được cung cấp bởi hệ điều hành. Thay vào đó, ta phải phân phát điều khiển bổ sung vào các máy tính của người sử dụng để ứng dụng có thể sử dụng chúng.
Sử dụng điều khiển DataGrid : DataGrid có khả năng hiển thị dữ liệu dưới dạng dòng, cột khi ràng buộc với điều khiển ADO Data hay trình thiết kế DataEnvironment.
Sử dụng điều khiển DataList và DataCombo : Điều khiển DataList và DataCombo là những điều khiển sao chép lại các chức năng của điều khiển DBList. DataList cung cấp danh sách các chọn lựa, DataCombo dùng nối kết dữ liệu nhập vào điều khiển với một trường trong cơ sở dữ liệu, cả hai đều tương thích với DAO Data và ADO Data mới.
5. Sử dụng các câu truy vấn (SQL)
Một câu truy vấn là một lệnh cơ sở dữ liệu để lấy về các mẩu tin. Sử dụng câu truy vấn, có thể lấy dữ liệu từ một hoặc nhiều trường trong một hay nhiều bảng. Ngoài ra, còn có thể ép các dữ liệu lấy về theo một hoặc nhiều ràng buộc, gọi là các tiêu chí để hạn chế số lượng dữ liệu lấy về.
SQL là giải pháp chuẩn để thao tác với cơ sở dữ liệu. Nó được thực hiện theo nhiều dạng khác nhau trong các hệ thống cơ sở dữ liệu quan hệ, bao gồm Access và SQL Server
Các câu truy vấn SQL cho khả năng lấy về các mẩu tin từ một bảng cơ sở dữ liệu, đối chiếu các dữ liệu quan hệ với nhau trong nhiều bảng và thao tác với cấu trúc của cơ sở dữ liệu. Các kiểu truy vấn SQL nhất định có thể điền dữ liệu vào một điều khiển dữ liệu. Trong chương trình, các câu truy vấn SQL được dùng khi thao tác với các cơ sở dữ liệu thông qua sử dụng mô hình đối tượng DAO, RDO và ADO.
Lợi ích khi dùng SQL
Theo kinh nghiệm trong Visual Basic, bất cứ chổ nào dùng một tham chiếu đến một bảng, đều có thể thay thế bằng cách sử dụng một câu lệnh SQL hoặc một tham chiếu đến một truy vấn đã lưu trữ nhưng bản thân nó vẫn dựa vào một câu lệnh SQL.
Nơi thích hợp nhất để đặt một câu lệnh SQL, dựa trên các kỹ thuật truy cập dữ liệu, là thuộc tính RecordSource của một điều khiển dữ liệu. Vì vậy, thay vì chỉ ra thuộc tính RecordSource là tên của một bảng, có thể đổi thuộc tính này thành tên của một câu truy vấn chứa sẵn hay một câu lệnh SQL như : SELECT * FROM TEN_BANG ORDER BY KEY. Điều này cho ta sự linh hoạt đáng kể khi chọn lựa một nguồn mẩu tin.
Sử dụng câu lệnh SQL trong các ngữ cảnh khác nhau của chương trình
Tham số Source của phương thức OpenRecordSet của đối tượng DataBase của DAO được sử dụng phổ biến nhất khi truy vấn các mẩu tin từ một cơ sở dữ liệu Access.
Sử dụng thuộc tính Source của một đối tượng RecordSet của ADO.
Sử dụng câu lệnh SELECT để lấy về các mẩu tin
Câu lệnh SELECT là cốt lõi của mọi truy vấn lấy về dữ liệu. Nó thông báo cho bộ máy cơ sở dữ liệu những trường nào sẽ được lấy về. Dạng thông dụng nhất của câu lệnh SELECT là : SELECT *
Mệnh đề có ý nghĩa là “trả về tất cả các trường tìm thấy trong nguồn mẩu tin chỉ định”. Dạng lệnh này rất tiện dụng vì không cần biết tên của trường để lấy chúng về từ một bảng. Tuy nhiên, lấy về tất cả các cột trong một bảng có thể không hiệu quả, nhất là trong trường hợp mà ta chỉ cần 2 cột mà truy vấn của ta trả về quá nhiều.
Vì vậy, ngoài việc thông báo cho bộ máy cơ sở dữ liệu để trả về tất cả các trường trong nguồn mẩu tin, ta còn có khả năng chỉ ra chính xác trường nào cần lấy về. Hiệu ứng lọc bớt này cải tiến hiệu quả của một truy vấn, nhất là trên bảng lớn có nhiều trường trong chương trình, bởi vì trong chương trình ta chỉ cần lấy về trường nào cần thiết.
Sử dụng mệnh đề FROM để chỉ nguồn mẩu tin
Mệnh đề FROM làm việc với câu lệnh SELECT để trả về các mẩu tin trong bảng, ví dụ : SELECT * FROM TEN_BANG . Vì một câu truy vấn SELECT FROM không xếp theo thứ tự nên thứ tự trả về là không xác định. Để câu truy vấn có hiệu quả, cần phải giới hạn số trường lấy về bằng cách sử dụng mệnh đề WHERE.
Sử dụng mệnh đề WHERE để chỉ ra tiêu chí lọc
Mệnh đề WHERE thông báo với bộ máy cơ sở dữ liệu để giới hạn số mẩu tin trả về theo một hay nhiều tiêu chí lọc do người lập trình cung cấp. Kết quả trả về của tiêu chí lọc là TRUE/FALSE.
6. Cài đặt và chạy chương trình
Frm.MDImain : Màn hình giao diện chính của chương trình
Frm.phucap: Màn hình nhập thông tin phụ cấp
Frm.nhapheso : Màn hình nhập hệ số lương
Frm.thuong: Màn hình nhập loại thưởng
Frm.hosocb: Màn hình nhập hồ sơ cán bộ
Frm.luong: Màn hình nhập lương cho cán bộ
Frm.tracuucb: Màn hình tra cứu cán bộ
Frm.xemhoso: Màn hình hiện thị xem hồ sơ cán bộ
Frm.tracuuluong: Màn hình tra cứu lương cán bộ
Frm.xemluong: Màn hình hiển thị xem lương cán bộ
CHƯƠNG V:
ĐÁNH GIÁ VÀ PHÁT TRIỂN ĐỀ TÀI
Quá trình khảo sát, thực hiện và hoàn thành đề tài, thì chương trình đã cho chúng ta có được cái nhìn tổng quát về hệ thống quản lý cán bộ tiền lương của một doanh nghiệp. Chương trình đã giúp rất nhiều cho cán bộ nghiệp vụ nhân sự, tiền lương trong việc cập nhập, chỉnh sửa, tính lương, quản lý, tìm kiếm, đưa ra các báo cáo, báo biểu về thông tin cán bộ rất dễ dàng và chính xác..Nhưng do thời gian có hạn và kiến thức còn hạn hẹp nên chương trình không tránh khỏi những thiếu xót..như chương trình chưa đưa ra được phần quản trị hệ thống, phân quyền cho cho người sử dụng, chưa đưa ra được một quy trình quản lý sao lưu backup dữ liệuTrong thời gian tới, e sẽ cố gắng hoàn thiện chương trình và phát triển chương trình thêm nhiều module nữa..như xây dựng hệ thống chấm công tự động, hệ thống quản lý đơn hàng..tạo dựng database chung cho chương trình để chương trình ngày một ưu việt.
Cuối cùng, em xin chân thành cảm ơn Ths. Nguyễn Thanh Hương giảng viên bộ môn Công nghệ thông tin Trường Đại Học Kinh Tế Quốc Dân đã tận tình chỉ bảo hướng dẫn em hoàn thành đề tài này.Cám ơn quý công ty TNHH Minh Trí đã tạo điều kiện cho e khảo sát và thực tập tại công ty để e có thể hoàn thành được đề tài này.
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
XÁC NHẬN CỦA CƠ QUAN THỰC TẬP
KÝ VÀ ĐÓNG DẤU
TÀI LIỆU THAM KHẢO
1. Cơ Sở Dữ Liệu Quan Hệ
Lê Tiến Vương
2. Phân Tích & Thiết Kế Hệ Thống
Ngô Trung Việt
3. Cơ Sở Dữ Liệu & Phân Tích Thiết Kế Hệ Thống Thông Tin Quản Lý
Nguyễn Hữu Trọng
4. Tự Học Lập Trình Cơ Sở Dữ Liệu Visual Basic 6.0 tập 1&2
Nguyễn Đình Tê(chủ biên)
5. Những Bài Thực Hành Cơ Sở Dữ Liệu Cơ Sở Visual Basic
Đinh Xuân Lâm
6. Cơ Sở Dữ Liệu Visual Basic
Nguyễn Thị Ngọc Mai
7. Tin Học Văn Phòng Access 2000
Nguyễn Sĩ Dũng
8. Lập Trình Access 2000
Ông Văn Thông
PHỤ LỤC
CODE CỦA CHƯƠNG TRÌNH
Dim ketthuc
Dim myPathhoso As String
Dim myPathluong As String
Private Sub MDIForm_Load()
' Load frmgioithieu
MDImain.WindowState = 2
Language (True)
End Sub
Sub MDIForm_Unload(Cancel As Integer)
Me.mnuexit_Click
End Sub
Private Sub mnuAboutSalary_Click()
frmAbout.Show
End Sub
Private Sub mnuAccordingSalary_Click()
' frmTCsach.Show
End Sub
Private Sub mnuAllowanceFiles_Click()
frmPhuCap.Show
End Sub
Private Sub mnuArrangeIcon_Click()
Me.Arrange 3 'dbArrangeIcon
End Sub
Private Sub mnucascade_Click()
Me.Arrange 0
End Sub
Private Sub mnuCoefficientforsalary_Click()
frmnhapheso.Show
End Sub
Private Sub mnuEnglish_Click()
If MDImain.mnuEnglish.Checked = False Then
MDImain.mnuVietnamese.Checked = False
MDImain.mnuEnglish.Checked = True
Language (False)
End If
End Sub
Sub mnuexit_Click()
ketthuc = MsgBox("B¹n muèn kÕt thóc t¹i ®©y! ", vbYesNo, "Th«ng b¸o")
If ketthuc = vbYes Then
End
End If
End Sub
Private Sub mnuLookUppersonal_Click()
frmTracuuCb.Show
End Sub
Private Sub mnuLookupSalary_Click()
frmTraCuuLuong.Show
End Sub
Private Sub mnuOpenFilesPersonal_Click()
cdlmain.ShowOpen
myPathhoso = cdlmain.FileName
End Sub
Private Sub mnupersonalfile_Click()
frmhosocb.Show
End Sub
Private Sub mnurewardforsalary_Click()
frmthuong.Show
End Sub
Private Sub mnusalaryfile_Click()
frmluong.Show
End Sub
Private Sub mnusave_Click()
Me.cdlmain.ShowSave
End Sub
Private Sub mnuStatus_Click()
If Me.StatusBar1.Visible = False Then
Me.mnuStatus.Checked = True
Me.StatusBar1.Visible = True
Else
Me.StatusBar1.Visible = False
Me.mnuStatus.Checked = False
End If
End Sub
Private Sub mnuTileHozizontally_Click()
Me.Arrange 1
End Sub
Private Sub mnuTileVertically_Click()
Me.Arrange 2
End Sub
Private Sub mnuToolsbars_Click()
If Me.tlbmain.Visible = False Then
Me.mnuToolsbars.Checked = True
Me.tlbmain.Visible = True
Else
Me.tlbmain.Visible = False
Me.mnuToolsbars.Checked = False
End If
End Sub
Private Sub mnuVietnamese_Click()
If MDImain.mnuVietnamese.Checked = False Then
MDImain.mnuEnglish.Checked = False
MDImain.mnuVietnamese.Checked = True
Language (True)
End If
End Sub
Private Sub tlbmain_ButtonClick(ByVal Button As ComctlLib.Button)
Select Case Button.Key
Case "New"
file = InputBox(" NhËp vµo Tªn CSDL cÇn t¹o", "Tao b¶ng cSDL míi")
If Trim(file) = "" Then
Exit Sub
Else
Maketable (file)
End If
Case "Open"
MsgBox "Banj chon mo"
Case "Save"
MsgBox "Ban cho ghi"
Case "Print"
MsgBox "ban cho in"
Case "PrintReview"
MsgBox "PhÇn nµy dµnh cho b¹n"
Case "Exit"
MsgBox "choa bai"
mnuexit_Click
End Select
End Sub
'§o¹n ch¬ng tr×nh nh»m chuÈn ho¸ tiÕng viÖt
Function Chuan(XauVao As String, Thamso As Byte) As String
Dim xau(1 To 50) As String
Dim kTdau
Dim KTV
Dim k As Byte
Chuan = ""
KTV = Trim(XauVao)
For k = 1 To Len(KTV)
xau(k) = Mid(KTV, k, 1)
Next k
Select Case Thamso
Case 1
'tÊt c¸c ký tù ®Çu ®îc biÕn thµnh ch÷ hoa
For k = 1 To Len(KTV)
xau(k) = Mid(KTV, k, 1)
Next k
For i = 1 To Len(KTV)
If Asc(xau(1)) >= 168 And Asc(xau(1)) <= 174 Then
xau(1) = Chr(Asc(xau(1)) - 7)
Else
xau(1) = UCase(xau(1))
End If
If Asc(xau(i)) = 32 Then
If (Asc(xau(i + 1))) >= 168 And Val(Asc(xau(i + 1))) <= 174 Then
xau(i + 1) = Chr(Asc(xau(i + 1)) - 7)
Else
xau(i + 1) = UCase(xau(i + 1))
End If
End If
Chuan = Chuan + xau(i)
Next i
Case 2 ' chuÈn ho¸ c¸c ký tù ®Çu tiªn
kTdau = Left(Trim(KTV), 1)
If Asc(kTdau) >= 168 And Asc(kTdau) <= 174 Then
Chuan = Chr(Asc(kTdau) - 7) + Right(Trim(KTV), Len(Trim(KTV)) - 1)
Else
Chuan = UCase(kTdau) + Right(Trim(KTV), Len(Trim(KTV)) - 1)
End If
Case 3 ' tÊ c¶ lµ ch÷ hoa
Chuan = UCase(KTV)
End Select
End Function
Public Const myPathhoso = "c:\qlluong\QLuong.mdb"
Public Const rptfilename = "c:\qlluong\"
Public PathReport As String
Public Co As Boolean
Public coghi As Boolean
Public Chiso As Byte
Function Doi_date(sdate As Variant) As Date
Dim i As Byte
Dim vitri, k As Byte
Dim Thang As String * 2
Dim Ngay As String * 2
Dim Nam As String * 4
sdate = Trim(sdate)
Ngay = Mid(sdate, 1, 2)
Thang = Mid(sdate, 4, 2)
Nam = Mid(sdate, 7, 10)
Doi_date = Thang & "/" & Ngay & "/" & Nam
End Function
Public Function CheckDate(sdate As String) As String
If IsDate(sdate) = False Then
CheckDate = ""
Exit Function
End If
Dim i As Byte
Dim vitri, k As Byte
Dim Thang As String * 2
Dim Ngay As String * 2
Dim Nam As String * 4
Dim Sign(1) As String * 1
Sign(0) = "-"
Sign(1) = "/"
Thang = ""
Ngay = ""
vitri = 1
For i = 0 To 1
vitri = InStr(1, sdate, Sign(i))
If vitri 0 Then
Ngay = Mid(sdate, 1, vitri - 1)
k = vitri + 1
vitri = InStr(vitri + 1, sdate, Sign(i))
If vitri 0 Then
Thang = Mid(sdate, k, vitri - k)
Nam = Mid(sdate, vitri + 1, Len(Trim(sdate)) - vitri)
Exit For
End If
Else
End If
Next i
If Len(Ngay) = 0 Or Len(Thang) = 0 Then
CheckDate = ""
Exit Function
End If
If Len(Trim(Ngay)) = 1 Then Ngay = "0" & Ngay
If Len(Trim(Thang)) = 1 Then Thang = "0" & Thang
If Int(Val(Thang)) > 12 Then
CheckDate = ""
Exit Function
Else
If Int(Val(Ngay)) > 31 Then
CheckDate = ""
Exit Function
End If
CheckDate = Trim(Ngay & "/" & Thang & "/" & Nam)
End If
End Function
Public Sub Language(Language As Boolean)
Select Case Language
Case True
With MDImain
.mnuEnglish.Checked = False
.mnuVietnamese.Checked = True
.mnufiles.Caption = "Files"
.mnuexit.Caption = "&KÕt Thóc"
.mnuView.Caption = "&HiÖn Èn"
.mnuStatus.Caption = "T&r¹ng Th¸i"
.mnutask.Caption = "&NhiÖm vô"
.mnuInput.Caption = "NhËp D÷ LiÖu"
.mnuAllowanceFiles.Caption = "&NhËp Phô CÊp ..."
.mnuCoefficientforsalary.Caption = "&HÖ Sè L¬ng ..."
.mnupersonalfile.Caption = "Hå &S¬ Can Bo ..."
.mnurewardforsalary.Caption = "Møc thëng ..."
.mnusalaryfile.Caption = "L¬ng ..."
.mnuLookUp.Caption = "&Tra Cøu ..."
.mnuLookUppersonal.Caption = "Tra cøu theo hå &S¬ Nh©n viªn..."
.mnuLookupSalary.Caption = "Tra cøu theo &l¬ng ..."
.MnuTools.Caption = "C«ng Cô"
.MnuLanguage.Caption = "&Ng«n ng÷ HiÓn ThÞ"
.mnuEnglish.Caption = "&English"
.mnuVietnamese.Caption = "&ViÖt Nam"
.mnuhelps.Caption = "&Trî Gióp"
.mnuAboutSalary.Caption = "Th«ng Tin VÒ &Ch¬ng Tr×nh ..."
End With
Case False
With MDImain
.mnuEnglish.Checked = True
.mnuVietnamese.Checked = False
.mnufiles.Caption = "Files"
.mnuexit.Caption = "E&xit"
.mnuView.Caption = "&View"
.mnuStatus.Caption = "&Status"
.mnutask.Caption = "&Task"
.mnuInput.Caption = "Input"
.mnuAllowanceFiles.Caption = "&Allowance Files ..."
.mnuCoefficientforsalary.Caption = "&Ceofficient Fo Salary ..."
.mnupersonalfile.Caption = "&Personal Files ..."
.mnurewardforsalary.Caption = "&Raward for Salary ..."
.mnusalaryfile.Caption = "&Salary files ..."
.mnuLookUp.Caption = "&Look Up..."
.mnuLookUppersonal.Caption = "Look Up According &Personal ..."
.mnuLookupSalary.Caption = "Look Up According &Salary ..."
.MnuTools.Caption = "&Tools"
.MnuLanguage.Caption = "&Language "
.mnuEnglish.Caption = "&English"
.mnuVietnamese.Caption = "&VietNamese"
.mnuhelps.Caption = "&Helps"
.mnuAboutSalary.Caption = "&About Salry ..."
End With
End Select
End Sub
Public Sub chao()
Dim rec As Recordset
Dim MySql As String
'N¹p Giãi tÝnh
With frmTracuuCb
.cbotracuucb(0).AddItem "Nam"
.cbotracuucb(0).AddItem "Nu"
MsgBox "Chao Cac B¹n"
End With
End Sub
Public Sub KiemTraNgay(dong As String)
Dim ok
Dim i As Integer
With frmhosocb
If Len(dong) 10 Then
MsgBox "B¹n NhËp sai DL ngµy th¸ng råi! H·y NhËp l¹i nh sau: dd/mm/yyyy", vbCritical, "Chó ý"
.txthoso(2).SetFocus
ok = False
End If
nam1 = Val(Mid(dong, 7, 5))
dong = Format(dong, "dd/mm/yyyy")
Ngay = Val(Mid(dong, 1, 2))
Thang = Val(Mid(dong, 4, 2))
Nam = Val(Mid(dong, 7, 4))
Select Case Thang
Case 4, 6, 9, 11
If Ngay > 30 And Len(nam1) = 4 Then
MsgBox "B¹n nhËp sai ngµy, th¸ng nµy chØ cã 30 ngµy!", vbCritical, "Chó ý"
.txthoso(2).SetFocus
Else
If (Thang = 4) Or (Thang = 6) Or (Thang = 9) Or (Thang = 11) And (Len(nam1) = 4) Then
.cbohoso(0).SetFocus
ok = True
End If
End If
Case 1, 3, 5, 7, 8, 10, 12
If Ngay > 31 And Len(nam1) = 4 Then
MsgBox "B¹n nhËp sai ngµy, th¸ng nµy chØ cã 31 ngµy!", vbCritical, "Chó ý"
.txthoso(2).SetFocus
Else
If (Thang = 1) Or (Thang = 3) Or (Thang = 5) Or (Thang = 7) Or (Thang = 8) Or (Thang = 10) Or (Thang = 12) And (Len(nam1) = 4) Then
.cbohoso(0).SetFocus
ok = True
End If
End If
Case 2
If (Nam Mod 4 = 0) And (Ngay > 29) And (Thang = 2) Then
MsgBox "B¹n nhËp sai DL, th¸ng 2 chØ cã 28 ngµy", vbCritical, "Chó ý"
.txthoso(2).SetFocus
Else
If (Nam Mod 4 = 0) And (Ngay <= 29) And (Thang = 2) Then
.cbohoso(0).SetFocus
ok = True
End If
If (Nam Mod 4 0) And (Ngay > 28) And (Thang = 2) Then
MsgBox "B¹n nhËp sai DL, th¸ng 2 chØ cã 28 ngµy", vbCritical, "Chó ý"
.txthoso(2).SetFocus
Else
If (Nam Mod 4 0) And (Ngay <= 28) And (Thang = 2) Then
ok = True
.txthoso(2).SetFocus
End If
End If
End If
Case Else
If Val((Thang > 12) And (Len(nam1) = 4)) Then
MsgBox "B¹n NhËp sai kiÓu th¸ng !", vbCritical, "Chó ý"
.txthoso(2).SetFocus
End If
End Select
If ok = True Then
frmhosocb.cbohoso(0).SetFocus
Else
.txthoso(2).SetFocus
MsgBox "xay ra o Toi"
End If
End With
End Sub
Dim myPathhoso As String
Dim db As Database
Dim rec As Recordset
Dim mypath As String
Dim dongsql As String
Dim coghi
'Dim dongxoa
Private Sub cbohoso_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
Select Case Index
Case 0 ' Gioi tinh
If KeyCode = 13 Then
If cbohoso(0).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
cbohoso(0).SetFocus
Else
If (UCase(Trim(cbohoso(0).Text)) = UCase("Nam")) Or (UCase(Trim((cbohoso(0).Text))) = UCase("N÷")) Then
cbohoso(1).SetFocus
Else
MsgBox "DL chØ nhËn lµ : Nam hoÆc N÷ ", vbCritical, "Th«ng B¸o"
cbohoso(0).SetFocus
End If
End If
End If
Case 1 'D©n Téc
If KeyCode = 13 Then
If cbohoso(1).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
cbohoso(1).SetFocus
Else
cbohoso(1).Text = Chuan(cbohoso(1), 2)
txthoso(3).SetFocus
End If
End If
Case 2 ' Phong
If KeyCode = 13 Then
If cbohoso(2).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
cbohoso(2).SetFocus
Else
cbohoso(2).Text = Chuan(cbohoso(2), 1)
cbohoso(3).SetFocus
End If
End If
Case 3 'Chuc vu
If KeyCode = 13 Then
If cbohoso(3).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
cbohoso(3).SetFocus
Else
cbohoso(3).Text = Chuan(cbohoso(3), 2)
cbohoso(4).SetFocus
End If
End If
Case 4 ' trinh Do
If KeyCode = 13 Then
If cbohoso(4).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
cbohoso(4).SetFocus
Else
cbohoso(4).Text = Chuan(cbohoso(4), 2)
cbohoso(5).SetFocus
End If
End If
Case 5 ' Chuyen mon
If KeyCode = 13 Then
If cbohoso(5).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
cbohoso(5).SetFocus
Else
cbohoso(5).Text = Chuan(cbohoso(5), 2)
txthoso(5).SetFocus
End If
End If
End Select
End Sub
Sub cmdchucnang_Click(Index As Integer)
Select Case Index
Case 0 ' NhËp míi
'MsgBox " B¹n võa chän nhËp míi "
Set db = OpenDatabase(mypath)
Set rec = db.OpenRecordset("hosocanbo")
For i = 0 To 5
txthoso(i).Text = ""
Next i
For i = 0 To 5
cbohoso(i).Text = ""
Next i
NapNhapHSCB
txthoso(0).SetFocus
Case 1 ' chän chøc n¨ng söa
IDMacb = InputBox(" NhËp vµo m· C¸n bé cÇn söa ", "Söa ch÷a")
If Len(Trim(IDMacb)) = 0 Then Exit Sub
Set rec = db.OpenRecordset("SELECT * FROM HosoCanBo WHERE [MaCB]='" & IDMacb & "'")
If rec.RecordCount = 0 Then
MsgBox "Kh«ng tån t¹i m· c¸n bé ®ã trong lu tr÷ ", vbCritical, "Kh«ng thÊy"
txthoso(0).SetFocus
Exit Sub
End If
Set dathoso.Recordset = rec
Me.dathoso.Refresh
On Error Resume Next
Case 2 ' chän chøc n¨ng Ghi
MsgBox " B¹n võa chän ghi"
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
Set rec = db.OpenRecordset("HoSoCanBo")
' KiÓm tra Xem Da co ®ñ Thong tin
For k = 0 To 5
If cbohoso(i).Text = "" Then
cbohoso(i).SetFocus
End If
If txthoso(i).Text = "" Then
txthoso(i).SetFocus
End If
Next k
dongsql = "Insert into hosocanbo (macb,Hoten,ngaysinh,Gioitinh,DanToc,Quequan,NoiOhiennay,Phong,ChucVu,TrinhDo,Chuyenmon,NgayvaoBienChe) Values ('" & UCase(Trim(txthoso(0).Text)) & "','" & Trim(txthoso(1).Text) & "','" & Trim(txthoso(2).Text) & "','" & Trim(cbohoso(0).Text) & "','" & Trim(cbohoso(1).Text) & "','" & Trim(txthoso(3).Text) & "','" & Trim(txthoso(4).Text) & "','" & Trim(cbohoso(2).Text) & "','" & Trim(cbohoso(3).Text) & "','" & Trim(cbohoso(4).Text) & "','" & Trim(cbohoso(5).Text) & "','" & Trim(txthoso(5).Text) & "')"
Me.dathoso.Recordset.MoveFirst
For j = 0 To dathoso.Recordset.RecordCount - 1
If UCase(Trim(txthoso(0).Text)) UCase(dathoso.Recordset.Fields(0).Value) Then
coghi = True
Else
coghi = False
If coghi = False Then
MsgBox " §· Cã trong c¬ së d÷ liÖu cña b¹n !"
Exit For
End If
End If
Me.dathoso.Recordset.MoveNext
Next j
If coghi = True Then
db.Execute dongsql
dathoso.Refresh
End If
db.Execute dongsql
db.Execute "Insert Into Luong(macb,luong,kynhan)Values ('" & UCase(Trim(txthoso(0).Text)) & "',100,'No')"
db.Close
txthoso(0).SetFocus
Case 3 'Xo¸
Set db = OpenDatabase(mypath)
Set rec = db.OpenRecordset("Hosocanbo")
With rec
If Not .EOF Or Not .BOF Then
xoa = MsgBox("B¹n Muèn xo¸ ?", vbYesNo, "Chó ý")
If xoa = vbYes Then
Me.dathoso.Recordset.MoveFirst
.Delete
End If
' .Update
End If
End With
Case 4, Xem
frmXemhoso.Show
Case 5 ' In Ên
frmXemhoso.cmdchucnang_Click
Case 6 'KÕt Thóc
Unload Me
End Select
End Sub
Private Sub dathoso_Reposition()
dongxoa = Me.dathoso.Recordset.RecordCount + 1
End Sub
Private Sub DBGrid1_Click()
If Not Me.dathoso.Recordset.BOF Or Not Me.dathoso.Recordset.EOF Then
txthoso(0).Text = Me.dathoso.Recordset.Fields(0).Value
txthoso(1).Text = Me.dathoso.Recordset.Fields(1).Value
Else
MsgBox "§©y la qu¸ b¶n ghi cuèi råi", vbCritical, "Chó ý"
End If
End Sub
Sub Form_Activate()
Me.Width = 11100
Me.Height = 7500
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 20
End Sub
Private Sub Form_Load()
mypath = "c:\qlluong\QLLuong.mdb"
Form_Activate
For i = 0 To 5
txthoso(i).Text = ""
Next i
For i = 0 To 5
cbohoso(i).Text = ""
Next i
Me.NapNhapHSCB
HienData
End Sub
Private Sub txthoso_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
Select Case Index
Case 0 ' ma Can Bo
If KeyCode = 13 Then
If txthoso(0).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
txthoso(0).SetFocus
Else
txthoso(0).Text = Chuan(txthoso(0), 3)
txthoso(1).SetFocus
End If
End If
Case 1 'Ho Ten
If KeyCode = 13 Then
If txthoso(0).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
txthoso(1).SetFocus
Else
txthoso(1).Text = Chuan(txthoso(1), 1)
txthoso(2).SetFocus
End If
End If
Case 2 'Ngay sinh
If KeyCode = 13 Then
If txthoso(2).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
txthoso(2).SetFocus
Else
cbohoso(0).SetFocus
End If
KiemTraNgay (Trim(txthoso(2).Text))
End If
Case 3 ' Que quan
If KeyCode = 13 Then
If txthoso(3).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
txthoso(3).SetFocus
Else
txthoso(3).Text = Chuan(txthoso(3), 1)
txthoso(4).SetFocus
End If
End If
Case 4 'noi O
If KeyCode = 13 Then
If txthoso(4).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
txthoso(4).SetFocus
Else
txthoso(4).Text = Chuan(txthoso(4), 1)
cbohoso(2).SetFocus
End If
End If
Case 5
If KeyCode = 13 Then
If txthoso(5).Text = "" Then
MsgBox "B¹n Ph¶i nhËp DL Vao !"
txthoso(5).SetFocus
Else
txthoso(0).SetFocus
If KiemTraNgayvaoBC(Trim(txthoso(5).Text)) = True Then
cmdchucnang_Click (2)
cmdchucnang_Click (0)
Else
Me.txthoso(5).SetFocus
End If
End If
End If
End Select
End Sub
Public Sub HienData()
dathoso.DatabaseName = mypath
dathoso.RecordSource = "Hosocanbo"
End Sub
Public Sub NapNhapHSCB()
With frmhosocb.cbohoso(0)
.AddItem "Nam"
.AddItem "N÷"
End With
' N¹p D©n Téc
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [DanToc] FROM HosoCanBo"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmhosocb.cbohoso(1).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
End If
'Nap Phßng Ban
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [Phong] FROM HosoCanBo"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmhosocb.cbohoso(2).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
End If
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [ChucVu] FROM HosoCanBo"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmhosocb.cbohoso(3).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
End If
'Nap Trinh D«
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [TrinhDO] FROM HosoCanBo"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmhosocb.cbohoso(4).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
End If
'Nap Chuyen Mon
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [ChuyenMon] FROM HosoCanBo"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmhosocb.cbohoso(5).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
End If
End Sub
Sub Nhaplai(dk As Boolean)
If dk = True Then
txthoso(2).SetFocus
Else
cbohoso(1).SetFocus
End If
End Sub
Public Function KiemTraNgayvaoBC(dong As String) As Boolean
Dim ok
Dim i As Integer
With frmhosocb
If Len(dong) 10 Then
MsgBox "B¹n NhËp sai DL ngµy th¸ng råi! H·y NhËp l¹i nh sau: dd/mm/yyyy", vbCritical, "Chó ý"
.txthoso(5).SetFocus
ok = False
End If
nam1 = Val(Mid(dong, 7, 5))
dong = Format(dong, "dd/mm/yyyy")
Ngay = Val(Mid(dong, 1, 2))
Thang = Val(Mid(dong, 4, 2))
Nam = Val(Mid(dong, 7, 4))
Select Case Thang
Case 4, 6, 9, 11
If Ngay > 30 And Len(nam1) = 4 Then
MsgBox "B¹n nhËp sai ngµy, th¸ng nµy chØ cã 30 ngµy!", vbCritical, "Chó ý"
.txthoso(5).SetFocus
Else
If (Thang = 4) Or (Thang = 6) Or (Thang = 9) Or (Thang = 11) And (Len(nam1) = 4) Then
.txthoso(0).SetFocus
ok = False
End If
End If
Case 1, 3, 5, 7, 8, 10, 12
If Ngay > 31 And Len(nam1) = 4 Then
MsgBox "B¹n nhËp sai ngµy, th¸ng nµy chØ cã 31 ngµy!", vbCritical, "Chó ý"
.txthoso(5).SetFocus
Else
If (Thang = 1) Or (Thang = 3) Or (Thang = 5) Or (Thang = 7) Or (Thang = 8) Or (Thang = 10) Or (Thang = 12) And (Len(nam1) = 4) Then
.txthoso(0).SetFocus
ok = True
End If
End If
Case 2
If (Nam Mod 4 = 0) And (Ngay > 29) And (Thang = 2) Then
MsgBox "B¹n nhËp sai DL, th¸ng 2 chØ cã 28 ngµy", vbCritical, "Chó ý"
.txthoso(5).SetFocus
Else
If (Nam Mod 4 = 0) And (Ngay <= 29) And (Thang = 2) Then
.txthoso(5).SetFocus
ok = True
End If
If (Nam Mod 4 0) And (Ngay > 28) And (Thang = 2) Then
MsgBox "B¹n nhËp sai DL, th¸ng 2 chØ cã 28 ngµy", vbCritical, "Chó ý"
.txthoso(5).SetFocus
Else
If (Nam Mod 4 0) And (Ngay <= 28) And (Thang = 2) Then
ok = True
.txthoso(5).SetFocus
End If
End If
End If
Case Else
If Val((Thang > 12) And (Len(nam1) = 4)) Then
MsgBox "B¹n NhËp sai kiÓu th¸ng !", vbCritical, "Chó ý"
.txthoso(5).SetFocus
End If
End Select
If ok = True Then
.txthoso(0).SetFocus
Else
.txthoso(5).SetFocus
End If
KiemTraNgayvaoBC = ok
End With
End Function
Option Compare Text
Option Explicit
Dim them As Boolean
'In danh muïc chöùng töø
Private Sub cmdRepheso_Click()
heso.Show
End Sub
Private Sub Command1_Click()
he_so_luong.Show
End Sub
'Thuû tuïc naïp Form
Private Sub Form_Load()
Dim n
Dim n1
n = 0
n1 = 0
txtSBG.Text = n
'Khoa
End Sub
Private Sub Khoa()
Dataheso.AllowDelete = False
Dataheso.AllowUpdate = False
Dataheso.AllowAddNew = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdghi.Enabled = False
cmdkhong.Enabled = False
cmdthoat.Enabled = True
'Töï ñoäng caäp nhaät baûn ghi trong DataGrid cuûa Danh muïc chöùng töø
Dataheso.Refresh
End Sub
Private Sub Mo_Khoa()
Dataheso.AllowDelete = True
Dataheso.AllowUpdate = True
Dataheso.AllowAddNew = True
cmdthem.Enabled = False
cmdsua.Enabled = False
cmdxoa.Enabled = False
cmdghi.Enabled = True
cmdkhong.Enabled = True
cmdthoat.Enabled = False
'Töï ñoäng caäp nhaät baûn ghi trong DataGrid cuûa Danh muïc chöùng töø
Dataheso.Refresh
End Sub
Private Sub cmdthem_click()
On Error GoTo Loi_Them
Mo_Khoa
'Töï ñoäng caäp nhaät laïi baûn ghi trong Form hay DataSheet khi döõ lieäu thay ñoåi
Ado_heso.Refresh
'Theâm baûn ghi môùi
Ado_heso.Recordset.AddNew
'DataGrid cuûa heso nhaän tieâu ñieåm
Dataheso.SetFocus
them = True
Thoat_Them:
Exit Sub
Loi_Them:
MsgBox Err.Description
Resume Thoat_Them
End Sub
Private Sub cmdsua_click()
Dim recnum
On Error GoTo Loi_Sua
'Bieán ñaùnh daáu baûn ghi caàn thay ñoåi
recnum = Ado_heso.Recordset.Bookmark
Mo_Khoa
them = False
Thoat_Sua:
Exit Sub
Loi_Sua:
MsgBox Err.Description
Resume Thoat_Sua
End Sub
Private Sub cmdxoa_click()
On Error GoTo Loi_Xoa
Dim traloi
traloi = MsgBox("Baïn muoán xoùa chöùng töø " + Ado_heso.Recordset.Fields("heso") + " ?", 48 + 4, "Thoâng baùo")
'Neáu choïn YES
If traloi = 6 Then
'Xoùa baûn ghi
Ado_heso.Recordset.Delete
Ado_heso.Recordset.Clone
Ado_heso.Recordset.Requery
Ado_heso.Recordset.MoveNext
If Ado_heso.Recordset.EOF Then
Ado_heso.Recordset.MoveLast
End If
End If
'Duøng phöông thöùc Refresh cuûa ñoái töôïng Adodc ñeå caäp nhaät laïi döõ lieäu
Ado_heso.Refresh
Thoat_Xoa:
Exit Sub
Loi_Xoa:
MsgBox "Khoâng theå xoùa maãu tin naøy !"
Resume Thoat_Xoa
End Sub
Private Sub cmdghi_click()
On Error GoTo Loi_Ghi
Ado_heso.Recordset.UpdateBatch adAffectAll
Khoa
cmdthem.SetFocus
them = False
Thoat_Ghi:
Dataheso.SetFocus
Exit Sub
Loi_Ghi:
MsgBox "Döõ lieäu khoâng hôïp leä !"
MsgBox "Maõ chöùng töø coù toái 10 kyù töï soá !"
Resume Thoat_Ghi
End Sub
Private Sub cmdkhong_click()
If them Then
Ado_heso.Refresh
'Duøng phöông thöùc CancelUpdate ñeå boû qua vieäc caäp nhaät döõ lieäu
Ado_heso.Recordset.CancelUpdate
End If
Khoa
cmdthem.SetFocus
them = False
Ado_heso.Refresh
End Sub
Private Sub cmdthoat_click()
Ado_heso.Refresh
Unload Me
End Sub
'Khi click vaøo DataGrid cuûa heso ñoàng thôøi ñeám soá baûn ghi vaø
'ñaùnh daáu baûn ghi hieän haønh
Private Sub Dataheso_click()
Dim n
Dim n1
n = 0
n1 = 0
n = Ado_heso.Recordset.RecordCount
If (Ado_heso.Recordset.EOF = False) And (Ado_heso.Recordset.BOF = False) Then
n1 = Ado_heso.Recordset.Bookmark
End If
txtBGHH.Text = n1
txtSBG.Text = n
End Sub
Dim db As Database
Dim rec As Recordset
Dim sql As String
Private Sub CBoTC_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer)
Select Case Index
Case 0 'hä tªn
If KeyCode = 13 Then
If Not Trim(CBoTC(0).Text) = "" Then
CBoTC(0).Text = Chuan(CBoTC(0).Text, 1)
End If
CBoTC(1).SetFocus
End If
Case 1 ' thoe ma
If KeyCode = 13 Then
If Not Trim(CBoTC(1).Text) = "" Then
CBoTC(1).Text = Chuan(CBoTC(1).Text, 3)
End If
CBoTC(2).SetFocus
End If
Case 2 'theo he so luong
If KeyCode = 13 Then
If Not Trim(CBoTC(2).Text) = "" Then
If Len(Trim(CBoTC(2).Text)) 0 Then
CBoTC(2).Text = Chuan(Trim(CBoTC(2).Text), 2)
End If
End If
txtTC(0).SetFocus
End If
Case 3 ' theo phu cap
If KeyCode = 13 Then
If Not Trim(CBoTC(3).Text) = "" Then
CBoTC(3).Text = Chuan(CBoTC(3).Text, 2)
End If
CBoTC(4).SetFocus
End If
Case 4 ' theo laoi thuong
If KeyCode = 13 Then
If Not Trim(CBoTC(4).Text) = "" Then
CBoTC(4).Text = Chuan(CBoTC(4).Text, 2)
End If
CBoTC(5).SetFocus
End If
Case 5 ' con lao
If KeyCode = 13 Then
If Not Trim(CBoTC(5).Text) = "" Then
CBoTC(5).Text = Chuan(CBoTC(5).Text, 2)
End If
Me.cmdTCLuong.SetFocus
End If
End Select
End Sub
Private Sub CBoTC_LostFocus(Index As Integer)
Select Case Index
Case 0
CBoTC(0).Text = Chuan(CBoTC(0).Text, 1)
Case 1
CBoTC(1).Text = Chuan(CBoTC(1).Text, 3)
Case 2
CBoTC(2).Text = Chuan(CBoTC(2).Text, 2)
Case 0
CBoTC(3).Text = Chuan(CBoTC(3).Text, 2)
Case 0
CBoTC(4).Text = Chuan(CBoTC(4).Text, 2)
Case 0
CBoTC(5).Text = Chuan(CBoTC(5).Text, 2)
End Select
End Sub
Private Sub cmdexit_Click()
Unload Me
End Sub
Private Sub cmdInLuong_Click()
MsgBox "b¹n muèn In"
End Sub
Private Sub cmdTCLuong_Click()
Dim db As Database
Dim rec As Recordset
Dim IDMacb As String, IDHoTen As String
Dim IDHSL As String, IDMPC As String
Dim IDLT As String, IDLuong As String
Dim IDConLai As String, IDDnd As String
Dim pheptoan1 As String, pheptoan2 As String
Dim sql As String, i As Byte
sql = "SELECT DISTINCTROW HosoCanBo.macb, HosoCanBo.HoTen, HosoCanBo.Ngaysinh, HosoCanBo.Phong, HosoCanBo.Chucvu, HosoCanBo.NgayVaoBienChe, Luong.hesoluong, Luong.Loaithuong, Luong.MucPhuCap, Luong.SoNgayNghi, Luong.Luong, Luong.TamUng, Luong.Conlai "
sql = sql & " FROM Luong INNER JOIN HosoCanBo ON Luong.Macb = HosoCanBo.macb WHERE "
IDHoTen = Chuan(Trim(CBoTC(0).Text), 1)
IDMacb = Chuan(Trim(CBoTC(1).Text), 3)
IDHSL = (Trim(CBoTC(2).Text))
IDMPC = Trim(CBoTC(3).Text)
IDLT = Trim(CBoTC(4).Text)
IDDnd = Trim(CBoTC(5).Text)
pheptoan1 = Mid(Trim(txtTC(0).Text), 1, 2)
IDLuong = Mid((Trim(txtTC(0).Text)), 3, Len(Trim(txtTC(0).Text)))
pheptoan2 = Mid(Trim(txtTC(1).Text), 1, 2)
IDConLai = Mid((Trim(txtTC(1).Text)), 3, Len(Trim(txtTC(1).Text)))
'MsgBox IDHSL
Select Case Me.OptAND.Value
Case True
If Len(IDHoTen) > 0 Then sql = sql & " HosoCanBo.[HoTen] LiKe '" & IDHoTen & "' And "
If Len(IDMacb) > 0 Then sql = sql & " HosoCanBo.[Macb] LiKe '" & IDMacb & "' And "
If Len(IDHSL) > 0 Then sql = sql & " Luong.[Hesoluong] Like '" & IDHSL & "' And "
If Len(IDMPC) > 0 Then sql = sql & " Luong.[MucPhuCap] LiKe '" & IDMPC & "' And "
If Len(IDLT) > 0 Then sql = sql & " Luong.[LoaiThuong] LiKe '" & IDLT & "' And "
If Len(IDDnd) > 0 Then sql = sql & " Luong.[KyNhan] LiKe '" & IDDnd & "' And "
If Len(IDLuong) > 0 Then sql = sql & " val(Luong.[Luong]) " & pheptoan1 & " " & Val(IDLuong) & " And "
If Len(IDConLai) > 0 Then sql = sql & " val(Luong.[ConLai]) " & pheptoan2 & " " & Val(IDConLai) & " And "
MsgBox sql
sql = sql & " HosocanBo.[Macb]=luong.[Macb] ORDER BY HosoCanBo.[HoTen]"
'MsgBox sql
Case False
If Len(IDHoTen) > 0 Then sql = sql & " HosoCanBo.[HoTen] LiKe '" & IDHoTen & "' or "
If Len(IDMacb) > 0 Then sql = sql & " HosoCanBo.[Macb] LiKe '" & IDMacb & "' or "
If Len(IDHSL) > 0 Then sql = sql & " Luong.[Hesoluong] Like '" & IDHSL & "' Or "
If Len(IDMPC) > 0 Then sql = sql & " Luong.[MucPhuCap] LiKe '" & IDMPC & "' OR "
If Len(IDLT) > 0 Then sql = sql & " Luong.[LoaiThuong] LiKe '" & IDLT & "' OR "
If Len(IDDnd) > 0 Then sql = sql & " Luong.[KyNhan] LiKe '" & IDDnd & "' OR "
If Len(IDLuong) > 0 Then sql = sql & " val(Luong.[Luong]) " & pheptoan1 & " " & Val(IDLuong) & " OR "
If Len(IDConLai) > 0 Then sql = sql & " val(Luong.[ConLai]) " & pheptoan2 & " " & Val(IDConLai) & " OR "
sql = Mid(sql, 1, Len(Trim(sql)) - 2)
MsgBox sql
sql = sql & " AND HosocanBo.[Macb]=luong.[Macb] ORDER BY HosoCanBo.[HoTen]"
End Select
Set db = OpenDatabase("c:\Qlluong\Qlluong.mdb")
Set rec = db.OpenRecordset(sql, dbOpenSnapshot)
If rec.RecordCount = 0 Then
MsgBox " Kh«ng cã c¸n bé tho¶ m·n th«ng tin t×m kiÕm", vbCritical, "Th«ng b¸o"
Exit Sub
End If
Set DatTCLuong.Recordset = rec
Me.DbgTCLuong.Refresh
Me.txtTong.Text = Me.DatTCLuong.Recordset.RecordCount
Me.DbgTCLuong.SetFocus
End Sub
Private Sub cmdview_Click()
LUONG.Show
End Sub
Sub Form_Activate()
Me.Width = 11000
Me.Height = 7500
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 200
'NapDK
End Sub
Private Sub Form_Load()
Dim rec As Recordset
Dim sql As String
Me.OptAND.Value = True
Me.OptOR.Value = False
Me.Frame1.Enabled = False
mypath = "c:\QLluong\Qlluong.mdb"
For k = 0 To 5
Me.CBoTC(k).Text = ""
Next k
Me.txtTC(0).Text = ""
Me.txtTC(1).Text = ""
Me.DatTCLuong.RecordSource = mypath
Me.DbgTCLuong.Columns(0).DataField = "HoTen"
sql = "SELECT DISTINCTROW HosoCanBo.macb, HosoCanBo.HoTen, HosoCanBo.Ngaysinh, HosoCanBo.Phong, HosoCanBo.Chucvu, HosoCanBo.NgayVaoBienChe, Luong.hesoluong, Luong.Loaithuong, Luong.MucPhuCap, Luong.SoNgayNghi, Luong.Luong, Luong.TamUng, Luong.Conlai "
sql = sql & " FROM HosoCanBo,Luong WHERE "
sql = sql & "HosoCanBo.[Macb]=Luong.[Macb] ORDER BY HosoCanBo.[Hoten]"
Set db = DBEngine.Workspaces(0).OpenDatabase("c:\QLluong\Qlluong.mdb")
Set rec = db.OpenRecordset(sql, dbOpenSnapshot)
If rec.RecordCount = 0 Then
MsgBox " Kh«ng cã ®Çu s¸ch tho¶ m·n th«ng tin t×m kiÕm", vbCritical, "Th«ng b¸o"
Exit Sub
End If
Set Me.DatTCLuong.Recordset = rec
'Me.DatTCLuong.Refresh
With Me.DatTCLuong
Me.DbgTCLuong.Columns(0).DataField = .Recordset.Fields(1).Name
Me.DbgTCLuong.Columns(0).Width = 3000
' .Refresh
Me.DbgTCLuong.Refresh
TxtTCLuong(0).DataField = "Macb"
For i = 0 To 12 Step 1
TxtTCLuong(i).DataField = .Recordset.Fields(i).Name
Next i
Me.DbgTCLuong.Refresh
End With
Me.txtTong.Text = Me.DatTCLuong.Recordset.RecordCount
NapDK
End Sub
Public Sub NapDK()
'n¹p Th«ng Tin Ho tªn
For i = 1 To 5
Me.CBoTC(i).Clear
Next i
mypath = "c:\QLluong\Qlluong.mdb"
frmTraCuuLuong.CBoTC(0).AddItem ""
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [Hoten] FROM HosoCanBo ORDER BY HosoCanBo.[HoTen]"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmTraCuuLuong.CBoTC(0).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
frmTraCuuLuong.CBoTC(0).AddItem ""
End If
'n¹p Th«ng Tin MaCB
frmTraCuuLuong.CBoTC(1).AddItem ""
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [Macb] FROM Luong ORDER BY Luong.[Macb]"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmTraCuuLuong.CBoTC(1).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
' frmTraCuuLuong.CBoTC(1).AddItem ""
End If
'n¹p Th«ng Tin HÖ sè l¬ng
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [Heso] FROM HesoLuong ORDER BY HesoLuong.[Heso]"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmTraCuuLuong.CBoTC(2).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
frmTraCuuLuong.CBoTC(2).AddItem ""
End If
'n¹p Th«ng Tin Møc phô cÊp
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [MucPhucap] FROM PhuCap ORDER BY PhuCap.[MucPhuCap]"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmTraCuuLuong.CBoTC(3).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
frmTraCuuLuong.CBoTC(3).AddItem ""
End If
'n¹p Th«ng Tin Lo¹i thëng
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [LoaiThuong] FROM Thuong" ' ORDER BY Thuong.[LoaiThuong]"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
frmTraCuuLuong.CBoTC(4).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
frmTraCuuLuong.CBoTC(4).AddItem ""
End If
'n¹p Th«ng Tin §a nh©n
frmTraCuuLuong.CBoTC(5).AddItem ""
Set db = DBEngine.Workspaces(0).OpenDatabase(mypath)
MySql = "SELECT DISTINCT [KyNhan] FROM Luong ORDER BY Luong.[KyNhan]"
Set rec = db.OpenRecordset(MySql, dbOpenSnapshot)
If rec.RecordCount 0 Then
With rec
.MoveLast
.MoveFirst
Do While Not .EOF
Me.CBoTC(5).AddItem (.Fields(0).Value)
.MoveNext
Loop
End With
' frmTraCuuLuong.CBoTC(5).AddItem ""
End If
End Sub
Private Sub OptAND_Click()
Me.OptAND.Value = True
Me.OptOR.Value = False
End Sub
Private Sub OptOR_Click()
Me.OptOR.Value = True
Me.OptAND.Value = False
End Sub
Private Sub txtTC_KeyUp(Index As Integer, KeyCode As Integer, Shift As Integer)
Select Case Index
Case 0
If KeyCode = 13 Then
txtTC(1).SetFocus
End If
Case 1
If KeyCode = 13 Then
CBoTC(3).SetFocus
End If
End Select
End Sub
Private Sub Command1_Click()
Unload Me
End Sub
Sub cmdchucnang_Click()
outputdestination = 0
rptxemhoso.Destination = outputdestination
rptxemhoso.DataFiles(0) = mypath
rptxemhoso.ReportFileName = rptfilename + "hscb.rpt"
rptxemhoso.Action = 1
End Sub
Sub Form_Activate()
Me.Width = 11900
Me.Height = 7500
With DBGXemHoso
.Top = frmXemhoso.Top - 100
.Left = frmXemhoso.Left - 200
.Width = Me.Width - 100
.Height = Me.Height - 1500
End With
Me.Move (Screen.Width - Me.Width) / 200, (Screen.Height - Me.Height) / 200
Me.Frame1.Top = Me.Height - 1500
Me.Frame1.Left = Me.Left + 100
Me.Frame1.Width = Me.Width - 400
Me.datxemhoso.Visible = False
'Form_Load
End Sub
Sub Form_Load()
mypath = "c:\QLluong\qlluong.mdb"
datxemhoso.DatabaseName = mypath
datxemhoso.RecordSource = "HoSoCanBo"
Me.DBGXemHoso.Font.Name = ".vntime"
Me.DBGXemHoso.Font.Size = 12
Form_Activate
HienTieuDe
End Sub
Public Sub HienTieuDe()
With Me.DBGXemHoso
.Columns(0).Caption = "M· C¸n Bé"
.Columns(0).DataField = "Macb"
.Columns(0).Width = 1000
.Columns(1).Caption = "Hä Tªn"
.Columns(1).DataField = "Hoten"
.Columns(1).Width = 2500
.Columns(2).Caption = "Ngµy Sinh"
.Columns(2).DataField = "Ngaysinh"
.Columns(2).Width = 1500
.Columns(3).Caption = "Giíi TÝnh"
.Columns(3).DataField = "Gioitinh"
.Columns(3).Width = 1000
.Columns(4).Caption = "D©n Téc"
.Columns(4).DataField = "DanToc"
.Columns(4).Width = 1200
.Columns(5).Caption = "Quª Qu¸n"
.Columns(5).DataField = "QueQuan"
.Columns(5).Width = 2000
.Columns(6).Caption = "N¬i ë "
.Columns(6).DataField = "noioHienNay"
.Columns(6).Width = 2000
.Columns(7).Caption = "Phßng"
.Columns(7).DataField = "Phong"
.Columns(7).Width = 2000
.Columns(8).Caption = "Chøc Vô"
.Columns(8).DataField = "ChucVu"
.Columns(8).Width = 2000
.Columns(9).Caption = "Tr×nh §é"
.Columns(9).DataField = "trinhDO"
.Columns(10).Caption = "Chuyªn M«n"
.Columns(10).DataField = "ChuyenMon"
.Columns(11).Caption = "Ngµy Vµo biªn chÕ"
.Columns(11).DataField = "Ngayvaobienche"
End With
End Sub
Các file đính kèm theo tài liệu này:
- 3521.doc