Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Lưu record nào thì record đó không sửa được, còn không lưu thì sửa vô tư
#1
Chào cả nhà!
 cho mình hỏi, 
1. làm sao khi bấm nút lưu hay In sẻ không thể sửa được Điểm trong form đối với record đó, còn những record chưa bấm lưu hay là chưa bấm in thì vẫn tới lùi sửa được. 
2. Nhưng khi sửa record đã lưu/In phải có mật khẩu, mật khẩu này phải dể dàng thay đổi

Mong mọi người chỉ giáo.
P/s: Mình có tìm hiểu hết trên diễn đàn nhưng không cái nào theo ý nên mình lập topic mới, hầu hết là new mới 1 record rồi bấm lưu sẽ không sửa được, rồi khi quay lại record khác chưa bấm lưu cũng không sửa được, 

Ở đây Mình nhập điểm học sinh nên danh sách đã có rồi, giờ thì tới lùi để nhập điểm. rồi lưu và in
File demon mong mọi người chỉ dẫn. ở form NHAPDIEM Tải file tại đây
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn
#2
Để xử lý vụ này bạn có thể xử lý bằng phưng pháp sau:
Trên table điểm tạo một field [Đã lưu] (hoặc đã in gì đó...) có data type là yes / no, mặc định là no. Khi bấm lưu hoặc in sẽ chuyển thành yes.
xử lý trên các event Form_Open, Form_Current các lệnh theo điều kiện của giá trị  field [Đã lưu].
Không xóa: Me.AllowDeletions = False
Không sửa: Me.AllowEdits = False
Và ngược lại.
Có rất nhiều chủ đề về việc tạo form login phần quyền.
Bạn có thể vào đây
FORM LOGIN
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , maidinhdan , thanhtruong
#3
Cảm ơn. nhưng cụ thể của nó là thế nào.
ý mình hỏi khi bấm in thì không sửa được điểm của tên học sinh đó, còn những điểm của những học sinh chưa lưu thì vẫn sửa bình thường, 
chứ ở đây mình đâu có hỏi đến form đăng nhập đâu mà bạn cho mình liên kết đến form LoGin.
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn
#4
(15-09-15, 02:38 PM)thanhtruong Đã viết: Cảm ơn. nhưng cụ thể của nó là thế nào.
ý mình hỏi khi bấm in thì không sửa được điểm của tên học sinh đó, còn những điểm của những học sinh chưa lưu thì vẫn sửa bình thường, 
chứ ở đây mình đâu có hỏi đến form đăng nhập đâu mà bạn cho mình liên kết đến form LoGin.

OK! Nếu ai in cũng được thì không cần quan tâm đến vụ phân quyền.
1/Tạo trên table điểm 1 field có tên Khoa có data type Yes/No (Nhiệm vụ của nó là khi có giá trị true thì sẽ không cho sửa xóa record đó)
2/ Tạo 1 check box Khoa có control source là Khoa.
Đưa code này vào.

Mã:
Private Sub IN_Click()
     Khoa.Value = True
     Me.AllowEdits = False
     Me.AllowDeletions = False
     Me.Refresh
End Sub


Mã:
Private Sub LUU_Click()
     Khoa.Value = True
     Me.AllowEdits = False
     Me.AllowDeletions = False
     Me.Refresh
End Sub


Mã:
Private Sub Form_Current()
     If Khoa.Value = True Then
          Me.AllowEdits = False
          Me.AllowDeletions = False
     Else
          Me.AllowEdits = True
          Me.AllowDeletions = True
     End If
End Sub


Mã:
Private Sub Form_Open(Cancel As Integer)
     If Khoa.Value = True Then
          Me.AllowEdits = False
          Me.AllowDeletions = False
     Else
          Me.AllowEdits = True
          Me.AllowDeletions = True
     End If
End Sub

Thực ra cách xử lý của bạn hơi bị trùng lập vì cả hai trường hợp IN và LUU đều khóa dữ liệu. Nếu như vậy thì chỉ cần một nút IN là đủ rồi.
Cách tốt nhất là viết code như sau:

Mã:
Private Sub Form_Current()
     If Khoa.Value = True Then
          Me.AllowEdits = False
          Me.AllowDeletions = False
          IN.Visible = True
     Else
          Me.AllowEdits = True
          Me.AllowDeletions = True
          IN.Visible = False
     End If
End Sub


Mã PHP:
Private Sub Form_Open(Cancel As Integer)
     If Khoa.Value True Then
          Me
.AllowEdits False
          Me
.AllowDeletions False
          IN
.Visible True
     Else
          Me
.AllowEdits True
          Me
.AllowDeletions True
          IN
.Visible False
     End 
If
End Sub 

Hai event này để xử lý công việc khóa và mở khóa record. Đồng thời nếu record nào chưa khóa sẽ ẩn nút in và ngược lại

Mã PHP:
Private Sub LUU_Click()
     DoCmd.RunCommand acCmdSaveRecord
     Khoa
.Value True
     Me
.AllowEdits False
     Me
.AllowDeletions False
     IN
