Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Установить пароль на БД в VB2005 Добавлено: 05.05.08 19:43  

Автор вопроса:  Abriel
Здравствуйте! Перечитал много на эту тему для VB 6.0! Чтобы установить (изменить, удалить) пароль на базу Access в VB 6.0 используя DAO нужно сделать так:
Dim DB As Data
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.0;Data 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 код ошибки возникающей при вводе неправильного пароля, а не при других исключениях или ситуациях?
Try
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
Но рано или поздно ему понадобится вызвать Compact или Repair. На этот случай тоже что то можешь предложить?

ну в этих случаях либо 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.0;Data Source=" & SourceFilename
            Dim jro As Object = CreateInstance(GetTypeFromProgID("JRO.JetEngine";))
            Dim Params As Object() = _
                New Object() {Connection, "Provider=Microsoft.Jet.OLEDB.4.0;Data 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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам