Cách tạo form để nhập mật khẩu ?

  • Thread starter nguyenhuykhoi
  • Ngày gửi
N

nguyenhuykhoi

Guest
20/8/05
170
0
16
52
TPHCM
Mình có 1 file quản lý thu chi. Nay mình muốn tạo ra 1 form mà người dùng phải nhập mật khẩu thì mới sử dụng file này được. Xin các bạn chỉ cách dùm
Cảm ơn nhiều
 
Khóa học Quản trị dòng tiền
Y

Yeudoi

Trung cấp
29/9/05
88
0
6
Hoi An Quang Nam
Bạn vào thư viện download file Thư Viện về tham khảo cách tạo password bằng form.
 
N

nguyenhuykhoi

Guest
20/8/05
170
0
16
52
TPHCM
To Yeudoi : Mình đã download file Quản lý thư viện rồi nhưng cái password làm mình bó tay không tham khảo được. Xin bạn cho mình User name và password
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
Cho hỏi ké ở đây chút nha!

Tôi muốn hỏi các vị cao thủ vấn đề sau:
Tôi muốn dữ liệu của mình được lưu tại access, VD TableKhHang( [TT], [MaKH], [DChi], [TKhoan ] .. .) từ form của Excel thì macro phải trải qua bao nhiêu giai đoạn vậy các vị? Giúp hướng đi với nha!:dance2:
Cảm ơn trước!
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
49
Hà Nội
www.bluesofts.net
HongViet nói:
Tôi muốn hỏi các vị cao thủ vấn đề sau:
Tôi muốn dữ liệu của mình được lưu tại access, VD TableKhHang( [TT], [MaKH], [DChi], [TKhoan ] .. .) từ form của Excel thì macro phải trải qua bao nhiêu giai đoạn vậy các vị? Giúp hướng đi với nha!:dance2:
Cảm ơn trước!
Để làm được việc trên bạn phải dùng kỹ thuật ADO. ADO cho phép bạn truy cập và thay đổi các loại CSDL với nhau.
Bạn tìm đọc các bài viết liên quan tới ADO nhé.
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
Chuyên đề

HongViet nói:
Tôi muốn dữ liệu của mình được lưu tại access, VD TableKhHang( [TT], [MaKH], [DChi], [TKhoan ] .. .) từ form của Excel thì macro phải trải qua bao nhiêu giai đoạn vậy các vị?
To: HongViet,
Để trả lời cho câu hỏi của bạn, tôi xin dùng kỹ thuật ADO để connect với Database là Access. Các bước có thể tóm tắt các bước như sau:
1. Tạo một biến Public, connection
2. Khi bạn mở file excel thì bạn connect với Database. Sau đó đóng connection này lại. Bạn sẽ không giải phóng biến này (i.e set bConnection=nothing) trước khi bạn kết thúc thao tác (thông thường bạn giải phóng biến này khi đóng file Excel lại)
3. Mỗi khi muốn thao tác (Update, Edit, Delete,...) với các bảng của Database thì bạn lại connect với database qua biến connection, thực hiện thao tác và rồi đóng connection này lại.
4. Giải phóng biến connection.

Theo tôi đó là các bước căn bản. Các bước căn bản trên chúng ta còn có thể phân tích thành các bước nhỏ tùy thuộc vào ứng dụng của bạn.
Ví dụ trước khi bạn connect với database bạn phải kiểm tra đường dẫn, kiểm tra sự tồn tại của database. Nếu dùng ADO chúng ta có thể thao tác với hầu hết các cơ sở dữ liệu khác như: SQL Server, Oracle, Foxpro, Access, Excel, File text,...
Sau khi kiểm tra sự tồn tại của database, chúng ta sẽ connect với chúng. Khi connect với chúng, tùy thuộc vào lọai database mà chúng ta phải dùng các chuổi connection khác nhau. Sau đây là một ví dụ connect với database.

Public Sub ConnectToDatabase()
Const msMODULE As String = "MainModule" 'Module name
Const sSOURCE As String = "ConnectToDatabase" ' Sub name
Dim sConnect As String
Dim sPath As String
Dim lAttempt As Long
'Dim rsData As ADODB.Recordset, sSQL As String
On Error GoTo ErrorHandler
'Get the database path (same as Active Workbook)
sPath = ActiveWorkbook.Path
If Right$(sPath, 1) <> "\" Then sPath = sPath & "\"
sPath = sPath & DatabasePath
'Check the exist of the file
If Not FileExists(sPath) Then
bConnected = False
MsgBox "The file " & sPath & " is not exist! Pls check!", vbOKOnly, "Notice"
GoTo ErrorExit
End If
'Check if the connection has creased then exit sub
If bConnected Then
MsgBox "The connection has creased!", vbOKOnly, "Notice"
GoTo ErrorExit
End If
Set gcnAccess = New ADODB.Connection
With gcnAccess
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Jet OLEDB:Database Password") = "passwordcuaban"
.Mode = adModeReadWrite
.CommandTimeout = 100
.Open "Data Source=" & sPath
End With

