Đặt password cho Front End bằng VB

glasseggs

New Member
Hội viên mới
:xinloinhe:

Mình đang muốn làm cái phần đặt pass cho Front End bằng VB thay vì dùng cái mặc định của Access.
Và ý tưởng của mình là trên Front End sẽ tạo 1 nút mở một cái file Access Changepass khác có cùng thư mục với Front End để đổi pass cho Front End .
Nhưng vấn đề nằm ở chỗ mình đã thử 3 cách từ dùng Shell, hàm API mà nó chỉ có thể mở pm Access nên chứ không mở cái file Changepass.
Bác nào có cách mở 1 pm access từ 1 pm access khác không ?
Hay có cách nào để đổi pass hay hơn thì chỉ em với .
:k5429592:
 
Ðề: Đặt password cho Front End bằng VB

:xinloinhe:

Mình đang muốn làm cái phần đặt pass cho Front End bằng VB thay vì dùng cái mặc định của Access.
Và ý tưởng của mình là trên Front End sẽ tạo 1 nút mở một cái file Access Changepass khác có cùng thư mục với Front End để đổi pass cho Front End .
Nhưng vấn đề nằm ở chỗ mình đã thử 3 cách từ dùng Shell, hàm API mà nó chỉ có thể mở pm Access nên chứ không mở cái file Changepass.
Bác nào có cách mở 1 pm access từ 1 pm access khác không ?
Hay có cách nào để đổi pass hay hơn thì chỉ em với .
:k5429592:

1/ Dùng ngay một table và một form đổi pass ngay trong file của bạn ===> Cách này dễ nhất
2/ Dùng file access khác thì muốn mở file này hãy dùng kỹ thuật DAO hoặc ADODB (Dùng DAO đơn giản hơn ADODB)
Thân
 
Ðề: Đặt password cho Front End bằng VB

Cách 1 dễ nhất nhưng cũng không an toàn nhất,nó lưu pass vào table.
Em muốn dùng phần đặt pass của chính access cơ bác. Mà cái DAO thì em chịu.
 
Ðề: Đặt password cho Front End bằng VB

Cách 1 dễ nhất nhưng cũng không an toàn nhất,nó lưu pass vào table.
Em muốn dùng phần đặt pass của chính access cơ bác. Mà cái DAO thì em chịu.

Đây là một kỹ thuật DAO đơn giản

PHP:
Dim AppPass As Database
Dim rPass As Recodset
Dim TenTapTin As String
Set TenTapTin = CurrentProject.Path & "\PassChange.mdb"
Set AppPass = DBEngine(0).OpenDatabase(TenTapTin)
Set rPass = AppPass.OpenRecordset("tblPass", dbOpenTable)
...................

Nhớ chọn Microsof DAO 3.x Object Library trong Reference
 
Sửa lần cuối:
Ðề: Đặt password cho Front End bằng VB

Cho em hỏi chút ,đoạn code này cho vào sự kiện Click của command button à.
Mà khi em chạy nó báo lỗi :
Object required ở dòng Set TenTapTin =
Mà còn cái này nữa :
\PassChange.mdb : là cái file sẽ mở phải không ?
Vậy cái tblPass là cái gì hở bác ?
 
Sửa lần cuối:
Ðề: Đặt password cho Front End bằng VB

Cho em hỏi chút ,đoạn code này cho vào sự kiện Click của command button à.
Mà khi em chạy nó báo lỗi :
Object required ở dòng Set TenTapTin =
Mà còn cái này nữa :
\PassChange.mdb : là cái file sẽ mở phải không ?
Vậy cái tblPass là cái gì hở bác ?

Cái này bác đó ví dụ mở một cái bảng lên cho vui thôi. Có thể 2 bác ko hiểu ý nhau.
 
Ðề: Đặt password cho Front End bằng VB

Cho em hỏi chút ,đoạn code này cho vào sự kiện Click của command button à.
Mà khi em chạy nó báo lỗi :
Object required ở dòng Set TenTapTin =
Mà còn cái này nữa :
\PassChange.mdb : là cái file sẽ mở phải không ?
Vậy cái tblPass là cái gì hở bác ?

