Страница: 1 |
Страница: 1 |
Вопрос: Установить пароль на БД в VB2005
Добавлено: 05.05.08 19:43
Автор вопроса:
Abriel
Здравствуйте! Перечитал много на эту тему для VB 6.0! Чтобы установить (изменить, удалить) пароль на базу Access в VB 6.0 используя DAO нужно сделать так:
Dim OldPwd As String
Dim NewPwd As String
OldPwd=""
NewPwd="123"
DB.Database.NewPassword OldPwd, NewPwd
А каким образом это осуществить с помощью VB .NET 2005, используя OleDB провайдер???
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа: ника
Вопросов: 1
Ответов: 111
Профиль | | #1
Добавлено: 05.05.08 21:27
Провайдер в данном случае роли не играет, он лишь предоставляет связь с БД. Фишка в том, что NET не предоставляет прямого доступа к Jet Engin и его объектам (в данном случае к объекту Database). Поэтому в данном случае, на мой вгляд, есть только 1 выход - рефлексия
Номер ответа: 2
Автор ответа: BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #2
Добавлено: 05.05.08 22:59
Xex,
Dim cn As OleDbConnection = New OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0ata Source=G:\VS.Net\nwind.mdb;Jet OLEDB:Database Password=OldPassword;Mode=Share Deny Read|Share Deny Write;"
cn.Open
Dim cmd As OleDbCommand = New OleDbCommand
cmd.Connection = cn
cmd.CommandText = "ALTER DATABASE PASSWORD [newPassword][OldPassword]" 'меняем пассворд
cmd.ExecuteNonQuery
cn.Close
если старый пассворд пустой, то оставь значение Null вместо [OldPassword] (удали также кв. кавычки)
Номер ответа: 3
Автор ответа: Abriel
Вопросов: 18
Ответов: 37
Профиль | | #3
Добавлено: 06.05.08 03:03
Очень благодарен за ответы! Да, и пример BUMM ® превосходно работает! Очень признателен!
Номер ответа: 4
Автор ответа: ника
Вопросов: 1
Ответов: 111
Профиль | | #4
Добавлено: 06.05.08 08:03
BUMM, респект! Прикольный способ. Но рано или поздно ему понадобится вызвать Compact или Repair. На этот случай тоже что то можешь предложить?
Номер ответа: 5
Автор ответа: Abriel
Вопросов: 18
Ответов: 37
Профиль | | #5
Добавлено: 06.05.08 20:20
А мне объясните, что за Compact и Repair? Да, и еще вопросик: когда происходит проверка подключения и обработка ошибки, как именно определить в VB2005 код ошибки возникающей при вводе неправильного пароля, а не при других исключениях или ситуациях?
CONN.Open()
Catch ex As Exception
If Err.Number = 5 Then MsgBox "Invalid Password"
Finally
CONN.Close()
End Try
Дело в том, что при любом сбое подключения Err.Number = 5, а описание ошибки разное. Что делаю не так?
Номер ответа: 6
Автор ответа: BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #6
Добавлено: 06.05.08 21:37
ну в этих случаях либо JRO либо DAO, тут простыми query не обойтись. В обоих случаях оригинальная база удаляется и переписывается. никакое соединение этого не переживет.
Dim db As New DAO.DBEngine()
db.CompactDatabase(Old_Path,New_Path)
File.Delete(Old_Path)
File.Move(New_Path, Old_Path)
а вот как ты хотела, через рефлексию )))
Private Function CompressAccessDataBase(ByVal SourceFilename As String, ByVal NewFilename As String) As Boolean
Try
Dim Connection As String = "Provider=Microsoft.Jet.OLEDB.4.0ata Source=" & SourceFilename
Dim jro As Object = CreateInstance(GetTypeFromProgID("JRO.JetEngine")
Dim Params As Object() = _
New Object() {Connection, "Provider=Microsoft.Jet.OLEDB.4.0ata Source=" & _
SourceFilename & _
".tmp ;Jet OLEDB:Engine Type=5"}
jro.GetType().InvokeMember("CompactDatabase", BindingFlags.InvokeMethod, Nothing, jro, Params)
If Me.IsChecked Then
File.Delete(SourceFilename)
End If
File.Move(SourceFilename & ".tmp", NewFilename)
Marshal.ReleaseComObject(jro)
jro = Nothing
If File.Exists(NewFilename) Then
Return True
Else
Return False
End If
Catch ex As Exception
MessageBox.Show(ex.Message.ToString(), "Info"
End Try
Return False
End Function
Номер ответа: 7
Автор ответа: BUMM ®
Вопросов: 8
Ответов: 482
Профиль | | #7
Добавлено: 06.05.08 21:39
да, забыл:
Option Strict On
Option Explicit On
Imports System.Activator
Imports System.Type
Imports System.Runtime.InteropServices
Imports System.IO
Imports System.Reflection
Номер ответа: 8
Автор ответа: ника
Вопросов: 1
Ответов: 111
Профиль | | #8
Добавлено: 06.05.08 21:49
))
Номер ответа: 9
Автор ответа: ника
Вопросов: 1
Ответов: 111
Профиль | | #9
Добавлено: 06.05.08 21:52
BUMM ® еще один респект!
В данном случае я бы предпочла именно через рефлексию. Вариант с DAO - это работа через Interrop.. Это мало того тормоза, так еще и либу за собой таскать, которая создается при собавлении ссылки на DAO