bConnected = True
'Close the connection to enable connection pooling
gcnAccess.Close
ErrorExit:
Application.StatusBar = False

Exit Sub

ErrorHandler:

'We will try to make the connection 3 times before bailing out
If lAttempt < 3 And gcnAccess.Errors.Count > 0 Then
If gcnAccess.Errors(0).NativeError = 17 Then
Application.StatusBar = "Retrying connection..."
lAttempt = lAttempt + 1
Resume
End If
End If
If bCentralErrorHandler(msMODULE, sSOURCE, , False) Then
Stop
Resume
Else
Resume ErrorExit
End If

End Sub
 
levanduyet

levanduyet

Welcome
16/10/04
537
19
18
HCM
my.opera.com
tiếp theo

Ví dụ về một thủ tục lấy giá vật tư từ bảng TB_MAVATTU.
_Đầu tiên tôi xét biến bConnected xem là True hay False (i.e: đã connect với Database hay chưa) nếu đã connect với database thì tôi bắt đầu thao tác với bảng dữ liệu mà tôi cần. Ở đây tôi dùng câu lệnh truy vấn sSQL để làm việc này.
_Sau đó tôi xóa vùng trong worksheet trước khi tôi xuất dữ liệu ra.
_Dùng câu lệnh SQL để kết nối và lấy dữ liệu qua recordset. Nếu có dữ liệu thì xuất, nếu không thì thông báo là không có dữ liệu thỏa điều kiện của bạn.
Các bạn có thể dùng CopyFromRecordset rsData để dán dữ liệu ra thay vì bạn phải quét qua từng record như trong ví dụ này. Trong trường hợp bạn muốn xuất dữ liệu ra có định dạng hay bạn còn muốn thực hiện điều gì khác nữa thì bạn hãy làm như trong ví dụ sau đây của tôi.

Sub RMPriceListUpdate()
Dim rsData As New ADODB.Recordset
Dim lRecordCount As Long, r As Long
Dim sSQL As String
Dim rngRange As Range
On Error GoTo RMPriceListUpdate_Error
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'If the format correct then action
If bConnected = False Then
Call ConnectToDatabase
End If
'Then get the data
If bConnected Then
gcnAccess.Open
'Build the sSQL
sSQL = "SELECT Material_Code, Material_Unit, " & _
"Description, Standard_Cost, Latest_Cost, Average_Cost " & _
"FROM TB_MAVATTU " & _
"ORDER BY Material_Code;"
'Clear the report first
Set rngRange = Range("RMPriceList4Delete")
'Clear the contents and the outline only
rngRange.ClearContents
'Open the recordset

rsData.Open sSQL, gcnAccess, adOpenStatic, adLockOptimistic, adCmdText
lRecordCount = rsData.RecordCount
If lRecordCount = 0 Then
MsgBox "There are no Products code, Pls check your database!", vbOKOnly, "Notice"
GoTo ErrorExit
End If

Do While Not rsData.EOF
'You can filter the data from here
With Application.Worksheets("RAWMATERIALSPRICELIST").Range("A3")
.Offset(r, 0) = rsData.Fields("Material_Code").Value
.Offset(r, 1) = rsData.Fields("Material_Unit").Value
.Offset(r, 2) = rsData.Fields("Description").Value
.Offset(r, 3) = rsData.Fields("Standard_Cost").Value
.Offset(r, 4) = rsData.Fields("Latest_Cost").Value
.Offset(r, 5) = rsData.Fields("Average_Cost").Value
End With
rsData.MoveNext
r = r + 1
' .CopyFromRecordset rsData
Loop
End If
Call NameRange("RAWMATERIALSPRICELIST", "tbRMPriceList", 3, 1, (r + 2), 6)
ErrorExit:
Set rngRange = Nothing
Set rsData = Nothing
If bConnected Then
gcnAccess.Close
bConnected = False
End If
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Exit Sub

RMPriceListUpdate_Error:

If bCentralErrorHandler("MainModule", "RMPriceListUpdate", , True) Then
Stop
Resume
Else
Resume ErrorExit
End If

End Sub

Với vài dòng giải thích, tôi nghĩ một phần nào giải đáp thắc mắc của bạn.

Tôi hy vọng, tôi sẽ có lớp chia sẻ "Kỹ thuật ADO" trong một lớp chuyên đề gần đây.
Thân,

Lê Văn Duyệt.
 

Xem nhiều