PassChange.mdb là file Access cần mở nằm chung với thư mục của file Access hiện hành
tblPass tà tên Table trong cái PassChange.mdb cần mở, còn mở để lam gì là tùy ý bạn
Thân
 
Sửa lần cuối:
Ðề: Đặt password cho Front End bằng VB

Mấy bác ơi nhưng em chạy đoạn này nó vẫn lỗi :
Object required ở dòng Set TenTapTin =

Và nếu ở file PassChange.mdb em không muốn mở cái table đó lên mà chỉ muốn mở cái PassChange.mdb nên có được không ?
Vì trong file PassChange.mdb này không có table nào mà chỉ có 1 cái Form dùng để đổi pass bằng code cho cái file khác thôi.
-----------------------------------------------------------------------------------------
Có lẽ bác hiểu nhầm ý em thật. Em xin trình bày rõ lại như sau :
Em có 2 file ChangePass.accdb và CRMS.accdb (Front End)
File ChangePass.accdb nhằm mục đích đổi pass cho CRMS.accdb (Pass này là pass của Access quản lý chứ không phải pass cho lưu vào table nhé )

Và file ChangePass.accdb chỉ có 1 cái Form có 2 textbox Oldpass và Newpass và 1 nút có code như sau :

Mã:
Sub setPass(oldPass as String, newPass As String) 
Set tempDB = OpenDatabase(CurrentProject.Path & "\" & "CRMS.accdb ", True, False, "MS Access;PWD=" & oldPass)
tempDB.NewPassword oldPass, NewPass
tempDB.Close
End Sub

Private Sub Command1_Click()
setPass  Oldpass,  Newpass
end sub

Mà vấn đề là muốn đổi pass như thế thì phải đóng cái CRMS.accdb lại và mở cái ChangePass.accdb ra. Thế nên em muốn tạo 1 cái nút trên CRMS.accdb để mở cái ChangePass.accdb ra cho nó Pro .
 
Sửa lần cuối:
Ðề: Đặt password cho Front End bằng VB

Mấy bác ơi nhưng em chạy đoạn này nó vẫn lỗi :
Object required ở dòng Set TenTapTin =

Và nếu ở file PassChange.mdb em không muốn mở cái table đó lên mà chỉ muốn mở cái PassChange.mdb nên có được không ?
Vì trong file PassChange.mdb này không có table nào mà chỉ có 1 cái Form dùng để đổi pass bằng code cho cái file khác thôi.
-----------------------------------------------------------------------------------------
Có lẽ bác hiểu nhầm ý em thật. Em xin trình bày rõ lại như sau :
Em có 2 file ChangePass.accdb và CRMS.accdb (Front End)
File ChangePass.accdb nhằm mục đích đổi pass cho CRMS.accdb (Pass này là pass của Access quản lý chứ không phải pass cho lưu vào table nhé )

Và file ChangePass.accdb chỉ có 1 cái Form có 2 textbox Oldpass và Newpass và 1 nút có code như sau :

Mã:
Sub setPass(oldPass as String, newPass As String) 
Set tempDB = OpenDatabase(CurrentProject.Path & "\" & "CRMS.accdb ", True, False, "MS Access;PWD=" & oldPass)
tempDB.NewPassword oldPass, NewPass
tempDB.Close
End Sub

Private Sub Command1_Click()
setPass  Oldpass,  Newpass
end sub

Mà vấn đề là muốn đổi pass như thế thì phải đóng cái CRMS.accdb lại và mở cái ChangePass.accdb ra. Thế nên em muốn tạo 1 cái nút trên CRMS.accdb để mở cái ChangePass.accdb ra cho nó Pro .

Vậy thì dùng thử hàm Sheel xem sao nhé
Thân
 
Ðề: Đặt password cho Front End bằng VB

Nói "một câu" ngắn gọn:

Bạn glasseggs không nên "cố chấp" cho cái quan điểm của mình khi làm cái vụ này.

Vì nó phá sản ngay cái ý tưởng mở một cái form từ mdb khác để thay đổi cái password của cái mdb hiện hành (tức cái Front End đang mở của bạn). Một lẽ đơn giản là nó bị đụng về quyền truy cập. Bởi cái Front End đang mở, nó mở theo một file ldb để quản lý cái vụ truy cập. Một remote khác truy cập vào nó sẽ bị "đụng" ngay cái ldb này.

Với một người đã có một ít năm làm việc với Access, tôi chỉ khuyên bạn là hãy suy nghĩ một cách đơn giản, đừng tự gây khó cho mình quá.
 
Ðề: Đặt password cho Front End bằng VB

Thanks bác, nhưng em có bảo em mở cái ChangePass để đổi pass cho cái Front End mà cái Front End không đóng đâu. Cái nút trên Front End có tác dụng mở cai ChangePass ra rồi quit luôn cái Front End mà.
Như thế em có toàn quyền đổi pass Front End.
Bác có cách đơn giản hơn không.
Thanks mọi người.
 
Ðề: Đặt password cho Front End bằng VB

Thanks bác, nhưng em có bảo em mở cái ChangePass để đổi pass cho cái Front End mà cái Front End không đóng đâu. Cái nút trên Front End có tác dụng mở cai ChangePass ra rồi quit luôn cái Front End mà.
Như thế em có toàn quyền đổi pass Front End.
Bác có cách đơn giản hơn không.
Thanks mọi người.

Chờ thêm xíu nữa đi bác, sắp xong theo yêu cầu của bác rồi :xinloinhe:
Bác cứ yêu cầu khó thế làm em phải vất vả ghê cơ.
Chiều nay sẽ có đáp án cho bác.
 
Ðề: Đặt password cho Front End bằng VB

Chờ thêm xíu nữa đi bác, sắp xong theo yêu cầu của bác rồi :xinloinhe:
Bác cứ yêu cầu khó thế làm em phải vất vả ghê cơ.
Chiều nay sẽ có đáp án cho bác.

:runcamcap:

Hi, thanks bác trước nhé .
:k5429592:
 
Ðề: Đặt password cho Front End bằng VB

:runcamcap:
Hi, thanks bác trước nhé .
:k5429592:

Em đi thẳng vào vấn đề như vậy nè:
Có 3 cách mở 1 database access:

1. Mở từ giao diện tương tác trực tiếp access:
Vào File/Open, chọn file.
Với cách mở này bác có thể open 1 form lên để nhập liệu

2. Mở từ lệnh shell của VBA
call shell (AccessPath + ' ' + DataPath + 1 vài thông số command line nếu cần thiết)

Tuy nhiên chia buồn sâu sắc đến các access DB nào có cài password dạng database password

3. Mở từ giao diện lập trình VBA
Khởi tạo đối tượng: Access.Application
Set AccApp = New Access.Application
Mở DB:
AccApp.OpenCurrentDatabase "DataPath",True,"Database Password"
Tham số thứ 2 = True là mở theo phương thức Exclusive, ngược lại mở theo share DB.

Tuy nhiên chia buồn sâu sắc đến việc mở cái form change password, vì mở theo phương thức này thì bó tay trong việc thực hiện nhập liệu ngoại trừ việc gọi hàm InputBox.


Có hướng rồi. he he....

Bây giờ có 2 cách thiết kế như sau:

Cách 1: Muốn mở cái Form cho người dùng nhập old và new pass, chỉ có thể dùng ứng dụng khác ngoài access, VB6 chẳng hạn

Cài đoạn lệnh sau vào để đổi pass:

Dim accObj as Object
Set accObj = CreateObject("Access.Application")
accObj.OpenCurrentDatabase "DataPath",True,"oldPassword"
accObj.CurrentDb.NewPassword "oldPassword","newPassword"
accObj.CloseCurrentDatabase


Lưu ý: Sẽ có một vài lỗi phát sinh ở đây trong trường hợp data đó đang được mở bởi luồng khác thì ko đổi pass được.
Tại đây bác nên dùng bẫy lỗi rồi sáng tạo như thế nào tùy bác.

Cách xử lý:

Từ access, gọi lệnh shell để mở ứng dụng này lên
Sau đó gọi Application.Quit để thoát ứng dụng Access.

Cách 2: Dùng ứng dụng access

Từ access ứng gọi file access changePass

Dim accObj as New Access.Application
accObj.OpenCurrentDatabase "DataPath",False,"Password"
accObj.DoCmd.OpenForm("Formbatky có gắn timer để gọi lệnh đổi pass", acNormal)
Application.Quit
'Thoat khoi ung dung để thực hiện việc đổi Pass cho nó.
Lúc này ứng dụng thoát nhưng vẫn có 1 ứng dụng khác đang mở file changePass, muốn thấy nó vào TaskManager xem thì có.

Câu hỏi đặt ra ở đây là làm sao để nhập oldpass và newpass, phải nhờ vào InputBox thôi.

Như vậy trong file changePass phải thiết kế 1 Form, Form này thiết lập timer để nó luôn lặp kiểm tra tình trạng file kia đã thực sự dành riêng cho nó chưa.

Trong sự kiện OnTime
Dim oldPass As String
Dim newPass As String
oldPass = InputBox("Nhap old pass")
newPass = InputBox("Nhap new pass")

Set accObj = New Access.Application
accObj.OpenCurrentDatabase "DataPath",True,oldPass
accObj.CurrentDb.NewPassword oldPass,newPass
accObj.CloseCurrentDatabase


Nhớ bắt lỗi để kiểm tra chắc chắn rằng việc đổi pass phải thành công, nếu thành công thì gọi accObj.Quit ngược lại hiển thị câu thông báo cho biết và gọi accObj.Quit, xong rồi chờ cho Ontime kế tiếp.

Ah`, lần đổi đầu tiên ko bao giờ thành công vì cái file mình đang mở, vì vậy phải chờ đến lệnh quit xong và ontime lần 2 thực hiện thì mới ok.

Bác sẽ ko thấy cái ứng dụng nào dưới thanh taskbar, nhưng vẫn có các Message hiện lên yêu cầu bác nhập oldpass và newpass
 
Sửa lần cuối:
Ðề: Đặt password cho Front End bằng VB

Chú chip nói cái mấy vụ open form này về nguyên tắc là tạm OK, nhưng nó hổng có giống cái ý của bạn glasseggs là từ Front end, có cái nút, mở cái access khác để change pass cho cái front end.

Cho rằng là trước khi change đã cho quit cái front end rồi, nhưng khi mở cái access mới, thì cái access này có thể chỉ chứa 1 form duy nhất để change pass thôi. Và cái ******* form của nó chính là cái form change pass này để khi thằng access thứ hai nó run thì cái form changepass nhảy ra luôn.

Lúc đó, hãy để cho người ta nhập cái old pass, và 2 cái pass mới (new pass và confirm pass). Sau khi người ta nhấn nút Change thì mới bắt đầu làm:

Mở cái front end bằng old pass. Nếu error thì báo lỗi cho người ta biết, bắt người ta nhập lại.
Nếu mở được rồi thì sau đó so 2 cái new pass và confirm pass. Nếu 2 cái này match với nhau thì cho đổi pass. Không thì báo lỗi.

Công việc là thế, bạn glasseggs tự chế code cho mình sao cho phù hợp.
 
Ðề: Đặt password cho Front End bằng VB

Chú chip nói cái mấy vụ open form này về nguyên tắc là tạm OK, nhưng nó hổng có giống cái ý của bạn glasseggs là từ Front end, có cái nút, mở cái access khác để change pass cho cái front end.

Cho rằng là trước khi change đã cho quit cái front end rồi, nhưng khi mở cái access mới, thì cái access này có thể chỉ chứa 1 form duy nhất để change pass thôi. Và cái ******* form của nó chính là cái form change pass này để khi thằng access thứ hai nó run thì cái form changepass nhảy ra luôn.

Lúc đó, hãy để cho người ta nhập cái old pass, và 2 cái pass mới (new pass và confirm pass). Sau khi người ta nhấn nút Change thì mới bắt đầu làm:

Mở cái front end bằng old pass. Nếu error thì báo lỗi cho người ta biết, bắt người ta nhập lại.
Nếu mở được rồi thì sau đó so 2 cái new pass và confirm pass. Nếu 2 cái này match với nhau thì cho đổi pass. Không thì báo lỗi.

Công việc là thế, bạn glasseggs tự chế code cho mình sao cho phù hợp.

Cái đỏ đỏ em có hướng dẫn mở Access từ 1 Access đó bác:

Đây nè bác:
Cách 2: Dùng ứng dụng access

Từ access ứng gọi file access changePass

Dim accObj as New Access.Application
accObj.OpenCurrentDatabase "DataPath",False,"Password"
accObj.DoCmd.OpenForm("Formbatky có gắn timer để gọi lệnh đổi pass", acNormal)
Application.Quit 'Thoat khoi ung dung để thực hiện việc đổi Pass cho nó.

Việc gọi Form ChangePass từ đây hay thiết lập ******* từ bên kia là tương đương.

Nhưng khi gọi Access ChangePass lên thì cài dòng code Application.Quit nó chưa thực thi, vì vậy bên kia phải dùng Timer để tách luồng xử lý ra. Lúc đầu khi đổi pass chắc chắn ko được vì cái front end chưa quit được. Khi sự kiện Ontime xảy ra đầu tiên chắc chắn sẽ nhận được lỗi: Bạn ko thê đổi pass cho 1 data shared. <-- Toàn bộ code đang xảy ra bên ChangePasss, kết thúc sự kiện Ontime trả về code ngay tại dòng lệnh Application.Quit của Front End.

Lúc này Front End mới hoàn toàn Quit, và ChangePass vẫn trường trú trên bộ nhớ để chờ Ontime kế tiếp để hiển thị InputBox nhập vào các thông số cần thiết.

Trên kia em cũng có nhấn mạnh rằng, không thể mở giao diện 1 Form Access cho người dùng nhập liệu thông qua Access.Application được, vì vậy mới dùng đến hạ sách cuối cùng là InputBox.

PS. Nếu em là người viết theo yêu cầu của bác chủ topic, em ko dùng Access Open Access mà viết 1 cái bằng VB6 cho nó khoẻ :xinloinhe:
 
Ðề: Đặt password cho Front End bằng VB

Nói chung là thế. :xinloinhe:
Nhưng mà nói riêng thì không thích làm như thế bao giờ.
Vì như chú chip nói, nó liên quan đến xử lý thread, mà cái này thì Access No OK.
Thôi, tốt nhất là khỏi đổi chi cho nó mệt. :runcamcap:
 
Ðề: Đặt password cho Front End bằng VB

Nói chung là thế. :xinloinhe:
Nhưng mà nói riêng thì không thích làm như thế bao giờ.
Vì như chú chip nói, nó liên quan đến xử lý thread, mà cái này thì Access No OK.
Thôi, tốt nhất là khỏi đổi chi cho nó mệt. :runcamcap:

Ơ ơ, rốt cục làm cho đã rồi bác quyết là khỏi cần đổi pass, hay nhở :giandu:
Nói cho vui thôi chứ mấy cái vụ này bây giờ nó bẻ xả láng cả rồi, phòng người ngay chứ ko phòng nổi kẻ gian :runcamcap:

Hem biết mình thuộc xì tai nào nhỉ?
 
Ðề: Đặt password cho Front End bằng VB

Nói cho vui thôi chứ mấy cái vụ này bây giờ nó bẻ xả láng cả rồi, phòng người ngay chứ ko phòng nổi kẻ gian

Cái này hoàn toàn chính xác. Bản thân file Access nói riêng và các file Office nói chung đã cài pass người ta cũng chí cần chưa tới...1phút đã mở được pass của nó rồi, thậm chi` cả pass của VBA trong file
Các phần mềm bị ***** cũng là thế
Thân
 
Ðề: Đặt password cho Front End bằng VB

Ơ ơ, rốt cục làm cho đã rồi bác quyết là khỏi cần đổi pass, hay nhở :giandu:
Nói cho vui thôi chứ mấy cái vụ này bây giờ nó bẻ xả láng cả rồi, phòng người ngay chứ ko phòng nổi kẻ gian :runcamcap:

Hem biết mình thuộc xì tai nào nhỉ?

Nói cho công bằng, thẳng thắn là: anh Phật thuộc cả hai. :xinloinhe:
Còn chú chip thuộc sì-tai nào thì tùy.

Khóa kiểu nào, xì-cu-ra-ty cỡ nào cũng bị chơi mà. Hãy nhìn mấy đại gia kìa, bị bẻ tùm lum. Mà soft của người ta là soft xịn, soft của mình (cá nhân anh Phật thôi, không dám nói của người khác) là soft ghẻ. Soft xịn còn không đỡ nổi, thì huống chi mấy cái soft ghẻ.
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top