.Visible True
     Me
.Refresh
End Sub 

Event này dùng để lưu record đồng thời show nút in.
Các record muốn in được phải lưu trước nút IN mới hiện ra.
Lưu ý: Đề nghị đổi tên của nút IN vì IN là từ khóa của access không được dùng đặt tên Control.
Tham khảo ở đây.
Danh sách các Keys word VBA access (Không dùng để đặt tên cho các Object)
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn k3nzyyb , thanhtruong , maidinhdan
#5
Cảm ơn rất nhiều. 
Nhưng nút sửa mình viết code thế nào để phù hợp. bấm nút sửa thì nút IN sẻ ẩn đi, Khi Bấm LƯU thì nút IN mới nổi lên lại.
Mà khi bấm nút SỬA thì hiện lên một thông báo nhập mật khẩu để sửa.
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn
#6
(16-09-15, 03:07 PM)thanhtruong Đã viết: Cảm ơn rất nhiều. 
Nhưng nút sửa mình viết code thế nào để phù hợp. bấm nút sửa thì nút IN sẻ ẩn đi, Khi Bấm LƯU thì nút IN mới nổi lên lại.
Mà khi bấm nút SỬA thì hiện lên một thông báo nhập mật khẩu để sửa.
   007  Dễ mà! muốn nút nào hiện thì Visible = True, nút nào ẩn thì Visible = false. Muốn nhập mật khẩu thì hiện ra cái form Nhập mật khẩu (không phải thông báo mà là form). Code gọi form chắc bạn biết rồi. Form nhập mật khẩu phải có properties pop up và modal = yes. Viết code trên form nhập mật khẩu: Nếu Mật khẩu đúng thì mở khóa record, field Khoa có giá trị là false và hiện nút lưu (của form điểm). Nếu không thì không làm gì cả.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thanhtruong , chigonvh , maidinhdan
#7
(16-09-15, 04:37 PM)tranthanhan1962 Đã viết:
(16-09-15, 03:07 PM)thanhtruong Đã viết: Cảm ơn rất nhiều. 
Nhưng nút sửa mình viết code thế nào để phù hợp. bấm nút sửa thì nút IN sẻ ẩn đi, Khi Bấm LƯU thì nút IN mới nổi lên lại.
Mà khi bấm nút SỬA thì hiện lên một thông báo nhập mật khẩu để sửa.
   007  Dễ mà! muốn nút nào hiện thì Visible = True, nút nào ẩn thì Visible = false. Muốn nhập mật khẩu thì hiện ra cái form Nhập mật khẩu (không phải thông báo mà là form). Code gọi form chắc bạn biết rồi. Form nhập mật khẩu phải có properties pop up và modal = yes. Viết code trên form nhập mật khẩu: Nếu Mật khẩu đúng thì mở khóa record, field Khoa có giá trị là false và hiện nút lưu (của form điểm). Nếu không thì không làm gì cả.

tương tự như vậy, bấm lưu sẽ không sửa được, nhưng bây giờ mình muốn có 1 ô vẫn sửa đuợc, ví dụ môn Toán, thì phải làm sao. mình thử viết rồi mà không được
ví dụ như:      Me.toan.Locked = True
và:                 me.toan = true
vv.v.v.
mà không được. mong mọi nguời chỉ giáo
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn
#8
Mình cũng góp ý kiến chút về cái form này.
Không biết cái logic xử lý form này của bạn như thế nào? tại sao đã Lưu rồi còn cho Sửa? Bạn có thể chia sẽ rõ hơn không.
Theo cách của mình thì nên phân quyền ở cái nút [Sửa] như anh tranthanhan1962 đã đề cập ở trên - ví dụ phân quyền ai được sửa môn nào. Nếu theo cách này thì bạn xem cái demo của mình bên dưới.

Demo này:
- Gom những lệnh AllowEdit, AllowAddition của form, button... vô 1 cái Sub HienTrangForm để gọi ở từng nút lệnh cho gọn.
- Phân quyền chỗ nút [Sửa]: chỉ được sửa ở textbox chỉ định (vd: textbox diemtoan). Mình không viết code phân quyền ở đây, bạn tự ngâm cứu các bài trong diễn đàn nhé, chỉ sample cái code thôi 007 .
- Thêm ở mục Property - Form -Tag của các textbox diemtoan, diemvan...: "NotEdit"
- Thiết lập Locked: Yes cho các textbox điểm.

Code trong form này như sau:

Mã PHP:
Option Compare Database
Option Explicit

Private Sub Form_Current()
   If Me.khoa True Then
       HienTrangForm True
   Else
       HienTrangForm False
   End 
If
End Sub

Private Sub IN_Click()
   DoCmd.OpenReport "INDIEM"acViewPreview, , "[STT] = " Me.stt
End Sub

Private Sub LUU_Click()
  Me.khoa True
  DoCmd
.RunCommand acCmdSaveRecord
  HienTrangForm True
End Sub

Sub HienTrangForm
(Optional DoiHienTrang As Boolean True)
   Me.khoa.SetFocus
   Me
.LUU.Enabled Not DoiHienTrang
   Me
.IN.Enabled DoiHienTrang
   Me
.SUA.Enabled DoiHienTrang
   Me
.khoa.Locked Not DoiHienTrang
   Me
.diemtoan.Locked DoiHienTrang
   Me
.diemanh.Locked DoiHienTrang
   Me
.diemhoa.Locked DoiHienTrang
   Me
.diemsinh.Locked DoiHienTrang
   Me
.diemvan.Locked DoiHienTrang
   Me
.AllowAdditions DoiHienTrang
End Sub

Private Sub SUA_Click()
   Me.khoa False
   HienTrangForm False 
'=> Neu muon sua het các môn thì xoa cac cau lenh ben duoi nó.
   '
Neu phan quyen giáo viên nào sua môn dó thì chay dòng duoi.
   'Select Case GiaoVien
   '
Case Toan
       Me
.diemtoan.Tag "Edit"
   'Case Van
       '
Me.diemvan.Tag "Edit"
   'Case ...
       '
...
   'End Select
   Call PhanQuyenEdit
End Sub

Sub PhanQuyenEdit()
   Dim ctr As Control
   For Each ctr In Me.Controls
       If ctr.Tag = "NotEdit" Then
           ctr.Enabled = False
       End If
   Next ctr
End Sub 


Demo
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn thanhtruong , maidinhdan , honglv157
#9
xin lỗi. vì mình nói "sửa môn toán" vậy để cho mọi người dể hiểu, là môn toán vẫn tác động vào được
Chứ thật ra thì vấn đề này mình đã giải quyết tốt về phân quyền sửa ...
nhưng trong demon của mình bửa nay có thêm textbot nhập số báo danh để hiển thị tên học sinh đó rồi mới nhập điểm, nhưng khổ nỗi khi đã lưu thì ô textbot này cũng không tác động vào đựơc.
vậy mình hỏi ví dụ môn toán cho mọi người dể hiểu vậy,
chứ bây giờ mình muốn là ô textbot này có thể bấm số vào, như thế mới hiện tên học sinh đuơc
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn
#10
(04-10-15, 09:03 AM)thanhtruong Đã viết: tương tự như vậy, bấm lưu sẽ không sửa được, nhưng bây giờ mình muốn có 1 ô vẫn sửa đuợc, ví dụ môn Toán, thì phải làm sao. mình thử viết rồi mà không được
ví dụ như:      Me.toan.Locked = True
và:                 me.toan = true
vv.v.v.
mà không được. mong mọi nguời chỉ giáo
Me.toan.Locked = True hay toan.Locked = True cũng được. Nhưng mình dịch tiếng bồi bằng google nha. toan = đối tượng tên là toan, Locked = đã bị khoá, true = thật. Me.toan.Locked = True có nghĩa là toan của tôi đã bị khoá là  thật 007  . Bạn đã ra lệnh khóa nó rồi mà đòi sửa là sao?
me.toan = true hay Me.toan.Value = True hay toan.Value = True. Có nghĩa là giá trị của toan là  -1 (true = -1, false = 0) lệnh này lại càng không dính dáng đến chuyện mở khóa cho toan.
Muốn mở khóa cho ô toán lệnh phải là:
toan.Locked = False (dịch theo google toan đã bị khoá là sai) có nghĩa là đã mở khóa. Mở khóa rồi thì mới có quyền sửa chứ.
Các bạn bây giờ rất sướng muốn hiểu từ nào trong code chỉ cần quét đen nó rồi bấm F1, xong copy đoạn help qua google cho nó dịch là có thể hiểu một cách dễ dàng. Thời của mình bấm F1 xong phải lấy tự điển của Lê Bá Kông dịch. Mà đâu có hiểu được bao nhiêu.
Bạn nào còn quyển này thử lấy ra dịch thì biết. 
Đến sau này có được google dịch cũng mừng. Nhưng lúc đầu nó dịch phát ớn. Tôi còn nhớ một lần nó dịch wizard combo box là "thầy phù thủ đánh nhau với hộp trộn lộn", vụ này chúng tôi nói với nhau nhiều lần đến nỗi nhớ hoài luôn. Vậy mà cũng phải ráng đọc dịch cho hiểu để làm.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , thanhtruong , maidinhdan


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tạo Menu dạng TreeView bằng Query (không dùng ActiveX) ongke0711 4 263 Hôm qua, 09:16 PM
Bài mới nhất: toancvp
  Không cho phép điều chỉnh kích thước của Form ChiMai 1 128 18-09-16, 01:27 PM
Bài mới nhất: ongke0711
  Hightlight field nếu field được modify Anna 2 204 08-09-16, 10:14 AM
Bài mới nhất: ledangvan
  Không cho phép click phải chuột trên form ChiMai 2 144 03-09-16, 09:33 PM
Bài mới nhất: ongke0711
Rainbow [Help] E tạo Form nhập liệu cho table ma không dc BUIHUUDIEN 11 545 24-08-16, 12:30 AM
Bài mới nhất: toancvp

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