Chủ đề: Cho mình hỏi về hàm Sleep với !
-
07-12-2010, 04:34 AM #1Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Cho mình hỏi về hàm Sleep với !
Mình có tạo 1 nút lệnh để thực hiện backup dữ liệu ,trong phần đầu code của nút này mình mở 1 cái Form (Form này sau khi mở sẽ đóng sau 1/10 của giây và có thực hiện 1 số lệnh sau khi đóng)
Và mình muốn hỏi đoạn code của nút đó sau khi thực hiện mở Form ,mình muốn các đoạn code tiếp sau sẽ dừng lại khoảng 1/2 giây có được không .
Mình có dùng hàm Sleep nhưng có vẻ nó ngưng hoạt động của toàn bộ phần mềm thì phải, mà mình chỉ muốn ngưng thực hiện đoạn code trong cái nút kia thôi .
Code hàm sleep như sau :
Mã:Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Ví dụ thế này cho dễ hiểu nhé :
Code command button :
Private Sub Command1_Click()
On Error GoTo Err_Command144_Click
DoCmd.OpenForm "Dan Ke Toan", acNormal, "", "", acAdd, acNormal
msgbox "Em là bé lên 3"
Exit_Command1_Click:
Exit Sub
Err_Command1_Click:
MsgBox Err.Description & " LÔI " & Err.Number
Resume Exit_Command1_Click
End Sub
Mình cho Sleep vào thì hình như nó ngưng cả phần mềm.
:chetroi:View more random threads:
- Giúp đỡ về truy vấn
- Thêm ảnh chân dung cho từng ID.
- Em không biết lấy giá trị lớn nhất
- Giúp đở về listbox và textbox . help !
- Không cho tự động ghi record.
- Các phần phụ của 1 phần mềm.
- Giúp mình vấn đề 2 người cùng sửa dữ liệu trên 1 bản ghi qua mạng Lan
- Menu trong Access 2007
- Treeview trong access
- Sửa dùm mình đoạn Code VB này với !
-
07-12-2010, 03:28 PM #2Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Cho mình hỏi về hàm Sleep với !
Gửi bởi glasseggs
Private Sub Form_Load()
TimerInterval = 1000
End Sub
Private Sub Form_Timer()
MsgBox "Be len 3"
TimerInterval = 0
End Sub
-
07-12-2010, 04:17 PM #3Silver member
- Ngày tham gia
- Aug 2015
- Bài viết
- 120
Ðề: Cho mình hỏi về hàm Sleep với !
Thanks bác nhưng cái này hình như không được. Em nói cũng chưa rõ lắm.
Form Dan Ke Toan có source đến Back End
. Cái command button này dùng để backup dữ liệu,code rất dài nên em chỉ ví dụ nhỏ như trên. Mà khi backup dùng lệnh FileCopy thì phải đảm bảo Back End không còn ai sử dụng. Thế nên mục đích em mở cái Form trên sẽ đóng sau 1/10 s là để refesh lại Back End (Vì khi Back End có người truy cập thì nó sẽ tạo ra 1 file .laccdb,trong trường hợp tắt máy đột ngột file này vẫn tồn tại) vì thế trước khi backup chạy cái Form trên nếu không còn ai truy cập Back End thì file .laccdb sẽ mất.
Vậy là đảm bảo nếu không còn ai truy cập Back End thì file .laccdb sẽ mất.
VÀ như thế quá trình thực hiện backup sẽ diễn ra.
Và em muốn trong đoạn code của command button nó sẽ trì hoãn một tẹo sau khi mở Form Dan Ke Toan để đảm bảo rằng Form Dan Ke Toan đã đóng trước khi các lệnh thực hiện backup diễn ra. Nếu không thì mặc dù đang không có ai truy cập BackEnd nó vẫn sẽ báo có người đang truy cập Back End vì Form Dan Ke Toan chưa kịp đóng.
Mà trong trường hợp sử dụng qua mạng Lan không khéo code lại xử lý nhanh hơn cả việc refesh lại cái file .laccdb thì chết.
-
07-12-2010, 04:32 PM #4Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Cho mình hỏi về hàm Sleep với !
Gửi bởi glasseggs
Vì theo thông thường, việc backup dữ liệu cần phải được an toàn và phải được backup vào thời gian không ai đăng nhập để làm việc.
Do vậy, trong các module Front End của bạn , bạn nên kiểm soát thời gian mà người sử dụng đăng nhập. Nếu thời gian đăng nhập thuộc khoảng thời gian sẽ thực hiện backup, bạn sẽ thông báo khuyến cáo cho người sử dụng biết. Có thể dùng Timer để định kỳ thông báo cho người dùng biết.
Ngoài ra, bạn nên có một thủ tục riêng để thực hiện việc kiểm tra các kết nối. Nếu tồn tại kết nối nào đó vào lúc backup, việc đầu tiên là "đá" hết tất cả các kết nối. Sau đó sẽ tiến hành backup.
Các hệ quản trị CSDL khác cũng làm thế hoặc tương tự thế.
----------------------
Một ý kiến thêm vớibạn và các bạn khác:
- Đừng tự làm khó mình, hãy suy nghĩ đơn giản. Khi viết "khó quá, hay quá" thì sau này lại khó maintain.
- Chỉ nên dùng các hàm Windows API khi thực sự trong Access nói riêng và trong các IDE nói chung không có các hàm, thủ tục built-in hỗ trợ. Mà hiện nay, hầu hết đã hỗ trợ rất nhiều rồi.
-
07-12-2010, 05:06 PM #5Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Cho mình hỏi về hàm Sleep với !
Gửi bởi phatnq2002
Thân
-
07-12-2010, 09:26 PM #6Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 4
Ðề: Cho mình hỏi về hàm Sleep với !
Gửi bởi phatnq2002
Không phải là em tự làm khó em đâu, mà chẳng qua em chả học tí gì về lập trình, cho nên biết đến đâu em làm đến đó. Nên đôi khi code có thể rườm rà, thừa thãi.
Việc backup thực hiện tự động theo số ngày đã định sẵn.
Chỉ cho backup tối đa 3 file.
Việc backup này thực hiện trong sự kiện đóng Form chính,Form này chỉ đóng khi tắt phần mềm.
Quy trình backup của em như sau :
1. Kiểm tra đã đến ngày backup chưa.
2. Như bác nói việc backup vào thời gian không ai đăng nhập để làm việc, nên em mới cần mở cái Form Dan Ke Toan rồi đóng nó để refesh lại cái file .laccdb (vì file này sẽ không mất trong trường hợp cúp điện ).
- Trong trường hợp vẫn có người truy cập(tức là file .laccdb sẽ không mất) thì việc backup sẽ không xảy ra.
- Nếu không còn ai truy cập Back End thì đương nhiên file .laccdb sẽ mất đi và
thực hiện backup.
Nếu backup diễn ra thì
3. Kiểm tra trong thư mục BACKUP có tồn tại file backup không, và có mấy file dựa vào câu lệnh :
Mã:file1 = Dir(Link & "Backup\" & Fname & "*.accdb") file2 = Dir file3 = Dir
Thì em thực hiện so sánh 3 file đó có ngày nào nhỏ nhất sẽ xóa file đó và copy bản mới vào.
5.
- Nếu file 3 = "" tức là chỉ có 2 file thì sẽ copy thôi.
- Nếu phát sinh lỗi số 5 tức là chỉ có 1 file hoặc không có file nào thì cũng chỉ copy bằng lệnh FileCopy.
Bác thấy nó không ổn ở chỗ nào không, mà theo ý bác trong lúc đang backup mà có người truy cập thì mình dựa vào cái gì để chặn đây. Bác nói em mới nghĩ đến.
Nếu khi bắt đầu backup chạy cái Query update vào table "Dang backup" ,các Client khác đăng nhập phải kiểm tra nếu là "Đang backup" thì chặn không cho họ truy cập coi bộ cũng không ổn. Vì lỡ nếu đang backup mà mất điện thì sao,thì cái dòng "Đang backup " cứ tồn tại mãi, và rốt cuộc không còn ai có thể vào phần mềm được nữa.
:chetroi:
-
07-12-2010, 10:55 PM #7Junior Member
- Ngày tham gia
- Nov 2015
- Bài viết
- 3
Ðề: Cho mình hỏi về hàm Sleep với !
Gửi bởi glasseggs
.laccdb là một file để kiểm soát việc khóa file (file locking) của Access 2007 trở lên. Với Access 2003 trở xuống thì nó là file .ldb. Các file này tự động xóa khi file database của Access được đóng.
File này được dùng để lưu giữ các thông tin về việc thay đổi giá trị của cùng một nơi (record, table) trong một database dùng chung.
Do vậy, với cách thiết kế của bạn, thì ở Front End và Back End đều tạo ra các lock file khác nhau.
Cái lock file ở đây là cái lock file của cái Back End.
Điều mà bạn đang "lo lắng" là cái lock file này có đang tồn tại hay không. Nếu tồn tại thì sẽ có 2 nguyên nhân:
- Có ai đó vẫn đang truy cập file Back End.
- Các kết nối bị ngắt giữa chừng khiến cho lock file không tự động xóa.
Do vậy, bạn chỉ cần quan tâm đến nếu không xóa được lock file thì có nghĩa là còn người kết nối.
Việc lúc này là làm sao để có thể khuyến cáo và/hoặc cho ngưng kết nối là được.
Tôi chỉ có thể nói lý thuyết là thế, còn việc thực hiện thì mỗi người mỗi ý. Nếu bạn thấy kiểu này thích hợp thì bạn design theo hướng này, sau đó post lại, chúng ta thảo luận tiếp.
-
07-13-2010, 06:17 PM #8Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Cho mình hỏi về hàm Sleep với !
Bác nói đúng ý em rùi. Khi kill sẽ xuất hiện lỗi 70.
Mà em còn băn khoăn 2 điều :
1. "Việc lúc này là làm sao để có thể khuyến cáo và/hoặc cho ngưng kết nối là được."
Có thể cho khuyến cáo đề nghị tắt phần mềm đến các máy Client hoặc bắt buộc tắt phần mềm.
Để làm được vấn đề này theo ý em thì cái Form chính phải luôn trong trạng thái kiểm tra ( tức là cứ 1s nó phải Dlookup trong table nếu nhận được giá trị "Quit" thì tắt phần mềm )
Vậy nếu có 10 máy truy cập dữ liệu qua mạng LAN cứ 1s nó kiểm tra thì có làm cho hệ thống bị chậm không ?
2. Như em đã nói, khi đang backup mà có người vô truy cập dữ liệu thì làm sao để chặn hộ đây.
-
07-14-2010, 12:01 AM #9Silver member
- Ngày tham gia
- Apr 2016
- Bài viết
- 18
Ðề: Cho mình hỏi về hàm Sleep với !
Mình có một giải pháp, mọi người tham khảo xem sao nhé.
Yêu cầu:
Dùng chức năng mạng Winsock (MSWINSCK.OCX) để gởi thông điệp trạng thái của máy chủ (máy chứa data).
Cách xử lý như sau:
Tại máy chủ mở một cổng để các client lắng nghe hiện trạng, giả sử có 2 hiện trạng 1 (cho phép kết nối data) và 0 (cấm kết nối). Khi cần thao tác các xử lý hệ thống như (backup,...), ứng dụng sẽ gởi trạng thái 0.
Ứng dụng client sẽ có các trạng thái sau:
Log in: Xin phép cho đăng nhập bằng cách kiểm tra hiện trạng, nếu nhận trạng thái trả về là 0 thì ko cho phép mở kết nối đến data.
Đang sử dụng: Dùng timer để luôn luôn lắng nghe trạng thái tại máy chứa data trả về, nếu máy chủ trả về là 0 thì hiển thị 1 cảnh báo ứng dụng sẽ tự động quit trong 1 khoản thời gian hợp lý nào đó, yêu cầu người sử dụng phải save các thay đổi.
-
07-14-2010, 12:10 AM #10Junior Member
- Ngày tham gia
- Aug 2015
- Bài viết
- 0
Ðề: Cho mình hỏi về hàm Sleep với !
Cái 1 nó chuyên sâu về lập trình quá nên từ từ em ngâm cứu.
Còn cái 2 em hỏi chút , bản thân câu lệnh FileCopy hoặc CompactDatabase nó chỉ có thể thực hiện trên Back End đã đóng, tức là lúc chạy câu lệnh này liệu nó đã gán chế độ Exclusive cho Back End chưa và liệu nó có thể chặn các truy cập khác chưa.
Chứ nếu mình gán Exclusive cho Back End thì vẫn có 1 người được mở Back End, mà nếu mở rồi thì FileCopy hoặc CompactDatabase làm sao chạy được nữa.
Sản phẩm đan lọc được sinh sản và thiết kế dùng cho cả các công trình bể lọc xây dựng mới lẫn các bể lọc hiện hữu. Đan lọc lovense domi giúp tăng khả năng phân phối gió và nước trong quá trình rửa...
Những đặc điểm vượt trội của đan lọc 2 tầng De Nora (8)