2016/09/24

Xử lý lỗi Permission Denied Error 70 trong MS Access


Đúng là không bao giờ có thể đoán trước được phần mềm sẽ gặp lỗi gì khi ngồi và debug. Chỉ khi nó được ứng dụng trong thực tế, thì nó mới phát sinh đủ kiểu lỗi, và lúc đó mới Fixed được.

Tình huống


Đó là cái phần mềm Quản lý khoFim của tôi, hiện đang chạy tốt với vài người, vài hệ điều hành. Rồi một ngày đẹp trời, nó báo cái lỗi sau:



Sau khi nhận được phản hồi, tôi lập trức "Thẩm vấn" người dùng ngay lập tức:
  • Tình huống lỗi
  • Hệ điều hành, phiên bản Office, Thời điểm, có ..."đạp chai" không?,....???
  • Trước và sau khi có lỗi cài ứng dụng gì, cho ai mượn không?
  • Virus, truy cập vào đâu,... 
Nói chung là sau một lúc vật lộn, tôi đã có được một chút khái niệm ban đầu. Đó là lỗi xảy ra trên máy tính chạy Windows 7, dùng Office 2003 (khá cũ ở thời điểm này), lỗi khi dùng lệnh để gửi hàm SendKey trong Visual Basic. Lúc trước thì dùng bình thường, sau khi cài lại máy tính (chắc do bị YouTube chém vì Spam nhiều quá nên cài lại để tạo kênh đây mà) thì gặp lỗi này, với mọi records.

OK, tôi đã "phác họa" được chân dung "tội phạm" rồi. Giờ là lúc lần theo dấu vết để tóm "hắn"


Xử lý lỗi Permission Denied Error 70 trong MS Access


khoFim là một phần mềm chuyên nghiệp, ban đầu được tạo ra để quản lý dữ liệu liên quan tới phim ảnh, niềm đam mê to lớn của tôi. Nhưng sau, tôi nhận ra nó có thể hữu ích khi Upload, Thống kê, Tính toán, Tổng hợp, và nói chung là tôi nghĩ ra cái gì thì có thể "bảo" nó làm cái đấy cho mình. Thật tuyệt vời phải không?

Tuy chỉ quản lý CSDL về phim, nhưng bản chất cũng là một hệ CSDL nên nó kế thừa mọi hàm Procedure, Function thông dụng mà tôi tạo lập cho các phần mềm chuyên nghiệp, chuyên dụng khác. Có khi nào đó chính là lý do gây lỗi???

Nếu bạn là một lập trình viên chuyên nghiệp, bạn sẽ biết, tạo ra phần mềm không khó, mà qiai đoạn Debug, gỡ lỗi, testing, vận hành, giả lập sự cố để hoàn thiện sản phẩm mới là kinh khủng nhất. Nhưng rồi thì bạn cũng chẳng thể nào mô phỏng, giả lập mọi tình huống trong cuộc đời này, vậy nên người ta thường đưa ra bản Beta, phân phối nó miễn phí cho mọi người, để nhận Feedback và từ đó tối ưu lần cuối trước khi thật sự xuất bản. Nhưng vẫn chưa hết, bạn sẽ luôn thấy các bản nâng cấp, bản vá, cập nhật theo thời gian. Một phần mềm mà không có bản Update chắc chắn là một phần mềm "Chết" hoặc một phần mềm "Tầm thường" - Xin lỗi, đó là quan điểm dưới góc nhìn của tôi, thầy bói mù xem voi, chỉ xem được mỗi cái vòi.

Bản thân tôi rất thích các trường hợp này, khi được nhận báo lỗi, và bắt tay vào truy lùng thủ phạm. Cảm giác hoang tưởng như là truy lùng tội phạm vậy. Tôi sẽ kể các bạn nghe quá trình truy lùng tung tích chúng. Nếu tôi thiếu sót hoặc dư thừa bước nào, mong các bạn góp ý để tôi hoàn thiện tay nghề hơn.

Đầu tiên, khi có thông số máy móc, tôi dựng một máy ảo bằng VMware để giả lập môi trường sinh lỗi. Dùng bản cài đặt tương tự với máy gây lỗi, từ Windows, Office, trình duyệt,...

Điều lạ lùng là với bản Windows 7 đó thì gặp lỗi, còn bản khác thì không thấy gì? Tôi không chuyên về OS nên không biết sự khác nhau giữa 2 bản cài này, nên đành lần theo cách khác, khi xác định, có thể sự khác nhau về cài đặt các services, hay security nào đó gây lỗi.

Nhìn vào cái lỗi "Permission Denied..." thì mọi người thường sẽ nghĩ do bị chặn Users. Nhưng sau một hồi test, và cấp Full control cho người dùng Everyone, tôi vẫn không thoát được lỗi đó. Debug lỗi thì hàm SendKey trong Visual Basic gây lỗi.




Thử xem cái mục Help của Access họ tư vấn gì?



Quá chung chung và vô nghĩa, vì lệnh SendKey này rõ ràng không định làm gì cái Registry hay những thứ như trên.

Cuối cùng, tôi dùng 1 tuyệt chiêu mà có lẽ rất nhiều người vẫn thường sử dụng, còn với tôi thì nó đã giúp tôi thành công với tất cả các lỗi tôi gặp. Đó là Google.

Tôi tìm với từ khóa sau:
ms access permission denied 70 when sendkey
... và với cái kết quả tìm kiếm trả về đầu tiên, tôi đã thấy có vô số cách xử lý, trong đó cách thêm hàm SendKey để ghi đè hàm gốc gây lỗi có vẻ khả thi. Thế là tôi chỉ việc copy cả cái đoạn code đó, dán vào một module bất kì.



Rồi thử lại phần mềm -> Khà khà, lỗi đã được fixed. Đây là đoạn code đó, hay phết nhỉ?


Public Sub Sendkeys(text$, Optional wait As Boolean = False)
    Dim WshShell As Object
    Set WshShell = CreateObject("wscript.shell")
    WshShell.Sendkeys text, wait
    Set WshShell = Nothing
End Sub


Trong trang đó còn vài cách khác tôi chưa thử, vì đây là cách xử lý trực tiếp, tác động vào code và tôi có thể đóng gói nó chung với phần mềm. Cách này tiện hơn là xử lý cho Windows, vì chả nhẽ mỗi khi gặp bản Win bị lỗi này tôi cứ phải xử lý lỗi bằng tay?


Kết luận


Xin lỗi vì cái tật huyên thuyên, nhưng câu chuyện của tôi nó chỉ đơn giản là "Bạn có thể giải quyết mọi vấn đề với Google" - Kiến thức là vô tận, và bạn không thể nào nhớ hết mọi thứ trên đời. Trí não có hạn, hãy để những thứ nặng nề lại cho Google quản lý, khi nào cần thì bạn chỉ phải tìm kiếm và sử dụng. Kỹ năng tìm kiếm đúng thứ cần tìm mới là cái phải học hỏi và ghi nhớ.

Tôi chỉ để đầu óc mình nhớ rất ít, đó là những thứ thuộc về người thân như ngày sinh nhật, ngày giỗ, số điện thoại, những điều mọi người thích, sở trường, sở đoản,... nói chung là những thứ thuộc về cuộc sống. Còn kỹ thuật ư, hãy để Google lo chuyện đó. Hì!

Chúc các bạn thành công, với công việc và cuộc sống.

Một số trang hay:

Related Posts

MMO, YouTube, Blogging

Comment Form Message
EmoticonEmoticon