-
Import dữ liệu từ database có pass
Minh Tiên > 16-01-15, 11:10 PM
Nhờ các Pro chỉ giáo:
Tiên có 1 Function dùng để Import các table từ 1 database có pass, lâu nay chạy trên access 2007 0k.
Hôm nay chạy trên access 2013 cứ yêu cầu nhập pass mỗi khi Import xong 1 table.
Function như sau:
Mã:Function ImportTableFromBackupDB(strTableList As String, ByVal FilePathName As String)
Dim i As Long
Dim sTableName As String
Dim dbs As DAO.Database
Set dbs = OpenDatabase(FilePathName, False, False, "Ms Access" & ";pwd=a123")
For i = 1 To DMax("[TableID]", strTableList)
sTableName = DLookup("[TableName]", strTableList, "[TableID]=" & i & "")
DoCmd.TransferDatabase acImport, "Microsoft Access", FilePathName, acTable, sTableName, sTableName
Next
Set dbs = Nothing
End Function
Nhờ các pro chỉ giúp bị lỗi chỗ nào và cách khắc phục.
Cảm ơn nhiều ! -
RE: Import dữ liệu từ database có pass
MTNQ > 17-01-15, 01:30 PM
DoCmd.TransferDatabase không hỗ trợ password, bạn dùng DoCmd.CopyObject
link tham khảo:
http://www.experts-exchange.com/Database...29963.html
Mã:Function ImportPasswordedDatabase()
' copies all tables from a passworded database into this database
Dim tdf As DAO.TableDef
Dim appacc As Object
Dim db As Database
Set appacc = CreateObject("Access.Application")
With appacc
.AutomationSecurity = 1
.OpenCurrentDatabase "C:\CopyFromDatabase.accdb", False, "YourPassword"
End With
For Each tdf In appacc.CurrentDb.TableDefs
If Left(tdf.Name, 4) <> "msys" Then
appacc.DoCmd.CopyObject "c:\CopyToThisDb.accdb", , acTable, tdf.Name
Else
'do nothing
End If
Next tdf
appacc.CloseCurrentDatabase
Set appacc = Nothing
' next line doesn't seem to work
'CurrentDb.TableDefs.Refresh
Application.RefreshDatabaseWindow
End Function
Ghi chú: code trên mình chưa test, bạn test thử nha -
RE: Import dữ liệu từ database có pass
MTNQ > 17-01-15, 04:29 PM
à mình vừa nhớ ra trước đây có đọc bài viết của bác Noname về xóa mật khẩu CSDL, thao tác xong thì đặt lại mật khẩu cũ, sao không áp dụng vào trường hôp này nhỉ
Mã:Function ImportTableFromBackupDB(strTableList As String, ByVal FilePathName As String)
Dim i As Long
Dim sTableName As String
Dim dbs As DAO.Database
Set dbs = DBEngine.OpenDatabase(FilePathName, True, False, ";pwd=a123")
dbs.NewPassword "a123", ""
For i = 1 To DMax("[TableID]", strTableList)
sTableName = DLookup("[TableName]", strTableList, "[TableID]=" & i & "")
DoCmd.TransferDatabase acImport, "Microsoft Access", FilePathName, acTable, sTableName, sTableName
Next
dbs.NewPassword "", "a123"
dbs.Close
Set dbs = Nothing
End Function -
RE: Import dữ liệu từ database có pass
Minh Tiên > 17-01-15, 05:25 PM
Chào MTNQ !
Function của mình lúc chạy lúc không như thời tiết mưa nắng thế. Chiều nay thì cũng Function này chạy trên acc2013 thì chạy vi vu. Hôm qua thì đòi pass nheo nhéo ! Ko biết cái anh Acc của mình kiểu gì nữa.
À mình sẽ test theo Function của bạn và Bác Noname xem thế nào rồi báo cáo sau !
Cảm ơn bạn đã giúp.
Thân ! -
RE: Import dữ liệu từ database có pass
Minh Tiên > 17-01-15, 05:44 PM
Báo cáo làm theo cách xóa pass ở bài 3 không được bạn MTNQ ơi !
Dùng Function của bạn ở bài 3 bị báo lỗi: File đã có người dùng rồi ! Nên không chạy được.
Bạn có cách nào khác không ?
Function của mình mới test lại thì lại đòi pass nheo nhéo nữa rồi.
Để mình nghiên cứu theo bài 2 của bạn thử xem sao.
Cảm ơn bạn ! -
RE: Import dữ liệu từ database có pass
MTNQ > 17-01-15, 06:23 PM
bài 3 mình đã test rùi ok mà, bạn copy code mình đưa và chạy thử xem?
Chú ý dòng này nhé:
Set dbs = DBEngine.OpenDatabase(FilePathName, True, False, ";pwd=a123") -
RE: Import dữ liệu từ database có pass
Minh Tiên > 17-01-15, 08:42 PM
Chào MTNQ !
Mình đã test lại bài 3 của bạn.
Bỏ 2 dòng xóa pass và đặt lại pass là OK !
Cảm ơn bạn nhiều !