• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bioshock

Como aceder a Servidor com Palavra pass?

21 mensagens neste tópico

Boas, é o seguinte:

Eu tenho a minha base de dados alojada num servidor em rede.

Para as pessoas acederem à rede/pasta tem de por o seu Username e Password.

O problema está na Base de Dados, pois o programa detecta que é preciso fazer Login no Servidor e não corre a Base de Dados.

Para a base de dados tenho o seguinte código:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\192.168.0.130\bd\BaseDeDados.mdb';Persist Security Info=True;"

Obrigado pessoal!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Após umas pesquisas encontrei estas possibilidades (não testei nenhuma):

Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" _
( ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, _
  ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer

Public Declare Function WNetCancelConnection2 Lib "mpr" Alias   "WNetCancelConnection2A" _
    (ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer

    <StructLayout(LayoutKind.Sequential)> _
Public Structure NETRESOURCE
        Public dwScope As Integer
        Public dwType As Integer
        Public dwDisplayType As Integer
        Public dwUsage As Integer
        Public lpLocalName As String
        Public lpRemoteName As String
        Public lpComment As String
        Public lpProvider As String
    End Structure

Public Const ForceDisconnect As Integer = 1
Public Const RESOURCETYPE_DISK As Long = &H1

Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String) As Boolean

        Dim nr As NETRESOURCE
        Dim strUsername As String
        Dim strPassword As String

        nr = New NETRESOURCE
        nr.lpRemoteName = UNCPath
        nr.lpLocalName = DriveLetter & ":"
        strUsername = Nothing '(add parameters to pass this if necessary)
        strPassword = Nothing '(add parameters to pass this if necessary)
        nr.dwType = RESOURCETYPE_DISK

        Dim result As Integer
        result = WNetAddConnection2(nr, strPassword, strUsername, 0)

        If result = 0 Then
            Return True
        Else
            Return False
        End If
    End Function

Public Function UnMapDrive(ByVal DriveLetter As String) As Boolean
    Dim rc As Integer
        rc = WNetCancelConnection2(DriveLetter & ":", 0, ForceDisconnect)

        If rc = 0 Then
            Return True
        Else
            Return False
        End If

    End Function

ou

System.Diagnostics.Process.Start("net.exe", "use K: \\Server\URI\path\here /USER:<username> <password>" )

Neste apenas substituis as password, username e path e confirma que a letra para a unidade está disponível, para desligar:

System.Diagnostics.Process.Start("net.exe", "use /delete K:" )

Basicamente o que estes códigos Montam a tua pasta remota localmente no computador, depois para lhe aceder basta usar a letra da drive que escolheste para o efeito.

códigos encontrados em : stackoverflow.com

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá weasel, antes de mais obrigado!

Vou tentar fazer isso que me disseste e depois mando-te um feedback.

Só vou conseguir falar contigo na Segunda Feira, não há problema?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive aqui com uns pequenos problemas, devido a código que tinha a mais e fazia conflito, contudo já consegui resolver, fica aqui a resolução:

System.Diagnostics.Process.Start("net.exe", "use P:\\192.168.0.130\bd\BaseDeDados.mdb /USER:<12345> <12345>")
        caminho = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='BaseDeDados.mdb';Persist Security Info=True;"

Obrigado Weasel, funcionou perfeitamente!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Erro meu, afinal não funciona, dá-me o seguinte erro:

The Microsoft Jet database engine cannot open the file '\\192.168.0.130\bd\BaseDeDados.mdb'.  It is already opened exclusively by another user, or you need permission to view its data.

Nesta linha de código:

Me.MeioEnvioTableAdapter.Fill(Me.BaseDeDadosDataSet.MeioEnvio)

Traduzindo: O mais provavel é que este código, que tenho no form Load, não esteja a fazer efeito..

 System.Diagnostics.Process.Start("net.exe", "use P:\\192.168.0.130\bd\BaseDeDados.mdb /USER:<12345> <12345>")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que não percebeste a lógica da coisa, o que tu queres é:

System.Diagnostics.Process.Start("net.exe", "use K: \\192.168.0.130\bd\ /USER:<12345> <12345>" )

caminho = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='K:\BaseDeDados.mdb';Persist Security Info=True;"

Básicamente o que isto faz é criar uma drive no teu computador com ligação à pasta remota, depois para abrires a base de dados basta por a Drive que determinaste neste caso K: e a base de dados, k:\BaseDeDados.mdb

No fim podes fazer o "unmont"

System.Diagnostics.Process.Start("net.exe", "use /delete K:" )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah mas não é isso que eu quero..

O que eu quero é connectar-me a uma Pasta de um Server Local (Que tenho na empresa).

Para eu aceder a esse Server Local preciso de inserir um Username e uma Password e eu queria que ao arrancar o meu programa, ele automaticamente fizesse isso.

Porque se eu não fizer isso, não consigo arrancar com o programa, preciso de ir ao Executar : \\server\ e por lá o username e password, fiz-me entender? Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu percebi, e é isso mesmo que o código faz, acede ao server com as tuas credenciais e disponibiliza à aplicação.

Testa isso como eu disse e diz qq coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dá-me este erro:

'K:\BaseDeDados.mdb' is not a valid path.  Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.

Nesta linha de código:

Me.NomeTableAdapter.Fill(Me.BaseDeDadosDataSet.Nome)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mete este código

System.Diagnostics.Process.Start("net.exe", "use K: \\192.168.0.130\bd\ /USER:<12345> <12345>" )

(ou antes de fazer System.Diagnostics.Process.Start("net.exe", "use /delete K:" ))

Vai ao "O meu computador" e vê se foi criada a unidade K:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mete este código

System.Diagnostics.Process.Start("net.exe", "use K: \\192.168.0.130\bd\ /USER:<12345> <12345>" )

(ou antes de fazer System.Diagnostics.Process.Start("net.exe", "use /delete K:" ))

Vai ao "O meu computador" e vê se foi criada a unidade K:

Este código:

System.Diagnostics.Process.Start("net.exe", "use K: \\192.168.0.130\bd\ /USER:<12345> <12345>" )

É no Form Load que o coloco, correcto?

Quando executo o programa, fui ao Meu Computador, mas não apareceu lá nenhuma Unidade K:

Este código:

System.Diagnostics.Process.Start("net.exe", "use /delete K:"

Utilizo no botão Sair, mas nem chega a ser executado, visto que o programa quebra logo ao inicio.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz o seguinte para veres o que se está a passar vais ao Menu Iniciar -> Executar e escreves CMD

Aí executas o comando:

net.exe USE K: \\192.168.0.130\bd /USER:teu_username tua_password

Testei aqui e funcionou

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também funcionou perfeitamente..

Form Load:

 System.Diagnostics.Process.Start("net.exe", "use K:\\192.168.0.130\bd\ /USER:12345 12345")
        Caminho = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='K:\BaseDeDados.mdb';Persist Security Info=True;"

Me.NomeTableAdapter.Connection.ConnectionString = Caminho
        Me.NomeTableAdapter.Fill(Me.BaseDeDadosDataSet.Nome)

E ele dá-me aquele erro que te disse, na última linha de código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

RESOLUÇÃO DO PROBLEMA

Se abrires o K:\ no teu computador tá lá dentro o ficheiro BaseDeDados.mdb ?

Quando executas o programa ele cria a unidade K: ?

Edit:

Atenção!

Na path não podias terminar com \ (aqui faz com que dê erro) e faltava um espaço entre K: e a path é assim:

System.Diagnostics.Process.Start("net.exe", "USE K: \\192.168.0.130\bd /USER:12345 12345")

Outro detalhe se a tua rede usarem domínio o username terá de ser dominio\username

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se abrires o K:\ no teu computador tá lá dentro o ficheiro BaseDeDados.mdb ?

Quando executas o programa ele cria a unidade K: ?

Se abrir o K:\ ? (Estás-te a referir ao IP?)

Caso abra o IP(servidor Local) Tem lá uma pasta que diz: BD, e dentro dessa pasta está a minha BaseDeDados.mdb

Antes de executar o programa abri o "Meu Computador" » Executei o Programa » Fui ver se via ele a criar a Unidade K, mas não apareceu nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se abrires o K:\ no teu computador tá lá dentro o ficheiro BaseDeDados.mdb ?

Quando executas o programa ele cria a unidade K: ?

Edit:

Atenção!

Na path não podias terminar com \ (aqui faz com que dê erro) e faltava um espaço entre K: e a path é assim:

System.Diagnostics.Process.Start("net.exe", "USE K: \\192.168.0.130\bd /USER:12345 12345")

Outro detalhe se a tua rede usarem dominio o username terá de ser dominio\username

Aleluia, era o dominio que faltava..

Que trabalheira, muito obrigado pela ajuda, já está a funcionar!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este código está óptimo mas tenho duas questões.

Será possível fazer isto sem se ver a drive partilhada? Fazer o mesmo mas sem ser visível para o utilizador?

É necessário fazer sempre isto ou após fazê-lo uma vez, já não é necessário?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que isto faz é criar essa drive sempre que ele inicia o programa, quando o encerra, ele apaga a drive. Penso que não dá para que seja oculta ao utilizador

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que isto faz é criar essa drive sempre que ele inicia o programa, quando o encerra, ele apaga a drive. Penso que não dá para que seja oculta ao utilizador

Ok, obrigado. Menos mal, de qualquer forma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora