yamakashi2003 > 09-01-20, 07:06 PM
ongke0711 > 10-01-20, 12:17 AM
yamakashi2003 > 14-01-20, 12:13 AM
(10-01-20, 12:17 AM)ongke0711 Đã viết: Tôi nghĩ là bạn đã thiết kế sai trường hợp này rồi.
Access có một chức năng rất hay là thiết kế cho đa người dùng. Đó không có nghĩa là bạn thiết kế môt database, 1 form rồi chia sẻ cái file đó, form đó cho nhiều người cùng mở lên nhập liệu.
Bạn đang làm như vậy đúng không?
Để thiết kế cho nhiều người dùng, Access có chức năng "Split Database" (trong Menu Database Tools - Access Database) dùng để chia file Access thành 2 phần: phần dữ liệu (Table) và phần giao diện người dùng (Form, Query, Macro, Module). Phần dữ liệu gọi là file Backend (BE) và phần giao diện gọi là Frontend (FE). Bạn sẽ lưu file BE này lên máy chủ và chia sẽ full quyền cho mọi người có thể truy cập (mở) được file này. Còn file FE thì bạn copy cho mỗi máy con 1 bản. Khi máy con mở file FE sẽ kết nối dữ liệu tới file BE đã được chia sẽ trên máy chủ. Khi mỗi các máy con nhập liệu, dữ liệu sẽ lưu hết về file BE.
Sau khi bạn đã tách file Access ra như trên thì khi bạn chỉnh sửa file FE: sửa Form, report, code v.v.. thì cứ sửa riêng trên máy bạn, sau khi hoàn tất thì lại copy cho các máy con ghi đè lên file FE cũ thôi.
Việc chỉnh sửa này là không có sửa trên file BE, sửa Table. Do đó bạn phải thiết kế cho thật chuẩn hoá Table ngay từ đầu, chỉ sửa các form giao diện, code xử lý thôi. Nếu có sửa Table sẽ là sửa chữa lớn, gần như thiết kế lại file Access rồi.
tranthanhan1962 > 14-01-20, 01:41 AM
(14-01-20, 12:13 AM)yamakashi2003 Đã viết: E cám ơn bác đã thông não. Nhưng hiện giờ em có 1 vấn đề là do máy tính chỗ em có kết nối mạng lan, nên 1 file access em tạo ra thì nhiều máy khác có thể mở cùng lúc, thậm chí tùy chỉnh trên form của nó (vì table em đã ẩn đi), giờ em muốn 1 lệnh có thể tắt file access đó đang mở ở các máy khác liệu có được không bác nhỉTắt một file khách access không khó, nhưng bạn phải cho người xử dụng thời gian để hoàn chỉnh công việc của họ. Tạo một table có 1 field 1/ [exitaccess] datatype = yes/no defaul value = false. Tạo 1 form có recordsource là table này, trên form các control 1/exitaccess controlsource =[exitaccess], một textbox tính giờ defaul Value =0, Một Label có caption "Sau 5 phút sẽ tắt máy tính" - Ví dụ bạn muốn tắt máy tính sau thông báo 5 phút. Thiết đặt Timer Interval >0. Bạn cũng tạo trên user admin của bạn 1 form có recordsource là table đó. Khi bạn muốn tắt các tập tin access user khác. Viết code để khi bắt đầu tắt hiện thông báo, code này trên form của máy user.
yamakashi2003 > 15-01-20, 12:53 AM
(14-01-20, 01:41 AM)tranthanhan1962 Đã viết:Bác ơi bác cho em hỏi em chưa hiểu cách bác hướng dẫn làm sao phân biệt được file đang mở ở máy khác để đóng và không đóng file ở máy em,(14-01-20, 12:13 AM)yamakashi2003 Đã viết: E cám ơn bác đã thông não. Nhưng hiện giờ em có 1 vấn đề là do máy tính chỗ em có kết nối mạng lan, nên 1 file access em tạo ra thì nhiều máy khác có thể mở cùng lúc, thậm chí tùy chỉnh trên form của nó (vì table em đã ẩn đi), giờ em muốn 1 lệnh có thể tắt file access đó đang mở ở các máy khác liệu có được không bác nhỉTắt một file khách access không khó, nhưng bạn phải cho người xử dụng thời gian để hoàn chỉnh công việc của họ. Tạo một table có 1 field 1/ [exitaccess] datatype = yes/no defaul value = false. Tạo 1 form có recordsource là table này, trên form các control 1/exitaccess controlsource =[exitaccess], một textbox tính giờ defaul Value =0, Một Label có caption "Sau 5 phút sẽ tắt máy tính" - Ví dụ bạn muốn tắt máy tính sau thông báo 5 phút. Thiết đặt Timer Interval >0. Bạn cũng tạo trên user admin của bạn 1 form có recordsource là table đó. Khi bạn muốn tắt các tập tin access user khác. Viết code để khi bắt đầu tắt hiện thông báo, code này trên form của máy user.
Code form cập nhật dữ liệu update từ backend
Private Sub Form_Timer()
exitaccess.Requery
If exitaccess.Value = True then
Me.visible = True
Textbox_tính_giờ.Value = Textbox_tính_giờ.Value +1
End if
' Giả sử bộ đếm của bạn 5 phút =10000. Bạn có thể test trước bộ đếm của bạn.
If Textbox_tính_giờ.Value=10.000 then
DoCmd.Quit
End If
End Sub
Form này được open khi mở chương trình và được ẩn dưới nền - Có thể dùng form login để xử lý, nếu dùng cách này thì khỏi dùng form độc lập. Các control không muốn người sử dụng thấy thì xử lý Visible = false (exitaccess, Textbox_tính_giờ)
Chúc bạn thành công.
tranthanhan1962 > 15-01-20, 06:10 PM
(15-01-20, 12:53 AM)yamakashi2003 Đã viết: Bác ơi bác cho em hỏi em chưa hiểu cách bác hướng dẫn làm sao phân biệt được file đang mở ở máy khác để đóng và không đóng file ở máy em,Bạn nên tạo một tập tin CSDL accdb data back-end, trên CSDL này chỉ chứa table và hòan toàn không có thành phần nào khác (tốt nhất là chuyển tập tin accbd này thành tập tin accde có giao diện login mà chỉ có một mình bạn vào được). Các tập tin front end cũng nên chuyển thành accde để bảo mật. Các tập tin front end sẽ link table vào CSDL back end này để xử lý dữ liệu. Trên giao diện login của front end bạn sử dụng sẽ có nút tắt các máy đang mở còn các máy chưa mở thì sẽ không ảnh hưỡng vì việc tắt máy do xử lý qua giao diện giao diện login của máy đó. Giớ đang bận để rảnh mình sẽ xem dữ liệu của bạn gởi và hỗ trợ
việc tạo field exitaccess có ý nghĩa gì ạ
em gửi bác file bác xem giúp em với,
https://drive.google.com/file/d/1wtDxddG...sp=sharing
ý tưởng của em là em có 1 file access "nhập liệu" và các máy ở công ty em đều kết nối mạng lan, vì vậy các máy khác đều có thể truy cập vào file access này ở máy em, do đó em muốn thiết kế 1 button close trên form F_chinh, mà khi em login file access "nhập liệu" với tài khoản qat có quyen = 1, và em ấn button close đó (trên form F_chinh) thì file access "nhập liêu" này đang mở (bằng 1 tài khoản đăng nhập khác, ví dụ linh-ntt) ở các máy khác sẽ đóng sau 5 giây
mong bác làm demo giúp em tham khảo
em xin cảm ơn
tranthanhan1962 > 16-01-20, 12:54 AM
yamakashi2003 > 17-01-20, 07:57 PM
(16-01-20, 12:54 AM)tranthanhan1962 Đã viết: Của bạn đây
Trong này có 2 phần: BackEn.accdb là CSDL chỉ chứa table nguồn, FrontEnd là tập tin xử lý thông qua link table.
Bất kỳ bạn ngồi trên máy nào khi mật khẩu có QUYEN là 1 thì nó sẽ trở thành máy của admin và có quyền tắt tất cả máy khác chỉ chừa lại một mình nó, Khi máy này còn hoạt động với chế độ tắt máy user thì tất cả các máy khác sẽ không mở được, mở lên sẽ lập tức tắt ngay. Trong code tôi để gía trị textbox tính giờ là 100 cho nhanh, nếu bạn cần thời gian 5 phút thì tăng giá trị lên 600 hoặc tùy ý (test thử với đồng hồ), giá trị càng lớn thì thời gian chờ tắt càng lâu. Khi các máy đã được tắt sẽ báo với máy chủ.
Chú ý không được close form f_DANGNHAP mà chỉ được ẩn. Visible = False, vì cái form này điều khiển hoạt động tắt các máy user.
tranthanhan1962 > 17-01-20, 10:34 PM
(17-01-20, 07:57 PM)yamakashi2003 Đã viết: em cám ơn bác đã hướng dẫn nhiệt tình,Chính là nhờ event Form_Timer chạy liên tục nên form của các máy User khác mới phát hiện được sự thay đổi yêu cầu của bạn và thực hiện lệnh, nếu không có event này thì bạn làm chỉ có máy của bạn biết, còn cái form của máy khác không thay đổi (Bạn không thể requery cho máy khác được) thì làm sao phát hiện được yêu cầu của bạn. Nếu máy không đủ khả năng xử lý thì sử dụng điện thoại thay thế Máy chạy mạng LAN thì cấu hình tối thiểu cũng phải core I3, RAM 4 Gh, Nếu không thì lúc đầu chạy được nhưng khi dữ liệu tăng lên cũng thua thôi
bác cho em hỏi nếu làm như vậy thì lệnh trong Private Sub Form_Timer() của form đăng nhập sẽ phải load liên tục,
điều này đôi khi gây nặng máy làm máy có thể bị đơ với máy cấu hình yếu
Liệu có cách nào để khi mình cần thì mới kích hoạt lệnh trong sub form_timer không ạ, còn để bình thường, không cần form sẽ k chạy sự kiện này, máy sẽ k bị lag ạ
yamakashi2003 > 18-01-20, 01:12 AM