OOP no VB: classe para conectar-se a recurso em rede

Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

OOP no VB: classe para conectar-se a recurso em rede

Abaixo vai o código fonte para você adicionar a um módulo de classe nomeado CConexao e um exemplo de como usá-lo para acessar um diretório compartilhado na rede.

Adicione um módulo de classe ao seu projeto, nomeie a classe como CConexao e insira o código abaixo ao módulo.

Option Explicit
Private Type NETRESOURCE
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
lpLocalName As String
lpRemoteName As String
lpComment As String
lpProvider As String
End Type

Private Const NO_ERROR = 0
Private Const CONNECT_UPDATE_PROFILE = &H1
Private Const RESOURCETYPE_DISK = &H1
Private Const RESOURCETYPE_PRINT = &H2
Private Const RESOURCETYPE_ANY = &H0
Private Const RESOURCE_CONNECTED = &H1
Private Const RESOURCE_REMEMBERED = &H3
Private Const RESOURCE_GLOBALNET = &H2
Private Const RESOURCEDISPLAYTYPE_DOMAIN = &H1
Private Const RESOURCEDISPLAYTYPE_GENERIC = &H0
Private Const RESOURCEDISPLAYTYPE_SERVER = &H2
Private Const RESOURCEDISPLAYTYPE_SHARE = &H3
Private Const RESOURCEUSAGE_CONNECTABLE = &H1
Private Const RESOURCEUSAGE_CONTAINER = &H2

Private Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long

Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long
'
Private NetR As NETRESOURCE
Public Conectado As Boolean


Public Function FazerConexao(Compartilhamento As String, Optional Conectar As Boolean = True, Optional Usuario As String = vbNullString, Optional PWD As String = vbNullString) As Boolean
10000 Dim ErrInfo As Long

10005 On Error GoTo ErrorHandler

10010 FazerConexao = False
10015 If Conectar Then
10020     NetR.dwScope = RESOURCE_GLOBALNET
10025     NetR.dwType = RESOURCETYPE_DISK
10030     NetR.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
10035     NetR.dwUsage = RESOURCEUSAGE_CONNECTABLE
10040     NetR.lpLocalName = vbNullString
10045     NetR.lpRemoteName = Compartilhamento

10050     ErrInfo = WNetAddConnection2(NetR, PWD, Usuario, CONNECT_UPDATE_PROFILE)

10055     If ErrInfo <> NO_ERROR Then
10060         MsgBox "Não foi possível fazer conexão de rede.", vbInformation, App.Title
10065         Err.Raise vbObjectError
10070     End If
10075     Conectado = True
10080     FazerConexao = True
10085 Else

               'abaixo, se quiser forçar a desconexão mesmo que tenha
               'alguém usando-a, use True no lugar de False
10090     ErrInfo = WNetCancelConnection2(Compartilhamento, CONNECT_UPDATE_PROFILE, False)
10095     If ErrInfo = NO_ERROR Then
10100         Conectado = False
10105         FazerConexao = True
10110     End If
10115 End If

10120 Exit Function
10125 ErrorHandler:
10130 Dim errnum As Long, errdesc As String, errsource As String
10135 errnum = Err.Number
10140 errdesc = Err.Description
10145 errsource = IIf(Left(Err.Source, 3) <> "em ", "em FazerConexao, linha: " & Erl, Err.Source)
10150 Err.Clear
10155 Err.Raise errnum, errsource, errdesc
End Function

Private Sub Class_Terminate()
    On Error Resume Next
    FazerConexao NetR.lpRemoteName, False
End Sub

Abaixo vai um exemplo de uso. Crie um novo projeto e adicione a classe CConexao a ele. No form1, inclua um botão de comando e o código abaixo. Onde está "\\Servidor\SharedDocs" modifique para um compartilhamento válido na sua rede. Se houver necessidade, informe a senha e identificação de usuário para o compartilhamento. 

Option Explicit
Private conn As CConexao


Private Sub Command1_Click()
If conn Is Nothing Then
    Set conn = New CConexao
End If
If conn.Conectado = False Then
    conn.FazerConexao "\\Servidor\SharedDocs", True,     "MeuIddeUsuario", "MinhaSenha"
    MsgBox Dir("\\Servidor\SharedDocs\*", vbNormal)
Else
Call conn.FazerConexao("\\Servidor\SharedDocs", False)
End If

End Sub