-
Đóng 1 ứng dụng MS access khác đang mở
AnNguyen > 28-11-19, 06:16 PM
Các bác cho em xin code đóng 1 ứng dụng ms access khác đang mở với ạ.
Em cảm ơn ạ. -
RE: Đóng 1 ứng dụng MS access khác đang mở
ongke0711 > 29-11-19, 09:24 AM
Đóng một ứng dụng khác từ xa cũng có nhiều cách, tôi giới thiệu cách này: dùng hàm GetObject().
Cách này có thể đóng các loại ứng dụng chứ không riêng gì Ms Access.
Nó cũng hơi bá đạo chút vì bạn ngồi từ xa đóng ứng dụng nếu biết đường dẫn file có thể làm người đang thao tác trên file đó giật mình
Mã PHP:Function CloseRemoteDB()
Dim oRemoteDB As Object
Dim sFullFilePath As String
sFullFilePath = "\\Mac\Home\Documents\Test.accdb"
Set oRemoteDB = GetObject(sFullFilePath)
oRemoteDB.DoCmd.RunMacro ("Macro1")
oRemoteDB.DoCmd.Quit acQuitSaveAll
End Function
- Để tránh người dùng bỡ ngỡ, bạn nên tạo 1 form thông báo "đóng CSDL" và 1 Macro1 để gọi form thông báo này.
- Form thông báo sẽ thiết lập Timer trong bao nhiêu giây sẽ tự đóng (dùng MessageBox thì không tự đóng được).
- Sau đó ứng dụng sẽ tự thoát. -
RE: Đóng 1 ứng dụng MS access khác đang mở
AnNguyen > 29-11-19, 09:35 AM
Cái này là làm gì vậy anh?Mã PHP:oRemoteDB.DoCmd.RunMacro ("Macro1")
Đóng từ xa nghĩa là như nào ạ? mình đóng theo địa chỉ gì mà tới được máy người ta hả a?
Em chưa hiểu lắm ạ, Vì em cũng muốn ai đang mở file của mình thì có thể mình sẽ đóng lại có mục đích
Em cảm ơn ạ -
RE: Đóng 1 ứng dụng MS access khác đang mở
ongke0711 > 29-11-19, 09:49 AM
À quên nói là dùng cho mang LAN thôi nhé.
Còn nếu qua Internet thì lúc trước tôi có giới thiệu code thông báo đóng ứng dụng có thể sử dụng được.
Vì code đó thực ra là để ứng dụng phía máy khách tự check điều kiện rồi tự đóng dựa trên thông số lấy từ CSDL trên máy chủ (file back end.)
Link: https://thuthuataccess.com/forum/thread-9483.html -
RE: Đóng 1 ứng dụng MS access khác đang mở
AnNguyen > 29-11-19, 09:54 AM
Vâng em cảm ơn anh ạ -
RE: Đóng 1 ứng dụng MS access khác đang mở
AnNguyen > 29-11-19, 09:57 AM
(29-11-19, 09:49 AM)ongke0711 Đã viết: À quên nói là dùng cho mang LAN thôi nhé.
Anh ơi, code vừa nãy là đóng ứng dụng, vậy có đoạn mã nào để check xem nó có mở hay k mới đóng k ạ?
Còn nếu qua Internet thì lúc trước tôi có giới thiệu code thông báo đóng ứng dụng có thể sử dụng được.
Vì code đó thực ra là để ứng dụng phía máy khách tự check điều kiện rồi tự đóng dựa trên thông số lấy từ CSDL trên máy chủ (file back end.)
Link: https://thuthuataccess.com/forum/thread-9483.html
Vì em test thử thì thấy file đang đóng thì nó lại mở lên anh ạ, -
RE: Đóng 1 ứng dụng MS access khác đang mở
ongke0711 > 29-11-19, 12:19 PM
(29-11-19, 09:57 AM)AnNguyen Đã viết: Anh ơi, code vừa nãy là đóng ứng dụng, vậy có đoạn mã nào để check xem nó có mở hay k mới đóng k ạ?
Vì em test thử thì thấy file đang đóng thì nó lại mở lên anh ạ,
Chỉ áp dụng cho mạng nội bộ, không áp dụng kiểm tra ứng dụng kết nối qua internet.
Code để kiểm tra một file có đang mở không thì tôi dùng thủ thuật là kiểm tra cái locked file của nó (.laccdb).
Khi ứng dụng Access mở lên thì nó sẽ tạo 1 file lock (.laccdb) ở cùng thư mục của file .accdb và sẽ tự động xoá khi đóng ứng dụng. Khi đó cần xử lý 2 bước:
- Kiểm tra xem có file .laccdb đó không - dùng hàm Dir$() => Nếu có file tức là đang mở, còn không có tức là đóng. Cách này cũng phát sinh trường hợp là: file .accdb khi đang mở bị lỗi và đóng file nhưng file .laccdb chưa được xoá tự động -> dẫn đến lênh Dir() sẽ cho kết quả sai cho trường hợp này. Để bẫy lỗi này thì dùng bước 2.
- Xoá thử file .laccdb: dùng lênh Kill để xoá file .laccdb, nếu file Access đang mở thì bạn sẽ không xoá được và ngược lại.
Code cho hàm kiểm tra:
Mã PHP:Public Function IsDBOpened(sFullDBPath As String) As Boolean
Dim slaccdb As String
slaccdb = Replace(sFullDBPath, ".accdb", ".laccdb")
IsDBOpened = False
If Dir$(slaccdb) <> "" Then
On Error Resume Next
'Xóa thu file .laccdb -> Neu báo loi => file do dang duoc su dung (opened)'
Kill slaccdb
If Err.Number <> 0 Then
IsDBOpened = True
End If
On Error GoTo 0
End If
End Function
Code chạy test:
Mã PHP:Sub test()
Const DBfile = "\\Mac\Home\Documents\A.accdb"
If IsDBOpened(DBfile) Then
MsgBox "File ung dung: " & DBfile & " dang mo"
Else
MsgBox "File ung dung: " & DBfile & " dang dong"
End If
End Sub -
RE: Đóng 1 ứng dụng MS access khác đang mở
Xuân Thanh > 29-11-19, 01:11 PM
Bảo đưa luôn cái thông báo File đang mở hay đóng vào Function luôn đi -
RE: Đóng 1 ứng dụng MS access khác đang mở
ongke0711 > 29-11-19, 03:36 PM
(29-11-19, 01:11 PM)Xuân Thanh Đã viết: Bảo đưa luôn cái thông báo File đang mở hay đóng vào Function luôn đi
Tôi không đưa câu thông báo vào hàm IsDBOpened() là vì có trường hợp chỉ cần lấy trị trả về là True hay False từ hàm này để thực thi các hàm/ thủ tục nào đó khác nữa.
Phần thông báo thì tôi nghĩ các bạn dư sức tuỳ biến rồi. -
RE: Đóng 1 ứng dụng MS access khác đang mở
AnNguyen > 29-11-19, 03:47 PM
Em cảm ơn anh nhiều ạ