Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
ĐỒ ÁN CÔNG NGHỆ THÔNG TIN: QUẢN LÝ TÀI SẢN CỐ ĐỊNH
1. BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC QUẢN LÝ VÀ KINH DOANH HÀ NỘI
KHOA TIN HỌC
Giáo viên hướng dẫn : TS. Hoàng Xuân Thảo
Sinh Viên thực hiện : Đỗ Đức Chung
Mã sinh viên : 99CV17
Khóa : IV
Đề tài:
QUẢN LÝ TÀI SẢN CỐ ĐỊNH
Ngành đào tạo: Tin học quản lý
2. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 2
Mục lục
Nội dung Trang
Lời cảm ơn 3
Lời giới thiệu 4
Phần I Giới thiệu về ngôn ngữ Visual Basic 5
1 Các công cụ để thiết kế giao diện 5
2 Lập trình vớI ngôn ngữ Visual Basic 8
Phần II Phần mềm Quản lý tài sản cố định 14
1 Mục đích và nhu cầu thực tế của phần mềm 14
2 Các chức năng chính 14
3 Cơ sở dữ liệu 16
Phần III Mã nguồn 22
1 Một số Form chính 22
2 Một số Modul chính 85
Kết luận 92
3. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 3
Lời Cảm ơn
Hơn bốn năm học vất vả nhưng đầy thú vị đã trôi qua.
Ngày ra trường đã đến gần. Chúng tôi, những sinh viên lớp
tin 4, trường Đại học Quản lý và Kinh doanh Hà Nội đã
hoàn tất nốt những trang cuối của Luận văn tốt nghiệp.
Luận văn này là kết quả học tập, rèn luyện của tôi trong bốn
năm học và hơn 6 tháng thực tập. Để có thể hoàn thành luận
văn này, tôi đã nhận được rất nhiều sự chỉ bảo, hướng dẫn
của các thầy, cố giáo, sự động viên, giúp đỡ của bạn bè, gia
đình…
Trước hết, tôi xin được chân thành cảm ơn Thầy giáo,
TS. Hoàng Xuân Thảo đã tận tình hướng dẫn và giúp đỡ tôi
hoàn thành đề tài luận văn tôt nghiệp.
Tôi xin được bày tỏ lòng biết ơn các thầy, cô giáo
trường Đại Học Quản lý và Kinh doanh Hà Nội, đặc biệt là
Khoa Tin Học, đã giảng dạy, truyền thụ những kiến thức quý
báu, cũng như tạo mọi điều kiện thuận lợi cho tôi trong suốt
quá trình học tập tại trường.
Xin được gửi lời cảm ơn đến những người thân trong
gia đình, bạn bè đã giúp đỡ, động viên tôi trong quá trình
thực hiện luận văn.
4. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 4
Lời giới thiệu
Trong thời đại ngày nay, bất kể tổ chức, cá nhân nào, từ các
doanh nghiệp tư nhân đến cơ quan nhà nước, hay các tổ
chức xã hội tất cả đều không thể không sử dụng công nghệ
thông tin để phát triển và tồn tại. Các hoạt động của nhà
nước, mà quản lý tài sản là một phần nhỏ, cũng không nằm
ngoài quy luật trên.
Hàng năm, nhà nước ta đều tiến hành kiểm kê các tài sản cố
định để nhằm nắm được số lượng, chất lượng, giá trị và thực
trạng sử dụng của các tài sản cố định đang sử dụng trong các
cơ quan nhà nước. Tài sản cố định ở đây là tất cả các tài sản
có nguồn gốc từ vốn của nhà nước, đang được các đơn vị
hành chính sử dụng. Việc kiểm kê này bao gồm rất nhiều
công đoạn như: Xác định hiện trạng, định giá lại tài sản, lập
phiếu kiểm kê, thống kê số liệu, lưu giữ dữ liệu…Công việc
này đòi hỏi một số lượng lớn thời gian, nhân lực, vật lực.
Chính vì vậy, tôi đã chọn đề tài Quản lý tài sản cố định làm
đề tài cho Luận văn tốt nghiệp. Chương trình được viết ra
nhằm mục đích tin học hoá các hoạt động trên để giảm bớt
chi phí về thời gian cho công việc thống kê, tìm kiếm, lập
phiếu kiểm, lưu giữ dữ liệu. Chương trình có thể áp dụng
trong TP. Hà Nội.
Công tác quản lý, thống kê các tài sản cố định là một bài toán
lớn, phức tạp. Trong khi đó, thời gian để thực hiện đồ án là có
hạn, cũng như kinh nghiệm về lập trình, hiểu biết về nghiệp vụ
thực tế còn hạn chế, nên chắc chắn chương trình phần mềm
và luận văn nay sẽ còn nhiều hạn chế. Tôi rất mong sẽ nhận
được sự đóng góp ý kiến, chỉ bảo của các thầy, cô giáo, cũng
như các bạn có quan tâm đến đề tài này.
5. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 5
Phần I : Giới thiệu ngôn ngữ Visual Basic
Ngôn ngữ Visual Basic ngày càng được sử dụng rộng rãi trong các đề án,
chương trình thực hiện trong và ngoài nước. Visual Basic được xem là
một công cụ phát triển phần mềm thông dụng hiện nay.
Sau phiên bản Visual Basic 1.0 là Visual Basic 2.0, đã từng chạy nhanh
hơn, dễ sử dụng hơn. Đến Visual Basic 3.0 bổ sung thêm một số phương
thức đơn giản, dễ điều khiển cơ sở dữ liệu hơn. Visual Basic 4.0 bổ sung
thêm hơn hỗ trợ phát triển 32 bit và bắt đầu tiến trình chuyển Visual Basic
thành ngôn ngữ lập trình hướng đốI tượng. Visual Basic 5.0 bổ sung khả
năng tạo các điều khiển riêng. Visual Basic 6.0 có thêm nhiều chức năng
mạnh như các ứng dụng Internet/ Intranet. . .v.v…..
Visual Basic gắn liền vớI khái niệm lập trình trực quan, nghĩa là khi thiết kế
chương trình, bạn thấy ngay được kết quả qua từng thao tác. Visual Basic
cho phép chỉnh sửa một cách đơn giản, nhanh chóng giao diện của các
đốI tượng trong ứng dụng. Đó là một thuận lợI cho ngườI lập trình.
VớI Visual Basic, việc lập trình trong Windows đã trở nên hiệu quả hơn và
đơn giản hơn rất nhiều. Một khả năng nữa của Visual Basic là khả năng
kết hợp các thư viện liên kết động DLL (Dynamic Link Library). DLL chính
là phần mở rộng cho Visual Basic, tức là khi xây dựng một chương trình
có một số yêu cầu mà Visual Basic không đáp ứng đầy đủ ta có thể viết
các DLL để phụ thêm cho chương trình.
1 Các công cụ để thiết kế giao diện:
Như chúng ta đã biết Visual Basic là ngôn ngữ lập trình có tính hướng đốI
tượng nên công việc thiết kế giao diện là rất đơn giản. Chúng ta chỉ việc
tiến hành đưa các đốI tượng cần thiết trong thanh công cụ vào Form bằng
cách kích – kéo sau đó thay đổI các thuộc tính của chúng trên cửa sổ
Properties cho phù hợp vớI mục đích lập trình.
1.1 Form:
Form là một biểu mẫu của mỗI ứng dụng trong Visual Basic. Ta dùng
Form nhằm mục đích định vị và sắp xếp các bộ phận trên nó khi thiết kế
giao diện vớI ngườI sử dụng. Ta có thể xem Form như một bộ phận mà nó
có thể chứa các bộ phận khác. Các thành phần trong Form chính của ứng
dụng tương tác vớI các Form khác và các bộ phận của chúng tạo nên giao
tiếp cho ứng dụng. Form chính là giao diện chính của ứng dụng, các Form
khác có thể chứa các công cụ để nhập dữ liệu, xem xét v.v…
6. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 6
Trong nhiều ứng dụng của Visual Basic, kích cỡ và vị trí của biểu mẫu lúc
thiết kế là kích cỡ mà ngườI dùng sẽ gặp vào lúc sử dụng. Điều này, có
nghĩa là Visual Basic cho phép ta thay đổI kích cỡ và di chuyển vị trí Form
đến bất cứ nơi nào trên màn hình khi chạy một đề án, bằng cách thay đổI
một số thuộc tính của nó trên cửa sổ thuộc tính đốI tượng (Properties
Windows ). Thực tế, một trong tính năng thiếu của Visual Basic là khả
năng tiến hành các thay đổI động để đáp ứng sự kiện ngườI dùng.
1.2 Toolbox (hộp công cụ):
Toolbox là hộp công cụ chưa các biểu tượng, biểu thị cho các điều khiển
mà ta có thể biểu mẫu là bảng chứa các đối tượng đã được định nghĩa
sẵn của Visual Basic. Các đối tượng này được sử dụng trong Form để tạo
thành giao diện cho các chương trình ứng dụng của Visual Basic. Ta có
thể coi hộp công cụ là một hộp “đồ nghề” của người thiết kế chương trình.
1.3 Scrollbar (thanh cuốn):
Scrollbar là đối tượng cho phép nhận từ người dùng một giá trị tuỳ theo vị
trí con chạy trên thanh cuốn thay cho các giá trị số.
Thanh cuốn có một số thuộc tính quan trọng sau:
Thuộc tính Min: xác định cận dưới của thanh cuốn.
Thuộc tính Max: xác định cận trên của thanh cuốn.
Thuộc tính Value: xác định giá trị tạm thời của thanh cuốn.
1.4 Option Button (Nút chọn):
Đối tượng nút chọn (thường được dùng nhiều nút) cho phép người dùng
chọn một trong những lựa chọn đưa ra. Như vậy, tại 1 thời điểm chỉ có thể
là 1 trong những nút chọn đuợc chọn
1.5 Checkbox( hộp kiểm)
Cũng như nút chọn, đối tượng hộp kiểm được dùng nhiều hộp một lần.
Nhưng khác với nút chọn, hộp kiểm cho phép người dùng lựa một hay
nhiều điều kiện. Như vậy tại 1 thời điểm có thể có nhiều hộp kiểm được
chọn
1.6 Label(nhãn)
Đối tượng nhãn cho phép người dùng gắn nhãn 1 bộ phận nào đó của
giao diện trong lúc thiết kế giao diện cho chương trình ứng dụng .
Các nhãn dùng để hiển thị thông tin không muốn người dùng thay đổi.
Trong thực tế, các nhãn thường được dùng để định danh 1 hộp văn bản
hoặc 1 điều khiển khác bằng việc mô tả nội dung của điều khiển đó. Một
công cụ phổ biến cho việc hiển thị thông tin trợ giúp,
7. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 7
1.7 Picturebox, Image ( hộp ảnh, điều khiển ảnh )
Đối tượng Image và Picturebox dùng để hiển thị ảnh . Nó cho phép người
thiết kế đưa hình ảnh từ các file ảnh ( .bmp , .gif …) lên Form
1.8 Textbox ( hộp văn bản )
Đối tượng Textbox dùng làm hộp nhập dữ liệu cho phép đưa các chuỗi ký
tự vào Form. Có thể dùng hộp văn bản để nhập dữ liệu hoặc hiển thị văn
bản . Tất cả các công cụ trong windows về chỉnh sửa văn bản như : cut ,
copy , paste đều dùng trong hộp văn bản
1.9 Command Button ( nút lệnh )
Khi người dùng kích vào 1 nút lệnh trong biểu mẫu, một thao tác nào đó
sẽ được thực hiện tuỳ theo thủ tục sự kiện được viết để đáp ứng sự kiện
kích chuột đó .
1.10 Listbox ( hộp danh sách )
Đối tượng Listbox cho phép kết xuất các thông tin về nhiều chuỗi kí tự vào
trong nó thông qua phương thức additem. Thường được dùng để hiển thị
thông tin dưới dạng danh sách có liên quan với nhau. Listbox không cho
phép người dùng nhập dữ liệu vào.
1.11 Combo box ( hộp kết hợp )
Công cụ này cho phép người dùng gõ vào thông tin và hiển thị thông tin .
nó có tác dụng như hộp danh sách và hộp văn bản . Hộp kết hợp có 3 loại:
- Hộp kết hợp thả xuống ( drop-down combo ) : là 1 hộp văn bản cho
phép người dùng gõ vào, kế bên có 1 mũi tên mà khi nhấn vào nó sẽ
xổ ra 1 danh sách cho phép người sử dụng chọn lựa .
- Hộp kết hợp đơn giản ( simple combo ) : luôn hiển thị danh sách và cho
phép người dùng gõ vào hộp văn bản.
- Hộp danh sách thả xuống ( drop- down list box) : tương tự như hộp kết
hợp thả xuống. Danh sách sẽ không hiển thị sẵn nếu người dùng
không nhấn vào mũi tên bên cạnh. người sử dụng chỉ có thể chọn từ
danh sách, gõ vào hộp văn bản thì danh sách sẽ cuộn đúng đến phần
tử yêu cầu và đánh dấu nó.
8. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 8
1.12 Ole ( đối tượng nhúng )
Ole là viết tắt của Object - Linking and Embedding . Nó cho phép ta nhúng
toàn bộ ứng dụng và dữ liệu từ một ứng dụng khác vào chương trình . Ole
không chỉ là 1 hệ thống cho phép nhúng hay kết nối dữ liệu từ 1 ứng dụng
khác mà vào thời gian chạy của chương trình ta sẽ có 1 bản sao của ứng
dụng đó trong chương trình của ta. Nó có khả năng automation cho phép
đóng gói các đối tượng chức năng của ứng dụng để có thể sử dụng trong
ứng dụng khác.
1.13 Project explorer
Project explorer trong Visual Basic 6.0 giúp quản lý và định hướng các đề
án, biểu mẫu, các module,…. Visual Basic cho phép tổ chức nhiều đề án
trong 1 nhóm gọi là project groups. Ta có thể lưu tập hợp các đề án trong
Visual Basic thành 1 tập tin nhóm đề án. Các tập tin này có phần mở rộng
là .Vbg .
1.14 Propeties windows ( cửa sổ thuộc tính )
Là nơi chứa danh sách các thuộc tính của một đối tượng cụ thể. Các
thuộc tính này có thể khác nhau với từng đối tượng cụ thể. Ta có thể đặt
các thuộc tính cho phù hợp với các chương trình ứng dụng.
2 Lập trình với ngôn ngữ Visual Basic
Ở phần một, chúng ta mới chỉ biết tuỳ biến biểu mẫu bằng cách bổ xung
các điều khiển vào cho phù hợp với yêu cầu của chương trình. Tuy nhiên,
đó chỉ có thể coi là bộ mặt của chương trình. Muốn chương trình chạy
được thì chúng ta phải thêm vào các thành phần khác như lệnh, dữ liệu. .
và cách thức thể hiển chúng trong chương trình.
Khi lập trình trong Visual Basic thì phần lớn các mã được xử lý để đáp ứng
sự kiện. Ví dụ như sự kiện kích chuột, bấm phím, load form…Các dòng
mã thi hành trong một chương trình Visual Basic phải nằm trong các thủ
tục hoặc hàm, các dòng lệnh nằm ngoài sẽ không làm việc. Toàn bộ mã
lệnh được gõ vào trong cửa sổ code.
2.1 Cửa sổ code
Cửa số code bao gồm các thành phần sau:
Thanh tách: cửa sổ code có một thanh tách (Split bar) nằm đầu thanh
cuộn dọc. Mục đích của nó là: khi các dòng mã trở nên nhiều, ta có thể
chia cửa sổ code thành 2 phần.
9. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 9
Hộp liệt kê Object: nằm ở đầu cửa sổ code bên trái, nó liệt kê tất cả các
điều khiển có trên biểu mẫu và thêm vào một đối tượng có tên là: General.
Khi thả hộp liệt kê và nhắp vào một đối tượng nào đó thì sẽ đưa ta đến
phần mã viết cho đối tượng đó.
Hộp Procedure: hộp này cung cấp mọi sự kiện mà đối tượng đã được lựa
chọn trong hộp liệt kê object.
2.2 Intellisence:
Intellisence là một công cụ thông minh, nó giúp ta đỡ mất công gõ và tra
cứu. Intellisence mở các hộp liệt kê cùng với các thông tin về đối tượng
mà ta đang tiếp cận. Nó có 3 phần:
- QuickInfo: cho ta thông tin về cú pháp của 1 lệnh Visual Basic. Mỗi khi
nhập một từ khoá theo sau là một dấu cách hoặc dấu chấm. . .một hộp
thoại sẽ hiện ra cung cấp cú pháp của thành phần đó.
- List properties/Methods: tính năng này đưa ra một danh sách các tính
chất và phương pháp của đối tượng ngay khi ta gõ dấu chấm.
- Available constant : tính năng này cung cấp một danh sách các hằng
sẵn có.
2.3 Biến
Trong Visual Basic, tên biến có thể dài tối đa 255 kí tự. Kí tự đầu tiên phải
là một chữ cái và tên biến có thể là một tổ hợp chữ cái, chữ số và dấu
gạch dưới. Không được dùng các từ khoá trong Visual Basic ( như end,
print. . .) làm tên biến. Visual Basic không phân biệt chữ hoa, chữ thường.
Cách khai báo biến: Dim <Tên biến> as <Kiểu biến>
Phạm vi sử dụng biến phụ thuộc vào cách khai báo biến và vị trí đặt dòng
lênh khai báo.
2.4 Các kiểu dữ liệu:
- String: các biến string lưu giữ các kí tự. Một chuỗi có thể có một hay
nhiều kí tự.
- Integer: biến nguyên lưu giữ các giá trị số nguyên từ -32768 đến
+32767.
- Long Integer: biến số nguyên dài lưu giữ các số nguyên giữa:
-2147483648 đến +214783647.
- Single precision: các số có phần thập phân gồm: Single precision có độ
chính xác đến 7 chữ số và double precision có độ chính xác lên đến 16
vị trí.
10. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 10
- Currency: Biến tiền tệ là một kiểu mới. Kiểu này cho ta 15 chữ số trước
dấu thập phân và 4 chữ số sau dấu thập phân.
- Date: kiểu dữ liệu ngày tháng.
- Byte: kiểu byte có thể lưu giữ các số nguyên từ 0 đến 255.
- Boolean: đây là kiểu logic với các giá trị True/False.
- Variant: kiểu này được thiết kế để lưu mọi dữ liệu khác nhau của Visual
Basic.
2.5 Các toán tử:
2.5.1 Các toán tử tính toán
Các toán
tử
Ý nghĩa Ví dụ
+ Có thể dùng để cộng hai toán hạng
hoặc hai chuỗi với nhau.
X=y+1
A=”A”+”B”
- trừ 2 số hạng X=y-1
* Nhân 2 số hạng X=y*2
/ Chia, trả về kiểu số thực Y=4/2
Chia lấy nguyên X=32(x=1)
Mod Chia lấy dư X=7 mod 4 (x=3)
^ Lấy luỹ thừa X=y^3 (X=y3
)
2.5.2 Các toán tử so sánh:
Toán tử Ý nghĩa
> So sánh xem số thứ nhất có lớn hơn số thứ 2 không
< So sánh xem số thứ nhất có nhỏ hơn số thứ 2 không.
= So sánh số thứ nhất có bằng số thứ 2 không.
<> So sánh số thứ nhất có khác số thứ 2 không.
>= So sánh số thứ nhất có lớn hơn hay bằng số thứ 2 không
<= So sánh số thứ nhất có nhỏ hơn hay bằng số thứ 2 không
2.5.3 Các toán tử Boolean
Toán tử Ý nghĩa
And Chỉ nhận giá trị True nếu cả 2 số hạng đều là True
Or Chỉ nhận giá trị False nếu cả 2 số hạng đều là False
Not Phủ định giá trị của số hạng
11. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 11
2.6 Cấu trúc điều khiển
2.6.1 Các cấu trúc chọn:
2.6.1.1 Cấu trúc If….Then…
Dạng 1: If <Biểu thức logic> then < lệnh> End If
Khi gặp một điều lệnh If…..then, Visual Basic sẽ kiểm tra <Biểu thức
logic>, nếu là True thì máy sẽ thực hiện <lệnh> nếu kêt quả là False thì
máy sẽ bỏ qua lệnh và thực hiện những lệnh sau End If.
Dạng 2: If <Biểu thức logic> then <lệnh 1> else <lệnh 2>
Khi gặp lệnh này, nếu <Biểu thức logic> lấy giá trị True thì thực hiện < lệnh
1> bỏ qua <lệnh 2>, còn nếu <Biểu thức logic> lấy giá trị False thì bỏ qua
<lệnh 1> và thực hiện <lệnh 2>.
Nhiều khi bạn phải thực hiện nhiều lệnh ứng với điều kiện là True hay
False. Để làm được điều đó, ta sử dụng dạng khác của cấu trúc If
…..then, có dạng tổng quát như sau:
If <Biểu thức điều kiện> then
<Các câu lệnh thực hiện>
else
<Các câu lệnh thực hiện>
end if
2.6.1.2 Cấu trúc Select Case:
Cú pháp:
Select case <Biến hay biểu thưc>
Case <giá trị 1>
<Các câu lệnh>
…………………
Case <giá trị 2>
……………..
Case else
<Các câu lện>
End Select
2.6.2 Cấu trúc lặp
2.6.2.1 Cấu trúc lặp có điều kiện
Cú pháp 1:
While < Biểu thức điều kiện>
<Các câu lệnh>
Wend
Cú pháp 2:
12. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 12
Do
<Các câu lệnh>
While <Biểu thức điều kiện>
<Các câu lệnh> được thực hiện lặp đi lặp lại nếu <Biểu thức điều kiện>
vẫn nhận giá trị True. Do đó, để thoát khỏi vòng lặp thì trong <Các câu
lệnh phải có lệnh thay đổi gia trị của <Biểu thức điều kiện>. Trong cú pháp
1, thì <Biều thức điều kiện> được xét trước khi thực hiện các câu lệnh,
còn trong cú pháp 2 thì các câu lệnh được thực hiện trước khi xét đến
<Biểu thức điều kiện>.
2.6.2.2 Cấu trúc For …Next
Cú pháp:
For <biến> = <giá trị đầu> to <giá trị cuối> [Step <bước nhẩy>]
<Các câu lệnh>
Next <biến>
Đây là lệnh lặp biết trước số lần lặp. Khi gặp cấu trúc lệnh này, Visual
Basic sẽ gán giá trị <biến> cho <giá trị đầu>, thực hiện <Các câu lệnh>, rồi
tăng <biến> lên một giá trị tuỳ theo <bước nhẩy>. Vòng lặp này sẽ kết thúc
khi <biến> có giá trị lớn hơn <giá trị cuối>
2.2.1 Cấu trúc For Each….Next
For Each <phần tử> In <nhóm>
<Khối lệnh>
Next <phần tử>
Khi gặp cấu trúc này, Visual Basic sẽ lặp lại <Khối lệnh> cho từng phần tử
của mảng, hay các điều khiển…Người ta thường dùng cấu trúc này để
duyệt nhiều đối tượng điều khiển.
2.7 Thủ tục
Trong Visual Basic, một thủ tục mà trước khi ta muốn sử dụng nó thì ta
phải định nghĩa nó và ta phải dùng từ khoá “Sub” để khai báo nó.
Private/Public Sub <Tên thủ tục>
<Các câu lệnh>
End Sub <phần tử>
Nếu dùng từ khoá Public, thủ tục có thể được dùng trong bất kì Form nào
trong chương trình.
Nếu ta khai báo bằng từ khoá Private thì thủ tục chỉ có thể được dùng
được trong Form,module chứa nó mà thôi.
Giá trị được truyền cho thủ tục thông qua tham số. Một thủ tục có thể có
hoặc không có tham số. Khi gọi một thủ tục có tham số, ta phải truyền giá
13. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 13
trị cho tham số của thủ tục đó. Trong Visual Basic, có 2 cách để truyền
thám số : By Ref ( truyền tham chiếu) và By Val ( truyền tham trị ).
Private/Public Sub <Tên thủ tục> (<Tham số1> as <Kiểu>, <Tham số 2>
as <Kiểu 2>, v.v…)
<Các câu lệnh>
End Sub
2.8 Hiển thị và nhận thông tin
Ta sử dụng các hộp đối thoại để hiển thị thông tin cho người dùng hoặc
nhận thông tin. Trong Visual Basic có 4 hộp thoại, đó là:
2.8.1 Thông điệp: (MesageBox)
Là một hộp thoại đơn giản nhất, gồm 2 loại:
- Chỉ cung cấp thông tin
- Tương tác với người sử dụng.
2.8.2 Hộp nhập (InputBox)
InputBox dùng để nhập thông tin từ người dùng, nó bao gồm một dòng
thông báo, hộp soạn thảo và 2 nút “OK” và “Cancel”. Nó có mặt hạn chế là
chỉ cho người sử dụng nhập rất ít thông tin.
2.8.3 Các hộp thoại thông dụng
Bởi hộp thoại này xuất hiện mọi nơi, nên thay vì phải viết chương trình
nhiều lần, Windows chứa chúng trong cùng một DLL, Comdlg32.dll hay
Comdlg.ocx
Có 6 hộp thoại:
- Mở tập tin (File Open)
- Lưu tập tin (File save).
- Chọn mầu (Color).
- Chọn phông (Font).
- Trợ giúp (Help).
- In ấn (Print).
2.8.4 Hộp thoại hiệu chỉnh (Custom Dialog).
Đây là loại hộp đối thoại do người lập trình định nghĩa để tương thích với
yêu cầu nhận thông tin của người sử dụng. Nó có ưu điểm là ta có thể
thiết kế theo ý thích. Trở ngại của nó là khi thi hành từng biểu mẫu thì sẽ
sử dụng tài nguyên hệ thống như bộ nhớ, thời gian CPU. Nếu dùng nhiều
hộp thoại hiệu chỉnh trong ứng dụng có thể mất tài nguyên hệ thống và dễ
bị treo máy.
14. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 14
Phần II: Phần mềm Quản lý tài sản cố định
1 Mục đích và nhu cầu thực tế của phần mềm
Việc quản lý tài sản cố định đang sử dụng trong các cơ quan hành chính
là một hoạt động quan trọng trong các hoạt động của nhà nước. Chính vì
vậy, hàng năm, nhà nước ta đều tiến hành công việc kiểm kê các tài sản
này, để nắm được số lượng, chất lượng, hiện trạng sử dụng. Từ đó đưa
ra các số liệu thống kê nhằm sử dụng tài sản cố định một cách hiệu quả,
giảm thiểu các chi phí, thất thoát.
Nếu như thực hiện công việc này theo cách cổ điển bằng giấy tờ, sổ sách
thì sẽ cần đến rất nhiều nhân lực, vật lực cho việc nhập số liệu, tính toán,
lưu giữ chứng từ. Và cho dù có đầy đủ nhân lực, vật lực, thì công việc trên
sẽ tiêu tốn một thời gian rất lớn. Khi có nhu cầu tìm kiếm, thống kê, ta
không thể tìm kiếm nhanh chóng trong một đống giấy tờ. Trong khi đấy, ta
vẫn không đảm bảo là tránh được các sai sót.
Vì vậy, việc áp dụng công nghệ thông tin vào công việc trên là điều tất
yếu. Khi phần mềm “Quản lý tài sản cố định ra đời” sẽ khắc phục được
các nhược điểm của cách làm việc cổ điển. Đó là:
- Giảm thiểu nhân lực, vật lực, thời gian cho việc thống kê, quản lý tài
sản.
- Tránh được các sai sót do con người gây ra.
- Đưa ra các số liệu tìm kiếm, thống kê trong thời gian nhanh nhất.
2 Các chức năng chính của Phần mềm Quản lý TSCĐ
Phần mềm có các chức năng chính sau:
- Quản lý quyền truy cập.
- Quản lý các đơn vị hành chính. (về mặt tài sản)
- Quản lý các tài sản cố định.
- Quản lý các giao dịch.
- Tìm kiếm, thống kê.
- In báo cáo theo mẫu của Bộ tài chính
Sơ đồ chức năng:
15. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 15
2.1 Quản lý quyền truy cập.
Vì chương trình Quản lý TSCĐ phục vụ cho việc quản lý, thống kê tài sản
cố định do các cơ quan, đơn vị nhà nước sử dụng, nên bảo mật dữ liệu là
một công tác vô cùng quan trọng. Сhức năng quản lý quyền truy cập của
những người được phép sử dụng chương trình có thể, cho phép, hạn chế,
hoặc không cho phép sử dụng các chức năng của chương trình. Ta có thể
chia những người được phép sử dụng chương trình thành 3 nhóm chính:
người quản trị, người sử dụng cấp cao và người sử dụng thông thường.
Người sử dụng thông thường: là nhóm người có quyền thấp nhất.
Những người thuộc nhóm này chỉ có quyền được xem các dữ liệu của
chương trình.
Người sử dụng cấp cao: là nhóm người có quyền như người sử dụng
thông thường nhưng được phép nhập, chỉnh sửa dữ liệu.
Người quản trị: Đây là nhóm người có quyền cao nhất. Ngoài các
quyền của nhóm người sử dụng cấp cao, nhóm này còn được phép
quản lý các nhóm người khác. (Như được phép thêm, xoá, sửa chữa
dữ liệu của các người dùng.)
2.2 Quản lý đơn vị hành chính
Các đơn vị hành chính ở đây chính là các đơn vị đang quản lý, sử dụng
các tài sản cố định của nhà nước. Việc quản lý này được tiến hành theo
nghành dọc. Chức năng này cho phép nắm được các thông tin của từng
đơn vị, như tên, địa chỉ, số điện thoại… của tưng đơn vị
Các chức năng
QL Quyền truy cập QL Đơn vị hành chính
QL Tài sản cố định QL Giao dịch
Tìm kiếm, thống kê In Báo cáo
16. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 16
2.3 Quản lý Tài sản cố định
Đây là chức năng chính của chương trình. Chức năng này có liên quan
trực tiếp đến chức năng trên. Bởi vì, chúng ta quản lý tài sản theo từng
đơn vị. Để dễ dàng cho việc quản lý, nhà nước đã quy định chia tài sản cố
định thành 7 loại chính: Đất đai, nhà cửa, vật kiến trúc, phương tiện vận
tải, máy móc thiết bị, các tài sản cố định khác. Vì đặc điểm riêng, ta có thể
phân chia tài sản cố định ra thành tài sản là đất và tài sản không là đất.
Chức năng này cho phép nhập mới, chỉnh sửa một cách chi tiết về các tài
sản cố định. Giúp cho người quản lý nắm được chi tiêt các đặc điểm của
từng tài sản, như: Tên, giá trị, thông số kỹ thuật…Trong chức năng này,
chương trình cho phép tính toán hao mòn của các tài sản cố định.
2.4 Quản lý Giao dịch
Chức năng Quản lý giao dịch cho phép ta quản lý được việc mua, bán các
tài sản giữa các đơn vị hành chính với nhau cũng như giữa các đơn vị
hành chính và các đơn vị, công ty khác. Cho phép ta nắm được các tài
sản thanh lý, huỷ…
2.5 Tìm kiếm, thống kê
Đây là chức năng trợ giúp người quản lý chương trình có thể tìm kiếm các
tài sản, các đơn vị có trong chương trình. Ngoài ra, nó còn cho phép đưa
ra các số liệu thống kê theo yêu cầu. Với chức năng này, ta có thể có cái
nhìn từ tông thể đến chi tiết về các tài sản cố định của từng đơn vị cũng
như từng loại tài sản cố định. Từ đó nắm được số lượng, chất lượng, thực
trạng của các tài sản.
2.6 In báo cáo theo mẫu của Bộ Tài Chính.
Chức năng này cho phép in ra các báo cáo theo mẫu của Bộ Tài Chính.
3 Cơ sở dữ liệu
Mô hình quan hệ trong cơ sở dữ liệu
17. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 17
3.1 Bảng tblDonvi: Lưu giữ thông tin về các đơn vị.
3.2 Bảng tblDonviNgoai
3.3 Bảng tblHopdong
20. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 20
3.13 Bảng tblTongHopDat_Master
3.14 Bảng tblTongHopTSCD_KLD_Detail
21. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 21
3.15 Bảng tblTongHopTSCD_KLD_Master
3.16 Bảng tblTonghopTSCD_KLD_Detail2
22. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 22
Phần III: Mã nguồn
Sau đây là một số Form và Modul quan trọng trong chương trình.
1 Một số Form chính
1.1 Form: MDIForm
Đây là giao diện chính của chương trình:
Public BExit As Boolean
Private Sub MDIForm_Load()
Path = App.Path & "csdl.mdb"
Me.Icon = LoadResPicture(1, vbResIcon)
BExit = False
Skin = 0
MaDV = "H0000"
helppath = App.Path & "helphelp.chm"
MDIload
Init_icon
Set_Icon
Set_Panel
Set_Code
23. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 23
Set_Font
End Sub
Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then
Call mnuThoat_Click
Cancel = Not BExit
End If
End Sub
Private Sub mnuAbout_Click()
frmAbout.Show
End Sub
Private Sub mnuAdmin_Click()
frmAdmin.Show
End Sub
Private Sub mnuBC1A_Click()
Report3
mnuTH3B.Checked = False
mnuBC1B.Checked = False
mnuBC2.Checked = False
mnuBC1A.Checked = True
mnuTH4.Checked = False
mnuTH3A.Checked = False
End Sub
Private Sub mnuBC1B_Click()
report4
mnuTH3B.Checked = False
mnuBC1B.Checked = True
mnuBC2.Checked = False
mnuBC1A.Checked = False
mnuTH4.Checked = False
mnuTH3A.Checked = False
End Sub
Private Sub mnuBC2_Click()
Report1
mnuTH3B.Checked = False
mnuBC1B.Checked = False
mnuBC2.Checked = True
mnuBC1A.Checked = False
mnuTH4.Checked = False
24. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 24
mnuTH3A.Checked = False
End Sub
Private Sub mnuChonDV_Click()
'Call CloseActiveForm("frmChonDV")
frmChonDV.Show
End Sub
Private Sub mnuDat_Click()
'Call CloseActiveForm("frmNhapDS")
frmNhapDS.Show
frmNhapDS.SSTab1.Tab = 0
End Sub
Private Sub mnuDonvi_Click()
'Call CloseActiveForm("frmNhapDV")
frmDonVi.Show
End Sub
Private Sub mnuFont_Click()
Dim f As Form
Dim a As Control
' Set Cancel to True.
Dialog.CancelError = True
On Error GoTo ErrHandler
' Set the Flags property.
Dialog.Flags = cdlCFBoth Or cdlCFEffects
' Display the Font dialog box.
Dialog.ShowFont
If frmMDI.Dialog.FontSize > 14 Then frmMDI.Dialog.FontSize = 14
If frmMDI.Dialog.FontName <> "" Then
Default.Name = frmMDI.Dialog.FontName
Default.Bold = frmMDI.Dialog.FontBold
Default.Italic = frmMDI.Dialog.FontItalic
Default.Size = frmMDI.Dialog.FontSize
End If
For Each f In Forms
If f.Name <> "frmMDI" Then
For Each a In f.Controls
Set_Child_font f, a
Next
End If
Next
ErrHandler:
' User pressed Cancel button.
Resume Next
25. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 25
End Sub
Private Sub mnuGiaodich_Click()
'Call CloseActiveForm("frmGiaodich")
frmGiaoDich.Show
End Sub
Private Sub mnuKK1_Click()
Report1
End Sub
Private Sub mnuHaomon_Click()
frmHaoMon.Show
End Sub
Private Sub mnuHuongDan_Click()
HH_DISPLAY_Click
HH_HELP_Click
End Sub
Private Sub mnuKLD_Click()
'Call CloseActiveForm("frmNhapDS")
frmNhapDS.Show
frmNhapDS.SSTab1.Tab = 1
End Sub
Private Sub mnuLoai_Click()
'Call CloseActiveForm("frmNhapTS")
frmChonTS.Show
End Sub
Private Sub mnuLogOn_Click()
frmLogin.Show vbModal
End Sub
Private Sub mnuLogOut_Click()
'CloseActiveForm Me.Name
GroupCode = 0
Set_Menu
End Sub
Private Sub SkinChange()
Dim f As Form
For Each f In Forms
If f.Name <> "frmMDI" Then Set_Skin f
Next
End Sub
26. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 26
Private Sub mnuskin1_Click()
mnuskin1.Checked = True
mnuSkin2.Checked = False
mnuSkin3.Checked = False
Skin = 0
SkinChange
End Sub
Private Sub mnuSkin2_Click()
mnuSkin2.Checked = True
mnuskin1.Checked = False
mnuSkin3.Checked = False
Skin = 1
SkinChange
End Sub
Private Sub mnuSkin3_Click()
mnuSkin3.Checked = True
mnuSkin2.Checked = False
mnuskin1.Checked = False
Skin = 2
SkinChange
End Sub
Private Sub mnuStatus_Click()
StatusBar.Visible = Not StatusBar.Visible
mnuStatus.Checked = Not mnuStatus.Checked
End Sub
Private Sub mnThanhmenu_Click()
Dim ctl As Control
On Error GoTo a
If mnuThanhmenu.Checked Then
For Each ctl In Me.Controls
If TypeOf ctl Is Menu Then
ctl.Visible = False
End If
Next
mnuThanhmenu.Checked = False
Else
For Each ctl In Me.Controls
If TypeOf ctl Is Menu Then
ctl.Visible = True
End If
27. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 27
Next
mnuThanhmenu.Checked = True
End If
a: Resume Next
End Sub
Private Sub mnuTH3A_Click()
Report6
mnuTH3B.Checked = False
mnuBC1B.Checked = False
mnuBC2.Checked = False
mnuBC1A.Checked = False
mnuTH4.Checked = False
mnuTH3A.Checked = True
End Sub
Private Sub mnuTH3B_Click()
Report5
mnuTH3B.Checked = True
mnuBC1B.Checked = False
mnuBC2.Checked = False
mnuBC1A.Checked = False
mnuTH4.Checked = False
mnuTH3A.Checked = False
End Sub
Private Sub mnuTH4_Click()
Report2
mnuTH3B.Checked = False
mnuBC1B.Checked = False
mnuBC2.Checked = False
mnuBC1A.Checked = False
mnuTH4.Checked = True
mnuTH3A.Checked = False
End Sub
Private Sub mnuThoat_Click()
If MMsgbox("B¹n thùc sù muèn tho¸t khái ch-¬ng tr×nh ?", vbYesNo, "Tho¸t
ch-¬ng tr×nh !!!") = vbYes Then
BExit = True
CloseActiveForm ("frmMDI")
Unload Me
End If
End Sub
28. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 28
Private Sub mnuThongke_Click()
frmThongKeDV.Show
End Sub
Private Sub mnuTimDV_Click()
'Call CloseActiveForm("frmTimkiem")
frmTimKiem.Show
frmTimKiem.SSTab1.Tab = 0
End Sub
Private Sub mnuTimGD_Click()
frmTimKiemGD.Show
End Sub
Private Sub mnuTimPhieu_Click()
'Call CloseActiveForm("frmTimkiem")
frmTimKiem.Show
frmTimKiem.SSTab1.Tab = 2
End Sub
Private Sub mnuTimTS_Click()
'Call CloseActiveForm("frmTimkiem")
frmTimKiem.Show
frmTimKiem.SSTab1.Tab = 1
End Sub
Private Sub mnuTKBD_Click()
'Call CloseActiveForm("frmThongKeKQ")
frmDothi.Show
End Sub
Private Sub mnuTKSL_Click()
'Call CloseActiveForm("frmThongKeKQ")
frmThongKeKQ.Show
'frmThongKeKQ.SSTab1.Tab = 0
End Sub
Private Sub mnuToolbar_Click()
mnuToolbar.Checked = Not mnuToolbar.Checked
Toolbar.Visible = Not Toolbar.Visible
End Sub
29. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 29
Public Sub amnuSep10_Click(Index As Integer)
On Error GoTo a
Dim i As Integer
Dim f As Form
If mnuSep10.UBound > 0 Then
For i = 1 To mnuSep10.UBound
If mnuSep10(i).Checked And i <> Index Then disp(Index) = i
mnuSep10(i).Checked = False
Next
mnuSep10(Index).Checked = True
For Each f In Forms
If f.Caption = mnuSep10(Index).Caption And f.Caption <> "" Then
f.Show
f.SetFocus
End If
Next
End If
a: Resume Next
End Sub
Private Sub mnuTreeView_Click()
'Call CloseActiveForm("frmTreeView")
frmTreeView.Show
End Sub
Private Sub amnuWin_Click(Index As Integer)
Dim i As Integer
Dim f As Form
For i = 1 To 4
mnuWin(i).Checked = False
Next
Select Case Index
Case 4: ' Center
For i = 1 To mnuSep10.UBound
For Each f In Forms
If f.Caption = mnuSep10(i).Caption Then Child_Center f
Next
Next
End Select
mnuWin(Index).Checked = True
End Sub
Private Sub Timer1_Timer()
Dim mnu As Control
On Error GoTo Ehandle
30. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 30
If none <> 0 Then
frmLogin.Show vbModal
Else
For Each mnu In frmMDI.Controls
If TypeOf mnu Is Menu Then mnu.Visible = False
Next
MMsgbox "H·y t¹o ng-êi sö dông míi ®Ó ®¨ng nhËp hÖ thèng", vbOKOnly,
"B¹n lµ ng-êi ®Çu tiªn sö dông ch-¬ng tr×nh"
frmAddUser.Show
End If
Timer1.Interval = 0
Ehandle:
Resume Next
End Sub
Private Sub Timer2_Timer()
HienDV
End Sub
Private Sub Toolbar_ButtonClick(ByVal Button As MSComctlLib.Button)
Dim i As Integer
If Button.Value = tbrUnpressed Then
For i = 1 To Me.Toolbar.buttons.Count
Me.Toolbar.buttons(i).Value = tbrUnpressed
Next
Select Case Button.key
Case "ChonDV": mnuChonDV_Click
Case "Thongke": mnuThongke_Click
Case "Timkiem": mnuTimDV_Click
Case "Baocao": frmBaocao.Show
Case "Taisan": mnuDat_Click
End Select
'Button.Value = tbrPressed
End If
End Sub
1.2 Form : frmTreeview
31. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 31
Option Explicit
Dim NodX As Node
Dim Li As ListItem
Dim rs As ADODB.Recordset
Dim root As String
Dim code As String
Dim nname As String
Dim DV As String
Dim Ma As String
Dim rsDat As ADODB.Recordset
Dim rsKDat As ADODB.Recordset
Dim qryDat As String
Dim qryKDat As String
Dim i As Integer
Private Sub Command1_Click()
Child_Unload Me
End Sub
Private Sub Form_Load()
Set rs = New ADODB.Recordset
rs.Open "SELECT tblDonVi.*, tblDonVi.CapDV From tblDonVi ORDER BY
tblDonVi.CapDV;", cnn, adOpenDynamic, adLockOptimistic
32. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 32
qryDat = "SELECT tblTongHopDat_Master.*, tblLoaiTS_Detail.TenTS,
tblLoaiTS_master.TenloaiTS, tblDonVi.TenDV " _
& "FROM ((tblLoaiTS_Detail INNER JOIN tblLoaiTS_master ON
tblLoaiTS_Detail.MaloaiTS = tblLoaiTS_master.MaloaiTS) INNER JOIN
tblTongHopDat_Master ON tblLoaiTS_Detail.MaTS =
tblTongHopDat_Master.MaTS) INNER JOIN tblDonVi ON
tblTongHopDat_Master.MaDV = tblDonVi.MaDV;"
qryKDat = "SELECT tblLoaiTS_Detail.TenTS, tblLoaiTS_master.TenloaiTS,
tblDonVi.TenDV, tblTongHopTSCD_KLD_Master.* " _
& "FROM (tblLoaiTS_Detail INNER JOIN tblLoaiTS_master ON
tblLoaiTS_Detail.MaloaiTS = tblLoaiTS_master.MaloaiTS) INNER JOIN (tblDonVi
INNER JOIN tblTongHopTSCD_KLD_Master ON tblDonVi.MaDV =
tblTongHopTSCD_KLD_Master.MaDV) ON tblLoaiTS_Detail.MaTS =
tblTongHopTSCD_KLD_Master.MaTS;"
Set rsDat = New ADODB.Recordset
rsDat.Open qryDat, cnn, adOpenDynamic, adLockOptimistic
Set rsKDat = New ADODB.Recordset
rsKDat.Open qryKDat, cnn, adOpenDynamic, adLockOptimistic
rs.MoveFirst
Set NodX = Tree.Nodes.Add(, , rs!MaDV, rs!TenDV)
rs.MoveNext
While Not rs.EOF
root = rs!DonViCT
code = rs!MaDV
nname = rs!TenDV
Set NodX = Tree.Nodes.Add(root, tvwChild, code, nname)
rs.MoveNext
Wend
Call MakeColumns
Child_Load Me
End Sub
Private Sub MakeColumns()
' Clear the ColumnHeaders collection.
List.ColumnHeaders.Clear
' Add four ColumnHeaders.
'List.ColumnHeaders.Add , , "STT", 550
List.ColumnHeaders.Add , , "M· TS", 1000
List.ColumnHeaders.Add , , "Tªn TS", 3000
List.ColumnHeaders.Add , , "Lo¹i TS", 2000
'List.ColumnHeaders.Add , , "Nhãm ", 2000
' Set the EventFlag variable so this doesn't get done again and again.
33. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 33
End Sub
Private Sub AddListItem(ByRef xItem As ListItem, ByRef xRec As
ADODB.Recordset, i As Integer)
' Add a ListItem setting its text, icon and small icon. Then
' add three ListSubItems setting the Key and Text of each.
Set xItem = List.ListItems.Add
xItem.Text = xRec!MaTS
'xItem.ListSubItems.Add key:="Ma TS", Text:=xRec!MaTS
xItem.ListSubItems.Add key:="Tªn TS", Text:=xRec!TenTS
xItem.ListSubItems.Add key:="Lo¹i TS", Text:=xRec!TenloaiTS
'xItem.ListSubItems.Add key:="Nhãm", Text:=xRec!Tennhom
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single,
Y As Single)
Mre Me
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then Child_Unload Me
End Sub
Private Sub List_ColumnClick(ByVal ColumnHeader As ColumnHeader)
If List.SortOrder = 0 Then List.SortOrder = 1 Else List.SortOrder = 0
List.SortKey = ColumnHeader.Index - 1
' Set Sorted to True to sort the list.
List.Sorted = True
End Sub
Private Sub Mybutton1_Click()
Command1_Click
End Sub
Private Sub Timer1_Timer()
If DV <> Tree.SelectedItem Then
i = 0
DV = Tree.SelectedItem
List.ListItems.Clear
If Not (rsDat.BOF And rsDat.EOF) Then rsDat.MoveFirst
If Not (rsKDat.BOF And rsKDat.EOF) Then rsKDat.MoveFirst
While Not rsDat.EOF
If rsDat!TenDV = DV Then
Ma = rsDat!MaDV
i = i + 1
AddListItem Li, rsDat, i
34. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 34
End If
rsDat.MoveNext
Wend
While Not rsKDat.EOF
If rsKDat!TenDV = DV Then
Ma = rsKDat!MaDV
i = i + 1
AddListItem Li, rsKDat, i
End If
rsKDat.MoveNext
Wend
End If
End Sub
Private Sub Tree_MouseDown(Button As Integer, Shift As Integer, x As Single, Y
As Single)
Dim Node As MSComctlLib.Node
If Button = 2 Then
Button = 1
frmPopUpMenu.SetDV DV, Ma
Me.PopupMenu frmPopUpMenu.mnuDonvi
End If
End Sub
1.3 Form: frmNhapDat
35. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 35
Dim sD As String
Dim rsPh As ADODB.Recordset
Dim rsDat As ADODB.Recordset
Dim rsDat0 As ADODB.Recordset
Dim AddFlag As Boolean
Dim rsDV As ADODB.Recordset
Dim rsTS As ADODB.Recordset
Dim rsNhom As ADODB.Recordset
Dim Dongia(100) As String
Dim MaNhom(100) As String
Dim nhom As String
Private Sub cboNhomDat_Click()
If Dat = 0 Then
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End If
End Sub
Private Sub cboNhomDat_GotFocus()
CEmpty txtDiachi
36. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 36
If cboNhomDat.ListIndex = -1 Then cboNhomDat.ListIndex = 0
Hien " Chän nhãm ®Êt t-¬ng øng cho tµi s¶n ®Êt"
End Sub
Private Sub cmdGhiDL_Click()
If Dat = 1 Then
rsTS.AddNew
rsPh.AddNew
rsDat.AddNew
rsDat0.AddNew
End If
'rsPh!MaPhieu = txtMaphieu.Text
rsDat0!MaDV = MaDV
rsDat!diachits = txtDiachi.Text
rsPh!NgayLP = txtNgayLP.Text
rsPh!TenNLP = txtTenNLP.Text
rsDat!DientichKT = Val(txtDienTichTKT.Text)
rsDat!DientichTT = Val(txtDientichTTT.Text)
rsDat!GiatriTT = Val(txtGiaTriTT.Text)
rsDat!GiayCN = Val(txtGiayCN.Text)
rsDat!KoGiayCN = Val(txtKoGiayCN.Text)
rsDat!ChiphiKT = Val(txtChiphiKT.Text)
rsDat!Tang = Val(txtTang.Text)
rsDat!Giam = Val(txtGiam.Text)
rsDat!CSD = Val(txtCSD.Text)
rsDat!Thue = Val(txtThue.Text)
rsDat!Chia = Val(txtChia.Text)
rsDat!Xaydungnha = Val(txtXaydungnha.Text)
rsDat!Sudung = Val(txtSudung.Text)
rsDat!Dichvu = Val(txtDichvu.Text)
rsDat!MDC = Val(txtMDC.Text)
rsDat!SDMDK = Val(txtSDMDK.Text)
rsDat!GiatriCN = Val(txtGiatriCN.Text)
rsDat!GiatriCCN = Val(txtGiatriCCN.Text)
rsTS!TenTS = txtTenTS.Text
If Dat = 1 Then
CodeTS(1) = TangCode(CodeTS(1), 4)
CodeP = TangCode(CodeP, 5)
rsDat0!MaTS = CodeTS(1)
rsDat0.Update
rsTS!MaloaiTS = "001"
rsPh!Maphieu = CodeP
rsDat0!Maphieu = rsPh!Maphieu
37. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 37
rsTS!MaTS = rsDat0!MaTS
rsDat0.Update
End If
rsPh.Update
rsTS!MaNhom = MaNhom(cboNhomDat.ListIndex)
rsDat!STT = rsDat0!STT
rsDat.Update
rsTS.Update
cmdNhapMoi.Enabled = True
Mybutton3.Enabled = True
Mybutton3.Refresh
Dat = 0
Set_Code
End Sub
Private Sub cmdNhaplai_Click()
Dim c As Control
If Dat = 1 Then
For Each c In Me.Controls
If TypeOf c Is TextBox And c.Name <> txtTenDV And c.Name <>
txtMaphieu Then
c.Text = ""
End If
Next
End If
If Dat = 0 Then Form_Load
End Sub
Private Sub cmdNhapMoi_Click()
Dim c As Control
For Each c In Me.Controls
If TypeOf c Is TextBox And c.Name <> "txtTenDV" And c.Name <>
"txtMaphieu" Then
c.Text = ""
End If
Next
Dat = 1
Form_Load
If SSTab1.Tab = 1 Then SSTab1.Tab = 0
AddFlag = True
End Sub
38. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 38
Private Sub cmdThoat_Click()
Child_Unload frmNhapDat
frmNhapDS.SSTab1.Tab = 0
frmNhapDS.Show
End Sub
Private Sub Form_Load()
Child_Load Me
Set rsPh = New ADODB.Recordset
rsPh.Open "Select * from tblPhieu", cnn, adOpenDynamic, adLockOptimistic
Set rsDat0 = New ADODB.Recordset
rsDat0.Open "select * from tblTongHopDat_Master", cnn, adOpenDynamic,
adLockOptimistic
Set rsDat = New ADODB.Recordset
rsDat.Open "Select * from tblTongHopDat_Detail", cnn, adOpenDynamic,
adLockOptimistic
Set rsTS = New ADODB.Recordset
rsTS.Open "tblLoaiTS_Detail", cnn, adOpenDynamic, adLockOptimistic
Set rsDV = New ADODB.Recordset
rsDV.Open "tblDonVi", cnn, adOpenDynamic, adLockOptimistic
Set rsNhom = New ADODB.Recordset
rsNhom.Open "Select * from tblNhom", cnn, adOpenDynamic, adLockOptimistic
If Dat = 0 Then
rsDat0.MoveFirst
rsDat.MoveFirst
While rsDat0!MaTS <> MaTS
rsDat.MoveNext
rsDat0.MoveNext
Wend
rsTS.MoveFirst
While rsTS!MaTS <> MaTS
rsTS.MoveNext
Wend
Set rsPh = New ADODB.Recordset
rsPh.Open "Select * from tblPhieu where tblPhieu!MaPhieu ='" &
rsDat0!Maphieu & "' ;", cnn, adOpenDynamic, adLockOptimistic
Set rsNhom = New ADODB.Recordset
rsNhom.Open "Select * from tblNhom where tblNhom!Manhom ='" &
rsTS!MaNhom & "' ;", cnn, adOpenDynamic, adLockOptimistic
txtDiachi.Text = rsDat!diachits
txtNgayLP.Text = Format(rsPh!NgayLP, "dd/mm/yyyy")
txtTenNLP.Text = rsPh!TenNLP
txtDienTichTKT.Text = rsDat!DientichKT
txtDientichTTT.Text = rsDat!DientichTT
txtGiaTriTT.Text = rsDat!GiatriTT
39. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 39
txtGiayCN.Text = rsDat!GiayCN
txtKoGiayCN.Text = rsDat!KoGiayCN
txtChiphiKT.Text = rsDat!ChiphiKT
txtTang.Text = rsDat!Tang
txtGiam.Text = rsDat!Giam
txtCSD.Text = rsDat!CSD
txtXaydungnha.Text = rsDat!Xaydungnha
txtMDC.Text = rsDat!MDC
txtSDMDK.Text = rsDat!SDMDK
txtDichvu.Text = rsDat!Dichvu
txtThue.Text = rsDat!Thue
txtChia.Text = rsDat!Chia
txtGiatriCN.Text = rsDat!GiatriCN
txtGiatriCCN.Text = rsDat!GiatriCCN
txtTenTS = rsTS!TenTS
txtSudung.Text = rsDat!Sudung
txtMaphieu.Text = rsPh!Maphieu
txtDongia.Text = rsNhom!Dongia
nhom = rsNhom!MaNhom
End If
Set rsNhom = New ADODB.Recordset
rsNhom.Open "Select * from tblNhom where tblnhom!MaloaiTS = '001' ;", cnn,
adOpenDynamic, adLockOptimistic
With rsDV
If .EOF And .BOF Then
.AddNew
Else
.MoveFirst
While .EOF = False
If rsDV!MaDV = MaDV Then
txtTenDV.Text = rsDV!TenDV
End If
.MoveNext
Wend
End If
End With
If Dat = 1 Then txtMaphieu = TangCode(CodeP, 5)
Dim i As Integer
cboNhomDat.Clear
i = 0
With rsNhom
If Not (.EOF And .BOF) Then
.MoveFirst
While .EOF = False
cboNhomDat.AddItem !tennhom
Dongia(i) = !Dongia
40. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 40
MaNhom(i) = !MaNhom
i = i + 1
.MoveNext
Wend
End If
End With
If cboNhomDat.ListCount > 0 Then
For i = 0 To cboNhomDat.ListCount - 1
If MaNhom(i) = nhom Then cboNhomDat.ListIndex = i
Next
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single,
Y As Single)
Mre Me
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then cmdThoat_Click
End Sub
Private Sub Mybutton1_Click()
cmdGhiDL_Click
End Sub
Private Sub Mybutton2_Click()
cmdNhaplai_Click
End Sub
Private Sub Mybutton3_Click()
cmdNhapMoi_Click
End Sub
Private Sub Mybutton4_Click()
cmdThoat_Click
End Sub
Private Sub Text3_Change()
End Sub
41. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 41
Private Sub Timer1_Timer()
'nut ghi du lieu
On Error Resume Next
Dim c As Control
Dim ok As Boolean
ok = True
For Each c In Me.Controls
If TypeOf c Is TextBox Or TypeOf c Is ComboBox Then
If c.Text = "" Then ok = False
End If
Next
If ok Then
cmdGhiDL.Enabled = True
Else
cmdGhiDL.Enabled = False
End If
' tinh don gia cua cac loai gia tri
If cboNhomDat.ListIndex <> -1 Then
txtDongia = Dongia(cboNhomDat.ListIndex)
If txtDientichTTT <> "" Then
txtGiaTriTT.Text = Val(txtDientichTTT.Text) * Val(txtDongia.Text)
Else
txtGiaTriTT.Text = ""
End If
If txtDienTichTKT <> "" Then
txtChiphiKT.Text = Val(txtDienTichTKT.Text) * Val(txtDongia.Text)
Else
txtChiphiKT.Text = ""
End If
If txtGiayCN <> "" Then
txtGiatriCN = Val(txtGiayCN.Text) * Val(txtDongia.Text)
Else
txtGiatriCN.Text = ""
End If
If txtKoGiayCN <> "" Then
txtGiatriCCN.Text = Val(txtKoGiayCN.Text) * Val(txtDongia.Text)
Else
txtGiatriCCN.Text = ""
End If
End If
'tinh dien tich xay dung nha
If txtXaydungnha.Text <> "" Then
txtSudung.Text = Val(txtDientichTTT.Text) - Val(txtXaydungnha.Text)
Else
42. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 42
txtSudung.Text = ""
End If
'tinh dien tich tang giam
If txtDienTichTKT.Text <> "" Then
Dim i As Variant
i = Val(txtDientichTTT.Text) - Val(txtDienTichTKT.Text)
If i > 0 Then
txtTang.Text = i
txtGiam.Text = 0
ElseIf i < 0 Then
txtGiam.Text = -i
txtTang.Text = 0
ElseIf i = 0 Then
txtTang.Text = i
txtGiam.Text = i
End If
End If
'xet dieu kien cua txtdientichttt
If Val(txtDientichTTT.Text) < Val(txtXaydungnha.Text) Then
txtDientichTTT.Text = ""
txtDientichTTT.SetFocus
txtXaydungnha.Text = ""
End If
If txtDientichTTT.Text = "" Then
txtXaydungnha.Text = ""
txtSudung.Text = ""
txtTang.Text = ""
txtGiam.Text = ""
txtMDC.Text = ""
txtGiayCN.Text = ""
txtSDMDK.Text = ""
'xet dieu kien dien tich txtSDMDK
If Dat = 0 Then
If Val(txtSDMDK.Text) - Val(txtDichvu.Text) < Val(txtThue.Text) Then
txtDichvu.Text = ""
txtDichvu.SetFocus
txtThue.Text = ""
txtChia.Text = ""
End If
End If
End If
43. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 43
' xet dieu kien txtMDC
If Val(txtMDC.Text) > Val(txtDientichTTT.Text) Then
txtMDC.SetFocus
txtMDC.Text = ""
txtSDMDK.Text = ""
txtDichvu.Text = ""
txtChia.Text = ""
txtThue.Text = ""
txtCSD.Text = ""
End If
If txtMDC.Text = "" Then
txtSDMDK.Text = ""
txtDichvu.Text = ""
txtThue.Text = ""
txtChia.Text = ""
txtCSD.Text = ""
End If
' tinh dien tich dich vu, thue, chia
If txtDichvu.Text <> "" Then
If Val(txtDichvu.Text) = Val(txtSDMDK.Text) Then
txtThue.Text = 0
txtThue.Enabled = False
txtChia.Text = 0
End If
End If
If txtThue <> "" Then
If txtThue.Text < Val(txtSDMDK.Text) - Val(txtDichvu.Text) Then
txtChia.Text = Val(txtSDMDK.Text) - Val(txtDichvu.Text) -
Val(txtThue.Text)
End If
If txtThue.Text > Val(txtSDMDK.Text) - Val(txtDichvu.Text) Then
txtThue.SetFocus
txtThue.Text = ""
End If
If Val(txtThue.Text) + Val(txtDichvu.Text) = Val(txtSDMDK.Text) Then
txtChia.Text = 0
End If
End If
44. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 44
End Sub
Private Sub txtChia_GotFocus()
CEmpty txtMDC
End Sub
Private Sub txtChia_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtChiphiKT_Click()
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End Sub
Private Sub txtChiphiKT_GotFocus()
CEmpty txtDienTichTKT
End Sub
Private Sub txtChiphiKT_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtCSD_GotFocus()
CEmpty txtMDC
End Sub
Private Sub txtCSD_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtDiachi_Click()
If Dat = 0 Then
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End If
End Sub
47. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 47
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtDongia_GotFocus()
CEmpty cboNhomDat
txtGiaTriTT.Enabled = True
End Sub
Private Sub txtGiam_Click()
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End Sub
Private Sub txtGiam_GotFocus()
CEmpty txtTang
End Sub
Private Sub txtGiam_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtGiamCD_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtGiatriCCN_GotFocus()
CEmpty txtKoGiayCN
End Sub
Private Sub txtGiatriCCN_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtGiatriCN_GotFocus()
CEmpty txtGiayCN
End Sub
Private Sub txtGiatriCN_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
48. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 48
Private Sub txtGiaTriTT_GotFocus()
CEmpty txtXaydungnha
End Sub
Private Sub txtGiatriTT_KeyPress(KeyAscii As Integer)
SubKeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtGiayCN_Change()
If txtGiayCN.Text <> "" Then
txtKoGiayCN.Text = Val(txtDientichTTT.Text) - Val(txtGiayCN.Text)
Else
txtKoGiayCN.Text = ""
End If
If Val(txtGiayCN.Text) > Val(txtDientichTTT.Text) Then
txtGiayCN.SetFocus
txtGiayCN.Text = ""
End If
End Sub
Private Sub txtGiayCN_Click()
If Dat = 0 Then
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End If
End Sub
Private Sub txtGiayCN_GotFocus()
CEmpty txtCSD
Hien " NhËp diÖn tÝch ch-a cã giÊy chøng nhËn quyÒn sö dông ®Êt ( chØ
nhËp sè ) ko ®-îc lín h¬n tæng diÖn tÝch ®Êt "
End Sub
Private Sub txtGiayCN_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtKoGiayCN_GotFocus()
CEmpty txtGiatriCN
End Sub
49. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 49
Private Sub txtKoGiayCN_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtMDC_Change()
txtSDMDK.Enabled = True
txtCSD.Enabled = True
If Val(txtMDC.Text) = Val(txtDientichTTT.Text) Then
txtSDMDK.Text = "0"
txtSDMDK.Enabled = False
txtCSD.Text = "0"
txtCSD.Enabled = False
txtDichvu.Enabled = False
txtChia.Enabled = False
txtThue.Enabled = False
End If
End Sub
Private Sub txtMDC_Click()
If Dat = 0 Then
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End If
End Sub
Private Sub txtMDC_GotFocus()
Hien " NhËp diÖn tÝch sö dông cho môc ®Ých chÝnh ( chØ nhËp sè )"
CEmpty txtDongia
End Sub
Private Sub txtMDC_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtNgayLP_Click()
If Dat = 0 Then
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End If
End Sub
50. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 50
Private Sub txtNgayLP_GotFocus()
CEmpty txtTenNLP
Hien " B¹n cÇn nhËp ngµy vµo _/_/_/"
End Sub
Private Sub txtNgayLP_Validate(Cancel As Boolean)
If Not IsDate(txtNgayLP) Then
txtNgayLP.SetFocus
txtNgayLP.Text = ""
Cancel = True
ElseIf DateValue(txtNgayLP) > Now() Or DateValue(txtNgayLP) <
DateValue(Format("01/01/1998", "dd/mm/yyyy")) Then
txtNgayLP.SetFocus
txtNgayLP.Text = ""
Cancel = True
Else: txtNgayLP = Format(txtNgayLP, "dd/mm/yyyy")
End If
End Sub
Private Sub txtQuan_Click()
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End Sub
Private Sub txtQuan_GotFocus()
CEmpty txtDiachi
End Sub
Private Sub txtSDMDK_Change()
If Val(txtSDMDK.Text) = 0 Then
txtDichvu.Text = 0
txtThue.Text = 0
txtChia.Text = 0
End If
If txtSDMDK.Text <> "" Then
If Val(txtSDMDK.Text) = Val(txtDientichTTT.Text) - Val(txtMDC.Text) Then
txtCSD.Text = 0
txtCSD.Enabled = False
51. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 51
ElseIf Val(txtSDMDK.Text) < Val(txtDientichTTT.Text) - Val(txtMDC.Text) Then
txtCSD.Text = Val(txtDientichTTT.Text) - Val(txtMDC.Text) -
Val(txtSDMDK.Text)
txtCSD.Enabled = False
ElseIf Val(txtSDMDK.Text) > Val(txtDientichTTT.Text) - Val(txtMDC.Text) Then
txtSDMDK.SetFocus
txtSDMDK.Text = ""
txtThue.Text = ""
txtDichvu.Text = ""
txtChia.Text = ""
End If
Else
txtSDMDK.Text = ""
txtThue.Text = ""
txtDichvu.Text = ""
txtChia.Text = ""
txtCSD.Text = ""
End If
End Sub
Private Sub txtSDMDK_Click()
If Dat = 0 Then
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End If
End Sub
Private Sub txtSDMDK_GotFocus()
Hien " NhËp diÖn tÝch sö dung cho môc ®Ých kh¸c ( chØ nhËp sè )"
txtCSD.Enabled = True
CEmpty txtMDC
txtChia.Enabled = True
End Sub
Private Sub txtSDMDK_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
End Sub
Private Sub txtSudung_Click()
cmdNhaplai.Enabled = True
Mybutton2.Enabled = True
End Sub
55. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 55
Dim rsDVA As ADODB.Recordset
Dim rsDVB As ADODB.Recordset
Dim rsDVN As ADODB.Recordset
Dim rsTSD As ADODB.Recordset
Dim rsTSKD As ADODB.Recordset
Private rs As ADODB.Recordset
Public mo As Integer
Dim benA As String
Dim benB As String
Dim TS As String
Dim DVN As String
Const sql = "Select tblDonvi.MaDV, tblDonvi.TenDV from tblDonvi "
Dim sqlTSD As String
Dim sqlTSKD As String
Dim i As Integer
Dim CodeTS(100) As String
Dim bA(100) As String
Dim bB(100) As String
Dim a As Integer
Dim d As Integer
Dim soluong(100) As Integer
Private Sub cboBenA_GotFocus()
Dim i As Integer
Dim j As Integer
cboBenA.Clear
i = 0
Set rsDVA = New ADODB.Recordset
rsDVA.Open sql, cnn, adOpenDynamic, adLockBatchOptimistic
rsDVA.MoveFirst
While Not rsDVA.EOF
If rsDVA!TenDV <> benB Then
cboBenA.AddItem rsDVA!TenDV
If rsDVA!MaDV = MaDV Then j = i
bA(i) = rsDVA!MaDV
i = i + 1
End If
rsDVA.MoveNext
Wend
rsDVA.Close
Set rsDVA = Nothing
cboBenA.ListIndex = j
Me.Refresh
End Sub
56. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 56
Private Sub cboBenA_LostFocus()
benA = cboBenA
End Sub
Private Sub cboBenB_Gotfocus()
Dim i As Integer
cboBenB.Clear
Set rsDVB = New ADODB.Recordset
rsDVB.Open sql, cnn, adOpenDynamic, adLockBatchOptimistic
rsDVB.MoveFirst
While Not rsDVB.EOF
If rsDVB!TenDV <> benA Then
cboBenB.AddItem rsDVB!TenDV
bB(i) = rsDVB!MaDV
i = i + 1
End If
rsDVB.MoveNext
Wend
rsDVB.Close
Set rsDVB = Nothing
End Sub
Private Sub cboBenB_LostFocus()
benB = cboBenB
End Sub
Private Sub cboDVN_Lostfocus()
DVN = cboDVN
End Sub
Private Sub cboTS_GotFocus()
Dim i As Integer
cboTS.Clear
Set rsTSD = New ADODB.Recordset
Set rsTSKD = New ADODB.Recordset
i = 0
Select Case cboSort.ListIndex
Case 1, 3:
If benA <> "" Then
a = 0
57. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 57
qryTSD = "SELECT tblDonVi.TenDV, tblLoaiTS_Detail.* " _
& "FROM (tblTongHopDat_Master INNER JOIN tblDonVi ON
tblTongHopDat_Master.MaDV = tblDonVi.MaDV) INNER JOIN tblLoaiTS_Detail
ON tblTongHopDat_Master.MaTS = tblLoaiTS_Detail.MaTS " _
& "Where tblDonVi.TenDV ='" & benA & "';"
qryTSKD = "SELECT tblDonVi.TenDV, tblLoaiTS_Detail.* " _
& "FROM (tblLoaiTS_Detail INNER JOIN tblTongHopTSCD_KLD_Master
ON tblLoaiTS_Detail.MaTS = tblTongHopTSCD_KLD_Master.MaTS) INNER
JOIN tblDonVi ON tblTongHopTSCD_KLD_Master.MaDV = tblDonVi.MaDV " _
& "Where tblDonvi.tenDV ='" & benA & "';"
End If
Case 0, 2:
a = 1
If benB <> "" And cboBenB.Enabled Then
qryTSD = "SELECT tblDonVi.TenDV, tblLoaiTS_Detail.* " _
& "FROM (tblTongHopDat_Master INNER JOIN tblDonVi ON
tblTongHopDat_Master.MaDV = tblDonVi.MaDV) INNER JOIN tblLoaiTS_Detail
ON tblTongHopDat_Master.MaTS = tblLoaiTS_Detail.MaTS " _
& "Where tblDonVi.TenDV ='" & benB & "';"
qryTSKD = "SELECT tblDonVi.TenDV, tblLoaiTS_Detail.* " _
& "FROM (tblLoaiTS_Detail INNER JOIN tblTongHopTSCD_KLD_Master
ON tblLoaiTS_Detail.MaTS = tblTongHopTSCD_KLD_Master.MaTS) INNER
JOIN tblDonVi ON tblTongHopTSCD_KLD_Master.MaDV = tblDonVi.MaDV " _
& "Where tblDonvi.tenDV ='" & benB & "';"
End If
End Select
If qryTSD <> "" And qryTSKD <> "" Then
rsTSD.Open qryTSD, cnn, adOpenDynamic, adLockOptimistic
rsTSKD.Open qryTSKD, cnn, adOpenDynamic, adLockOptimistic
While Not rsTSD.EOF
cboTS.AddItem rsTSD!TenTS
CodeTS(i) = rsTSD!MaTS
i = i + 1
rsTSD.MoveNext
Wend
While Not rsTSKD.EOF
cboTS.AddItem rsTSKD!TenTS
CodeTS(i) = rsTSKD!MaTS
i = i + 1
rsTSKD.MoveNext
Wend
End If
End Sub
Private Sub cmdBenA_Click()
58. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 58
Dim ok As Boolean
ok = False
Set rsDVA = New ADODB.Recordset
rsDVA.Open sql, cnn, adOpenDynamic, adLockBatchOptimistic
rsDVA.MoveFirst
While Not rsDVA.EOF
If rsDVA!TenDV = benA Then
MaDV = rsDVA!MaDV
ok = True
End If
rsDVA.MoveNext
Wend
rsDVA.Close
Set rsDVA = Nothing
If ok Then frmNhapDV.Show
End Sub
Private Sub CmdBenB_Click()
Dim ok As Boolean
ok = False
Set rsDVB = New ADODB.Recordset
rsDVB.Open sql, cnn, adOpenDynamic, adLockBatchOptimistic
rsDVB.MoveFirst
While Not rsDVB.EOF
If rsDVB!TenDV = benB Then
MaDV = rsDVB!MaDV
ok = True
End If
rsDVB.MoveNext
Wend
rsDVB.Close
Set rsDVB = Nothing
If ok Then frmNhapDV.Show
End Sub
Private Sub CmdDVN_Click()
Dim ok As Boolean
ok = False
Set rsDVN = New ADODB.Recordset
rsDVN.Open "tblDVNgoai", cnn, adOpenDynamic, adLockBatchOptimistic
rsDVN.MoveFirst
While Not rsDVN.EOF
If rsDVN!TenDVN = DVN Then
MaDVN = rsDVN!MaDVN
ok = True
59. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 59
End If
rsDVN.MoveNext
Wend
rsDVN.Close
Set rsDVN = Nothing
If ok Then frmNhapDV.Show
End Sub
Private Sub cmdExit_Click()
If mo = 1 Then frmNhapDS.Show
Child_Unload Me
End Sub
Private Sub cmdNew_Click()
cmdReset_Click
Form_Load
End Sub
Private Sub cmdReset_Click()
Dim ctl As Control
For Each ctl In Me.Controls
If TypeOf ctl Is ComboBox And ctl.Name <> "cboSort" Then ctl.Clear
If TypeOf ctl Is TextBox Then ctl.Text = ""
'If TypeOf ctl Is MaskEdBox Then ctl = ""
Next
End Sub
Private Sub cmdSave_Click()
Dim dk As String
If a = 0 Then
dk = bB(cboBenB.ListIndex)
Else
dk = bA(cboBenA.ListIndex)
End If
If Left(CodeTS(cboTS.ListIndex), 1) = "1" Then
Set rsTSD = New ADODB.Recordset
rsTSD.Open "select * from tblTongHopDat_Master where
tblTongHopDat_Master.MaTS ='" & CodeTS(cboTS.ListIndex) & "' ;", cnn,
adOpenDynamic, adLockOptimistic
rsTSD!MaDV = dk
rsTSD.Update
Else
Set rsTSKD = New ADODB.Recordset
60. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 60
rsTSKD.Open "select * from tblTongHopTSCD_KLD_Master where
tblTongHopTSCD_KLD_Master.MaTS ='" & CodeTS(cboTS.ListIndex) & "' ;",
cnn, adOpenDynamic, adLockOptimistic
rsTSKD!MaDV = dk
rsTSKD.Update
End If
Dim rs As ADODB.Recordset
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Set rs = New ADODB.Recordset
Set rs1 = New ADODB.Recordset
Set rs2 = New ADODB.Recordset
rs.Open "tblHopDong", cnn, adOpenDynamic, adLockOptimistic
rs1.Open "tblHopDongbenA", cnn, adOpenDynamic, adLockOptimistic
rs2.Open "tblHopDongbenB", cnn, adOpenDynamic, adLockOptimistic
rs.AddNew
rs1.AddNew
rs2.AddNew
rs!NgayHD = Text1.Text
rs!LoaiHD = cboSort
rs!MaTS = CodeTS(cboTS.ListIndex)
rs1!benA = bA(cboBenA.ListIndex)
rs2!benB = bB(cboBenB.ListIndex)
rs.Update
rs1!Mahd = rs!Mahd
rs2!Mahd = rs!Mahd
rs1.Update
rs2.Update
cmdReset_Click
Form_Load
End Sub
Private Sub Form_Load()
If mo <> 0 Then Unload frmNhapDS
Child_Load Me
cboDVN.Visible = False
'CmdDVN.Visible = False
benA = ""
benB = ""
'Add cac item cho cboSort
cboSort.AddItem "Mua"
cboSort.AddItem "B¸n"
cboSort.AddItem "Thuª"
cboSort.AddItem "Cho thuª"
cboSort.ListIndex = 0
61. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 61
Set rsDVN = New ADODB.Recordset
rsDVN.Open "tblDVNgoai", cnn, adOpenDynamic, adLockBatchOptimistic
If Not (rsDVN.EOF And rsDVN.BOF) Then rsDVN.MoveFirst
While Not rsDVN.EOF
cboDVN.AddItem rsDVN!TenDVN
rsDVN.MoveNext
Wend
rsDVN.Close
Set rsDVN = Nothing
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single,
Y As Single)
Mre Me
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then Child_Unload Me
End Sub
Private Sub Frame2_DragDrop(Source As Control, X As Single, Y As Single)
End Sub
Private Sub Mybutton2_Click()
cmdReset_Click
End Sub
Private Sub Mybutton3_Click()
cmdReset_Click
End Sub
Private Sub Mybutton4_Click()
cmdExit_Click
End Sub
Private Sub optBenB_Click()
cboDVN.Visible = False
CmdDVN.Visible = False
cboBenB.Visible = True
CmdBenB.Visible = True
End Sub
Private Sub optDVN_Click()
62. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 62
cboDVN.Visible = True
CmdDVN.Visible = True
cboBenB.Visible = False
CmdBenB.Visible = False
End Sub
Private Sub Text1_lostfocus()
Dim dt As String
dt = Text1.Text
If Not Validdate(dt) Then
Text1.SetFocus
Text1.Text = ""
Else
Text1.Text = Format(dt, "dd/mm/yyyy")
'If Format(Text1.Text) > Format(Now()) Then
' Text1.SetFocus
' Text1.Text = ""
' End If
End If
End Sub
Private Sub Timer1_Timer()
Dim ctl As Control
Dim ok As Boolean
ok = True
For Each ctl In Me.Controls
If TypeOf ctl Is TextBox Then
If ctl.Text = "" Then ok = False
End If
Next
If cboBenA <> "" And (cboBenB <> "" Or cboDVN <> "") Then
cboTS.Enabled = True
'cmdTS.Enabled = True
Else
cboTS.Enabled = False
'cmdTS.Enabled = False
End If
If cboTS <> "" And cboBenA <> "" And (cboBenB <> "" Or DVN <> "") _
And Text1.Text <> "" Then
cmdSave.Enabled = True
Else
cmdSave.Enabled = False
End If
63. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 63
If txtDate <> "" Or cboTS <> "" Or benA <> "" Or (benB <> "" Or DVN <> "") _
Or Text1.Text <> "" Then
cmdReset.Enabled = True
Else
cmdReset.Enabled = False
End If
End Sub
1.5 Form: frmChonTS
Option Explicit
Dim i As Integer
Dim Li As ListItem
Dim rsLoaiTS As ADODB.Recordset
Dim rsNhom As ADODB.Recordset
Dim MaLoai(6) As String
Dim sSQL As String
Private Sub cboLoai_Click()
List.ListItems.Clear
Call AddListItem(Li, TimMaLoai(cboLoai.Text))
End Sub
Private Sub cmdSua_Click()
64. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 64
iButton = Sua
MaNhom = List.SelectedItem.ListSubItems(1).Text
frmNhapTS.Show
Child_Unload Me
End Sub
Private Sub cmdThem_Click()
iButton = Them
frmNhapTS.Show
Child_Unload Me
End Sub
Private Sub cmdThoat_Click()
Child_Unload Me
End Sub
Private Sub cmdXoa_Click()
Dim ok As Boolean
With rsNhom
ok = False
.MoveFirst
While Not .EOF And Not ok
If rsNhom!MaNhom = List.SelectedItem.ListSubItems(1).Text Then
ok = True
Else
.MoveNext
End If
Wend
.Delete
If Not .EOF Then
.MoveNext
ElseIf Not .BOF Then
.MovePrevious
Else
Hien "B¹n võa xo¸ nhãm tµi s¶n cuèi cïng"
End If
End With
cmdXoa.Enabled = False
Form_Load
65. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 65
End Sub
Private Sub Form_Load()
Child_Load Me
cboLoai.Clear
Set rsLoaiTS = New ADODB.Recordset
rsLoaiTS.Open "tblLoaits_master", cnn, adOpenDynamic,
adLockOptimistic
With rsLoaiTS
i = 0
.MoveFirst
While .EOF = False
cboLoai.AddItem !TenloaiTS, i
i = i + 1
.MoveNext
Wend
End With
cboLoai.ListIndex = 0
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As
Integer)
If UnloadMode = 0 Then Child_Unload Me
End Sub
Private Sub AddListItem(ByRef xItem As ListItem, s As String)
Dim i As Integer
sSQL = "SELECT * FROM tblnhom WHERE maloaits='" & s & "';"
Set rsNhom = New ADODB.Recordset
rsNhom.Open sSQL, cnn, adOpenDynamic, adLockOptimistic
With rsNhom
If .EOF And .BOF Then
cmdSua.Enabled = False
cmdXoa.Enabled = False
Hien "Ch-a nhËp nhãm tµi s¶n"
Else
cmdSua.Enabled = True
cmdXoa.Enabled = True
.MoveFirst
i = 1
66. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 66
While Not .EOF
Set xItem = List.ListItems.Add
xItem.Text = i
xItem.ListSubItems.Add key:="M· nhãm", Text:=!MaNhom
xItem.ListSubItems.Add key:="Tªn nhãm", Text:=!tennhom
.MoveNext
i = i + 1
Wend
End If
End With
End Sub
Function TimMaLoai(tenloai As String)
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "tblloaits_master", cnn, adOpenDynamic, adLockOptimistic
With rs
.MoveFirst
While Not .EOF And tenloai <> !TenloaiTS
.MoveNext
Wend
TimMaLoai = !MaloaiTS
End With
End Function
1.6 Form : frmNhapDV
67. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 67
Option Explicit
Dim rsDV As ADODB.Recordset
Dim k As Integer
Dim StopWh As Boolean
Dim Temp As String
Dim sSQL As String
Private Sub cboCT_Click()
txtMaDV.Enabled = True
txtMaDV.Text = CodeDV(cboCT.Text)
txtMaDV.Enabled = False
txtTenDV.Enabled = True
'txtTenDV.SetFocus
Check_Empty
End Sub
Private Sub cboQuan_Click()
Check_Empty
End Sub
68. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 68
Private Sub cboQuan_GotFocus()
'CEmpty txtDiaChi
Hien "QuËn theo ®Þa chØ cña ®¬n vÞ"
End Sub
Private Sub cboQuan_KeyPress(KeyAscii As Integer)
If UCase(Chr(KeyAscii)) = "D" Then cboQuan.ListIndex = 1
End Sub
Private Sub cmdCapnhat_Click()
If CDublicate(txtTenDV.Text) Then
MMsgbox "§· cã tªn ®¬n vÞ nµy råi, ®Ò nghÞ nhËp l¹i"
Hien "§· cã tªn ®¬n vÞ nµy råi, ®Ò nghÞ nhËp l¹i"
txtTenDV.Text = ""
txtDiachi.Text = ""
txtDT.Text = ""
txtSoNV.Text = ""
Exit Sub
End If
If iButton = 2 Then
If MaDV = txtMaDV.Text Then
GetValue
rsDV.Update
Else
rsDV.Delete
If Not rsDV.EOF Then
rsDV.MoveNext
ElseIf Not rsDV.BOF Then
rsDV.MovePrevious
End If
rsDV.AddNew
GetValue
rsDV.Update
ThemDVCD (cboCT.Text)
Call DoiTS(MaDV, txtMaDV.Text)
End If
ElseIf iButton = 3 Then
With rsDV
rsDV.AddNew
GetValue
rsDV.Update
End With
ThemDVCD (cboCT.Text)
cboCT.Refresh
End If
70. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 70
txtDiachi.Enabled = False
txtDT.Enabled = False
txtSoNV.Enabled = False
cboQuan.Enabled = False
End Select
Child_Unload frmDonVi
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then cmdThoat_Click
End Sub
Private Sub GetValue()
rsDV!MaDV = txtMaDV.Text
rsDV!TenDV = txtTenDV.Text
rsDV!DiaChi = txtDiachi.Text
rsDV!Quan = cboQuan.Text
rsDV!SoDT = txtDT.Text
rsDV!DonViCT = MaDV_T(cboCT.Text)
rsDV!sonv = txtSoNV.Text
If optCap2.Value = True Then
rsDV!Capdv = 2
Else
rsDV!Capdv = 3
End If
If optQLNN.Value = True Then
rsDV!chucnang = "QLNN"
Else
rsDV!chucnang = "HCSN"
End If
End Sub
Private Sub optCap2_Click()
TenCT
End Sub
Private Sub optCap3_Click()
TenCT
End Sub
Private Sub Timer1_Timer()
73. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 73
Set rsDV1 = New ADODB.Recordset
rsDV1.Open sSQL, cnn, adOpenDynamic, adLockOptimistic
If rsDV1.EOF And rsDV1.BOF Then
Check = False
Else
Check = True
End If
CDublicate = Check
End Function
Private Sub ThemDVCD(TenCT As String)
Dim rsDV2 As ADODB.Recordset
Set rsDV2 = New ADODB.Recordset
rsDV2.Open "tbldonvi", cnn, adOpenDynamic, adLockOptimistic
With rsDV2
.MoveFirst
While .EOF = False And !TenDV <> TenCT
.MoveNext
Wend
!sodvcd = !sodvcd + 1
.Update
End With
End Sub
Public Function MaDV_T(Ten As String) As String 'Tim Ma don vi tu ten don vi
Dim Ma As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "Tbldonvi", cnn, adOpenDynamic, adLockOptimistic
With rs
.MoveFirst
While Not .EOF
If !TenDV = Ten Then
Ma = !MaDV
End If
.MoveNext
Wend
End With
MaDV_T = Ma
End Function
Private Sub SuaDonVi()
Dim i As Integer
Dim l As Integer
With rsDV
74. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 74
.MoveFirst
While Not .EOF And !MaDV <> MaDV
.MoveNext
Wend
If !Capdv = 2 Then
optCap2.Value = True
ElseIf !Capdv = 3 Then
optCap3.Value = True
End If
i = 0
While i < cboCT.ListCount
cboCT.ListIndex = i
If MaDV_T(cboCT.Text) = !DonViCT Then l = i
i = i + 1
Wend
cboCT.ListIndex = l
txtMaDV.Enabled = True
txtMaDV.Text = !MaDV
txtMaDV.Enabled = False
txtTenDV.Text = !TenDV
txtDT.Text = !SoDT
txtDiachi.Text = !DiaChi
txtSoNV.Text = !sonv
i = 0
While i < cboQuan.ListCount
cboQuan.ListIndex = i
If MaDV_T(cboQuan.Text) = !DonViCT Then l = i
i = i + 1
Wend
cboQuan.ListIndex = l
If !chucnang = "qlnn" Then
optQLNN.Value = True
Else
optHCSN.Value = True
End If
End With
End Sub
Private Sub DoiTS(MaCu As String, MaMoi As String)
Dim rsDat As ADODB.Recordset
Dim rsKLD As ADODB.Recordset
Set rsDat = New ADODB.Recordset
Set rsKLD = New ADODB.Recordset
75. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 75
rsDat.Open "tbltonghopdat_master", cnn, adOpenDynamic, adLockOptimistic
rsKLD.Open "tblTongHopTSCD_KLD_Master", cnn, adOpenDynamic,
adLockOptimistic
With rsDat
If .EOF And .BOF Then
.MoveFirst
While Not .EOF And MaCu <> !MaDV
.MoveNext
Wend
!MaDV = MaMoi
End If
End With
With rsKLD
If .EOF And .BOF Then
.MoveFirst
While Not .EOF And MaCu <> !MaDV
.MoveNext
Wend
!MaDV = MaMoi
End If
End With
End Sub
Private Sub Check_Empty()
Dim ctl As Control
Dim B As Boolean
B = True
For Each ctl In Controls
If TypeOf ctl Is TextBox Or TypeOf ctl Is MaskEdBox _
Or TypeOf ctl Is ComboBox Then
If ctl.Text = "" Then B = False
End If
Next ctl
If B = True Then
cmdCapNhat.Enabled = True
Else
cmdCapNhat.Enabled = False
End If
End Sub
1.7 Form: frmTimKiem
76. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 76
Dim rsDV As ADODB.Recordset
Dim rsTS As ADODB.Recordset
Dim i As Integer
Dim Flag As Boolean
Dim ok As Boolean
Private Sub cboCap_KeyPress(KeyAscii As Integer)
KeyAscii = Num_Check(KeyAscii)
If Not (KeyAscii = "2" Or KeyAscii = "3") Then
cboCap.Text = ""
End If
End Sub
Private Sub cmdThoat_Click()
Child_Unload Me
End Sub
Private Sub cmdTim_Click()
Flag = True
Select Case SSTab1.Tab
Case 0 'Tim don vi
TimDV
iButton = 0
Case 1 'Tim tai san
TimTS
iButton = 1
Case 2 'Tim phieu
77. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 77
If txtTu.Text <> "" Or txtDen.Text <> "" Then
If Not IsDate(txtTu.Text) And Not IsDate(txtDen.Text) Then
MsgBox "NhËp sai ®iÒu kiÖn t×m kiÕm!", , "Th«ng b¸o:"
Flag = False
Exit Sub
End If
End If
TimPhieu
iButton = 2
End Select
If Flag Then
MsgBox "Ch-a nhËp ®iÒu kiÖn t×m kiÕm", , "Th«ng b¸o:"
Else
Call cFind(findSQL)
End If
End Sub
Private Sub Form_Load()
Child_Load Me
Set rsDV = New ADODB.Recordset
rsDV.Open "tbldonvi", cnn, adOpenDynamic, adLockOptimistic
i = 0
With rsDV
.MoveFirst
While .EOF = False
cboMaDV.AddItem rsDV!MaDV, i
cboTenDV.AddItem rsDV!TenDV, i
i = i + 1
.MoveNext
Wend
End With
cboCap.AddItem 1, 0
cboCap.AddItem 2, 1
cboCap.AddItem 3, 2
cboCN.AddItem "QLNN", 0
cboCN.AddItem "HCSN", 1
End Sub
Private Sub TimDV()
findSQL = "SELECT * FROM tbldonvi WHERE "
78. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 78
If cboMaDV.Text <> "" Then
findSQL = findSQL & "( madv LIKE '%" & cboMaDV.Text & "%')"
Flag = False
End If
If cboTenDV.Text <> "" Then
If Not Flag Then
findSQL = findSQL & " AND ( tendv LIKE '%" & cboTenDV.Text & "%')"
Else
findSQL = findSQL & "( tendv LIKE '%" & cboTenDV.Text & "%')"
End If
Flag = False
End If
If cboCap.Text <> "" Then
If Not Flag Then
findSQL = findSQL & " AND ( capdv LIKE '%" & cboCap.Text & "%')"
Else
findSQL = findSQL & "( capdv LIKE '%" & cboCap.Text & "%')"
End If
Flag = False
End If
If cboCN.Text <> "" Then
If Not Flag Then
findSQL = findSQL & " AND ( Chucnang LIKE '%" & cboCN.Text & "%')"
Else
findSQL = findSQL & "( tendv LIKE '%" & cboTenDV.Text & "%')"
End If
Flag = False
End If
End Sub
Private Sub TimTS()
findSQL = "SELECT * FROM tblloaits_master" & _
" INNER JOIN tblnhom" & _
" ON tblloaits_master.maloaits=tblnhom.maloaits" & _
" WHERE "
If cboMaNhomTS.Text <> "" Then
findSQL = findSQL & " (tblnhom.manhom LIKE '%" & cboMaNhomTS.Text &
"%')"
Flag = False
End If
If cboNhom.Text <> "" Then
If Flag Then
findSQL = findSQL & " (tblnhom.tennhom LIKE '%" & cboNhom.Text &
"%')"
Else
79. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 79
findSQL = findSQL & " AND (tblnhom.tennhom LIKE '%" & cboNhom.Text &
"%')"
End If
Flag = False
End If
If cboLoaiTS.Text <> "" Then
If Flag Then
findSQL = findSQL & " (tblloaits_master.tenloaits LIKE '%" &
cboLoaiTS.Text & "%')"
Else
findSQL = findSQL & " AND (tblloaits_master.tenloaits LIKE '%" &
cboLoaiTS.Text & "%')"
End If
Flag = False
End If
End Sub
Private Sub TimPhieu()
findSQL = "SELECT * " & _
"FROM tblphieu " & _
"WHERE "
If cboMP.Text <> "" Then
findSQL = findSQL & "(tblphieu.maphieu LIKE '%" & cboMP.Text & "%')"
Flag = False
End If
If cboNguoiLP.Text <> "" Then
If Flag Then
findSQL = findSQL & "(tblphieu.tennlp LIKE '%" & cboNguoiLP.Text & "%')"
Else
findSQL = findSQL & " AND (tblphieu.tennlp LIKE '%" & cboNguoiLP.Text &
"%')"
End If
Flag = False
End If
If txtTu.Text <> "" Then
If Flag Then
If txtDen.Text <> "" Then
findSQL = findSQL & " (tblphieu.ngaylp >=DateValue(Format('" &
txtTu.Text & "'))) and " _
& " (tblphieu.ngaylp <=DateValue(Format('" & txtDen.Text & "'))) "
Else
findSQL = findSQL & " (tblphieu.ngaylp >=DateValue(Format('" &
txtTu.Text & "')));"
End If
Else
80. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 80
If txtDen.Text <> "" Then
findSQL = findSQL & " AND ( tblphieu.ngaylp >=DateValue(Format('" &
txtTu.Text & "'))) and " _
& " (tblphieu.ngaylp <=DateValue(Format('" & txtDen.Text & "'))) "
Else
findSQL = findSQL & " AND (tblphieu.ngaylp >=DateValue(Format('" &
txtTu.Text & "')));"
End If
End If
Flag = False
Else
If Flag Then
If txtDen.Text <> "" Then
findSQL = findSQL & " (tblphieu.ngaylp <=DateValue(Format('" &
txtDen.Text & "'))) "
End If
Else
If txtDen.Text <> "" Then
findSQL = findSQL & " AND (tblphieu.ngaylp <=DateValue(Format('" &
txtDen.Text & "'))) "
End If
End If
Flag = False
End If
'MsgBox findSQL
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then Child_Unload Me
End Sub
Private Sub cFind(sql As String)
Dim hang As String
Dim cot As String
Set rsKQ = New ADODB.Recordset
rsKQ.Open findSQL, cnn, adOpenDynamic, adLockOptimistic
Dim i As Integer
With rsKQ
If .EOF And .BOF Then
If SSTab1.Tab = 0 Then
MsgBox "Kh«ng t×m thÊy ®¬n vÞ ", , "Th«ng b¸o:"
81. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 81
ElseIf SSTab1.Tab = 1 Then
MsgBox "Kh«ng t×m thÊy tµi s¶n ", , "Th«ng b¸o:"
Else
MsgBox "Kh«ng t×m thÊy phiÕu", , "Th«ng b¸o:"
End If
Exit Sub
rsKQ.Close
Set rsKQ = Nothing
Else
frmTimKiemKQ.Show
End If
End With
End Sub
Private Sub SSTab1_DblClick()
End Sub
1.8 Form: frmTimKiemKQ
Private Sub cmdThoat_Click()
Child_Unload Me
End Sub
82. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 82
Private Sub Form_Load()
Dim Li As ListItem
Child_Load Me
With rsKQ
Select Case iButton
Case 0: 'Tim don vi
i = 0
List.ColumnHeaders.Clear
List.ColumnHeaders.Add , , "STT", 1000
List.ColumnHeaders.Add , , "M· ®¬n vÞ", 3000
List.ColumnHeaders.Add , , "Tªn ®¬n vÞ", 3000
.MoveFirst
While Not .EOF
Set Li = List.ListItems.Add
i = i + 1
Li.Text = i
Li.ListSubItems.Add Text:=!MaDV
Li.ListSubItems.Add Text:=!TenDV
.MoveNext
Wend
Case 1: 'Tim tai san
List.ColumnHeaders.Clear
List.ColumnHeaders.Add , , "STT", 1000
List.ColumnHeaders.Add , , "M· nhãm tµi s¶n", 3000
List.ColumnHeaders.Add , , "Tªn tµi s¶n", 3000
.MoveFirst
While Not .EOF
Set Li = List.ListItems.Add
i = i + 1
Li.Text = i
Li.ListSubItems.Add Text:=!MaNhom
Li.ListSubItems.Add Text:=!tennhom
.MoveNext
Wend
Case 2: 'Tim phieu
List.ColumnHeaders.Clear
List.ColumnHeaders.Add , , "STT", 1000
List.ColumnHeaders.Add , , "M· PhiÕu", 2000
List.ColumnHeaders.Add , , "Ngµy lËp phiÕu", 2000
List.ColumnHeaders.Add , , "Ng-êi lËp phiÕu", 3000
.MoveFirst
While Not .EOF
Set Li = List.ListItems.Add
i = i + 1
83. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 83
Li.Text = i
Li.ListSubItems.Add Text:=!Maphieu
Li.ListSubItems.Add Text:=!NgayLP
Li.ListSubItems.Add Text:=!TenNLP
.MoveNext
Wend
End Select
End With
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then Child_Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
rsKQ.Close
Set rsKQ = Nothing
End Sub
Private Sub List_MouseDown(Button As Integer, Shift As Integer, X As Single, Y
As Single)
If Button = 2 Then
Select Case iButton
Case 0:
frmPopUpMenu.SetDV List.SelectedItem.ListSubItems(2).Text,
List.SelectedItem.ListSubItems(1).Text
Me.PopupMenu frmPopUpMenu.mnuDonvi
End Select
End If
End Sub
1.9 Form: frmDoThi
84. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 84
Option Explicit
Private Sub Command1_Click()
Chart1.Plot.Axis(VtChAxisIdY).AxisTitle.TextLayout.VertAlignment =
VtVerticalAlignmentTop
Chart1.Plot.Axis(VtChAxisIdY).AxisTitle = "(VND)"
Chart1.Plot.Axis(VtChAxisIdY).AxisTitle.VtFont.Size = 18
With Chart1
If lisLoaiDT.ListIndex = 0 Then
.chartType = VtChChartType2dBar
ElseIf lisLoaiDT.ListIndex = 1 Then
.chartType = VtChChartType2dPie
ElseIf lisLoaiDT.ListIndex = 2 Then
.chartType = VtChChartType3dBar
.Plot.View3d.Elevation = 15
.Plot.View3d.Rotation = 30
End If
.Refresh
End With
End Sub
Private Sub Form_Load()
Child_Load Me
With Chart1
.ChartData = gt
.Title = "Gi¸ trÞ Tµi s¶n"
85. Qu¶n lý tµi s¶n cè ®Þnh Tr-êng §¹i häc Qu¶n lý vµ kinh
doanh Hµ Néi
§ç §øc Chung Tin4 85
.FootnoteText = "Tµi s¶n cè ®Þnh"
.Title.VtFont.Name = ".vntime"
.Title.VtFont.Size = 16
.Legend.VtFont.Name = 14
.Legend.VtFont.Name = ".vntime"
.Footnote.VtFont.Name = ".vntime"
.Column = 1
.ColumnLabel = "Gia tri thuc te"
.Column = 2
.ColumnLabel = "Gia tri ke toan"
.Refresh
End With
'--------------------------------------------------------
lisLoaiDT.AddItem "Cét, 2D", 0
lisLoaiDT.AddItem "H×nh Trßn,2D", 1
lisLoaiDT.AddItem "Cét, 3D", 2
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then Child_Unload Me
End Sub
Private Sub lisLoaiDT_dblClick()
Command1_Click
End Sub
2 Các Modul
2.1 Modul:cCodeNTS
Option Explicit
Public Const Them = 0
Public Const Sua = 1
Public MaNhom As String
Function CodeNTS(MaLoai As String)
Dim soN As Integer
Dim Ma As String
Dim MaTaiSan As String
Dim rsLTS As ADODB.Recordset
Set rsLTS = New ADODB.Recordset
rsLTS.Open "tblLoaiTS_master", cnn, adOpenDynamic, adLockOptimistic
With rsLTS
.MoveFirst
While Not (.EOF)
If !TenloaiTS = MaLoai Then
Ma = !MaloaiTS