Tạo form nhập dữ liệu phức tạp
có 3 bảng dữ liệu:
- Bảng Chu_Du_An gồm cột ID_CTY, Ten_CTY, Dia_Chi_Cty.
- Bảng Du_An gồm cột ID_Du_An, ID_CTY, Dia_Diem_DA
- Bang Du_An_Khoang_San gồm cột ID_KS, ID_DA, So_GP, Tru_Luong
ID của 3 cột là autonumber
quan hệ:
1-n Chu_Du_An vs Du_An
1-1 Du_An vs Du_An_Khoang_San
khoá quan hệ theo tên của cột.
Tạo form:
textbos và lable với mục đích như sau:
Ten_CTY để nhập tên công ty.
Ten_Du_An để nhập tên dự án.
So_GP để nhập số Giấy phép khoáng sản.
Thiết kế button Ghi dữ liệu thì sẽ có sự kiện như sau
- Ghi tên công ty vào [Chu_Du_An].[Ten_CTY]
ID_CTY tự động tăng - là autonumber.
- Ghi tên dự án vào [Du_An].[Ten_Du_An]
- ghi ID_CTY vừa nhận được ở trên vào [Du_An].[ID_CTY]
ID_Du_An tự động tăng
- tương tự với Du_An_Khoang_San.
Mình đã nghĩ ra được ý tưởng như thế, nhưng không biết code. các bạn giúp mình với.
File access của mình là 2k10 lúc lưu sang 2k3 thì nó báo lỗi do có macro ko chuyển được.
Giúp đỡ Giải đề thi mẫu Access
Chào các Anh chị!
Tình hình là, Em đang ôn thi chứng chỉ B Tin học môn ACCESS, thầy em cho mấy đề về làm trước (ổng nói là có trong bài thi) nhưng em chi giải được có 2 đề thôi còn 2 đề còn lại em tìm đủ mọi cách từ tối qua tới giờ mà vẫn không được.
Thời gian gấp quá nên em xin nhờ các anh chị cố gắng bỏ ít thời gian đề giúp em nhé.
Em gửi lên có 2 file word gồm 2 phần (Là các câu hỏi liên quan đến crosstab query, form, report) và 1 file CSDL Access.mdb,( em đã nhập sẵn dữ liệu vào các tables và tạo Relationship rồi).
Vậy em xin nhờ các anh chị giúp làm mẫu lên file access luôn rồi em làm lại mà không hiểu chỗ nào thì sẽ hỏi tiếp...
CÁM ƠN CÁC ANH CHỊ TRONG DIỄN DÀN TRƯỚC NHÉ.
Link: De thi Mau Access
Tạo Textbox co dãn trên form
Có cách nào tạo một Text box co dãn theo chuổi dữ liệu nhập vào khi thiết kế 01 form nhập liệu. Nhờ các bạn hướng dẫn, cảm ơn nhiều !
Phân tích báo cáo - Pivot - Chart - Theo dõi performance
Tuy không có thế mạnh bằng access trong việc quản lý dữ liệu, nhưng excel lại có thế mạnh trong việc phân tích các số liệu để làm một báo cáo, phân tích - nhanh gọn, đa chiều với chart minh họa và theo dõi thành tích MTD, YTD, MAT... khi cập nhật hàng ngày với link trên cùng một file
Trong giới hạn của kiến thức thực tế có được - không qua trường lớp đào tạo bài bản, nhất là cách dùng tên gọi có lẽ không giống như một nhà IT chuyên nghiệp, HV xin mở đầu một số bước thực hiện. Mong được mọi người đóng góp và chỉ dẫn thêm.
Lưu vết chương trình khi nhập liệu
Xin chào cả nhà.
Tôi có viết một chương trình Access quản lý công việc trong phòng tại cơ quan. Tôi dùng phương pháp BackEnd và FrontEnd để chia sẻ dữ liệu trong mạng Lan, tổng số user khoảng 10 người. Chương trình chạy tốt và hiệu quả. Tuy nhiên có một vấn đề mà lâu nay tôi chưa tìm ra giải pháp tối ưu là làm sao biết được ai đã sửa dữ liệu trên form ngày giờ nào, và sửa như thế nào.
Tôi đã tìm kiếm nhiều giải pháp trên diễn đàn và đã áp dụng, tuy nhiên code rất dài, phức tạp, khó quản lý. Bởi tổng số record trong CSDL hơn 7000 records cùng với 10 users cùng làm việc hàng ngày, quản lý tốt CSDL là nhiệm vụ hàng đầu, hơn nữa trong phòng không phải ai cũng hiểu rõ vấn đề bảo vệ CSDL là quan trọng như thế nào.
Và thật không ngờ, không phải giải pháp cao siêu gì cả, rất đơn giản mà thật hiệu quả. Giờ đây, mỗi sáng tôi chỉ mở form theo dõi là có thể biết ai đã làm gì hôm qua, dữ liệu nào đã chỉnh sửa, giá trị cũ sang giá trị mới ra sao, không phải nhức đầu khi phải phân quyền cho từng user. Bây giờ ai cũng có thể chỉnh sửa dữ liệu và có trách nhiệm với việc thay đổi của mình.
Nói hơi dông dài để các bạn có thể hiểu rõ hơn vấn đề. Hôm nay tôi sẽ chia sẻ giải pháp của tôi với các bạn với mục đích là cùng nhau học hỏi. Biết đâu đây chưa phải là giải pháp tốt nhất. Rất mong sự chia sẻ từ diễn đàn.
I. MÔ TẢ CHƯƠNG TRÌNH
Khi mở chương trình sẽ có Form Đăng nhập như sau
Sau khi đăng nhập đúng username và password, click button Đăng nhập sẽ mở ra Form Customers (lấy mẫu từ NorthWind Database của MS Office 2003)
Từ đây, bạn có thể sửa bất kỳ record nào, bất kỳ control nào trên form. Sau khi cập nhật dữ liệu xong, bạn đóng Form, thế thì xong.
Thế làm sao bạn có thể biết user nào đã cập nhật dữ liệu, cập nhật khi nào. Đây mới chính là vấn đề cần giải quyết. Chúng ta sẽ có một table tblLuuVetChuongTrinh ghi lại tất cả các hoạt động của user trên form này. Nào bạn hãy mở table tblLuuVetChuongTrinh, chúng ta sẽ có gì.
Giờ đây ta đã biết user nào sửa control nào, giá trị cũ qua giá trị mới, ngày giờ cụ thể. Bạn chỉ cần tạo một form lọc những giá trị cần biết để quản lý tốt hơn CSDL của mình.
II. GIẢI QUYẾT VẤN ĐỀ
Trong CSDL mẫu này, bạn hãy import 1table Customers và 1 form Customers từ NorthWind Database, bỏ đi tất cả code trong AfterUpdate của từng Control và Form của Customers Form nguyên gốc.
1. Tạo table tblUsers có cấu trúc như sau:
2. Nhập tên user và password của từng user
3. Tạo table tblLuuVetChuongTrinh có cấu trúc như sau:
4. Tạo 5 biến toàn cục (Global) trong standard module
Option Compare Database
Public GvarUserName As String
Public varOldValue As String
Public varNewValue As String
Public varControlName As String
Public varFormName As String
Các biến toàn cục này có ý nghĩa thế nào chắc không cần giải thích các bạn nhỉ
Khi form Đăng nhập mở lên, user chọn username từ combo box và gõ password, sau đó click button Đăng nhập, nếu chọn đúng tất cả sẽ mở form Customers, đồng thời sẽ gán biến toàn cục GvarUsernName = UserName.
Đây là đoạn code kiểm tra khi click vào button đăng nhập (OnClick)
Private Sub cmdDangNhap_Click()
Dim varPassword As String
' Doan code khong cho Control cbUserName trong hay rong
If IsNull(Me.cbUserName) Or Me.cbUserName = "" Then
MsgBox "Please select Username!", vbCritical, "Require Data"
Me.cbUserName.SetFocus
Exit Sub
End If
' Doan code khong cho Control txtPassword trong hay rong
If IsNull(Me.txtPassword) Or Me.txtPassword = "" Then
MsgBox "Please enter Password!", vbCritical, "Require Data"
Me.txtPassword.SetFocus
Exit Sub
End If
varPassword = DLookup("Password", "tblUser", "Username ='" & Me.cbUserName & "'")
If Me.txtPassword = varPassword Then
GvarUserName = Me.cbUserName
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "Customers"
Else
MsgBox "Incorect Password. Please contact the Administrator.", vbCritical, "Cannot access the Database"
Me.txtPassword.SetFocus
Exit Sub
End If
End Sub
Sau khi form Customers mở lên, user sửa đổi dữ liệu thì sẽ có một hàm lưu lại các thay đổi đó, đồng thời ghi các thay đổi đó vào table tblLuuVetChuongTrinh. Chúng ta đã có 5 biến toàn cục (global) đã định nghĩa ở trên, vấn đề là chúng ta sẽ gán giá trị cho các biến như thế nào. Ở đây với sự kiện AfterUpdate cho từng control trên form chúng ta sẽ gọi một Function có tên GoiHamLuuVetChuongTrinh. Đây chính là cái quan trọng nhất của chương trình, không cao siêu, không phức tạp, cực kỳ đơn giản. Function GoiHamLuuVetChuongTrinh được tôi viết như sau:
Function GoiHamLuuVetChuongTrinh()
If IsNull(Screen.ActiveControl.OldValue) Then
varOldValue = ""
Else
varOldValue = Screen.ActiveControl.OldValue
End If
If IsNull(Screen.ActiveControl.Value) Then
varNewValue = ""
Else
varNewValue = Screen.ActiveControl.Value
End If
varControlName = Screen.ActiveControl.Name
varFormName = Screen.ActiveForm.Name
Call CapNhatLuuVet(GvarUserName, varOldValue, varNewValue, varControlName, varFormName)
End Function
Hàm này sẽ gán từng giá trị cho các biến toàn cục ở trên, ngữ pháp câu lệnh đơn giản, tuy nhiên theo tôi kỹ thuật dùng Screen.ActiveControl đã biến những việc phức tạp trở nên cực kỳ đơn giản. Kỹ thuật này không cần biết Control đó tên gì, giá trị bao nhiêu mà chỉ đơn giản là Screen.ActiveControl.
Function CapNhatLuuVet sẽ add các biến toàn cục vào tblLuuVetChuongTrinh.
Function CapNhatLuuVet(fUserName, fOldValue, fNewValue, fControlName, fFormName)
Dim db As Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("tblLuuVetChuongTrinh")
rst.AddNew
rst!TenUser = fUserName
rst!GiaTriCu = fOldValue
rst!GiatriMoi = fNewValue
rst!TenControl = fControlName
rst!TenForm = fFormName
rst!NgayCapNhat = Date
rst!GioCapNhat = Time()
rst.Update
rst.Close
Set rst = Nothing
Set db = Nothing
End Function
Sau khi đã có 2 function quan trọng trên, bạn vào từng control một trên form Customers chon sự kiện AfterUpdate và gõ (hoặc copy) chỉ một dòng lệnh sau:
Call GoiHamLuuVetChuongTrinh
Thế là xong, riêng tôi đã cất đi gánh nặng khi phải suy nghĩ về cách phân quyền cho từng user (ai được sửa cái gì, ai không được sửa cái gì, làm sao theo dõi . . .) khi áp dụng kỹ thuật này. Mỗi người đều có một phương pháp riêng để giải quyết các vấn đề trong công việc, sao cho ĐƠN GIẢN, NHANH CHÓNG, HIỆU QUẢ. Rất mong những ý kiến đóng góp của tất cả các bạn ở diễn đàn thuthuataccess.com và hy vọng các bạn có một giải pháp tốt hơn cho vấn đề này.
Chủ đề Mới nhất |
стоимость курсовой работы...
-Chuyên mục: Ms PowerPoint-Đăng bởi lần cuối: Carltonjoymn-Hôm qua, 08:22 PM-
» Bài trả lời: 0-
» Lượt xem: 1
|
offtopic
-Chuyên mục: Trao đổi Góp ý-Đăng bởi lần cuối: ellahodge-Hôm qua, 10:32 AM-
» Bài trả lời: 0-
» Lượt xem: 5
|
Seattle Storm Introduces ...
-Chuyên mục: Forms-Đăng bởi lần cuối: MichaelWnba-Hôm qua, 10:13 AM-
» Bài trả lời: 0-
» Lượt xem: 1
|
Loyd Nets 29, Storm Grabs...
-Chuyên mục: Chuyện bốn phương-Đăng bởi lần cuối: MichaelWnba-Hôm qua, 10:04 AM-
» Bài trả lời: 0-
» Lượt xem: 2
|
Dòng Thơ Nhạc Trích Đoạn
-Chuyên mục: Góc Thơ -Đăng bởi lần cuối: Nguyễn Thành Sáng-25-04-24, 01:13 PM-
» Bài trả lời: 3-
» Lượt xem: 40
|
[Demo-Phần 4] Tạo khóa bả...
-Chuyên mục: Thư viện thủ thuật-Đăng bởi lần cuối: ngochuong279-24-04-24, 06:13 PM-
» Bài trả lời: 38-
» Lượt xem: 5,453
|
Trợ giúp về Textbox với c...
-Chuyên mục: Forms-Đăng bởi lần cuối: Nguyên Thông-18-04-24, 10:15 PM-
» Bài trả lời: 16-
» Lượt xem: 5,923
|
In mã vạch tạo từ access ...
-Chuyên mục: Forms-Đăng bởi lần cuối: huyhoang22-15-04-24, 11:25 AM-
» Bài trả lời: 38-
» Lượt xem: 20,782
|
Kết nối bảng từ access A ...
-Chuyên mục: Thủ thuật VBA-Đăng bởi lần cuối: hieunx-11-04-24, 01:23 PM-
» Bài trả lời: 5-
» Lượt xem: 75
|
Lấy dữ liệu từ 1 cột của ...
-Chuyên mục: Query-Đăng bởi lần cuối: ongke0711-09-04-24, 11:34 AM-
» Bài trả lời: 11-
» Lượt xem: 659
|
Diễn đàn Thống kê |
» Thành viên: 4,485
» Thành viên mới nhất: Carltonjoymn
» Các chủ đề diễn đàn: 9,860
» Các bài viết diễn: 48,441
Thống kê đầy đủ
|
| | | | |