bioshock Posted June 19, 2009 at 03:27 PM Report Share #273636 Posted June 19, 2009 at 03:27 PM 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! Link to comment Share on other sites More sharing options...
Weasel Posted June 19, 2009 at 04:04 PM Report Share #273652 Posted June 19, 2009 at 04:04 PM 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 Knowledge to the masses Link to comment Share on other sites More sharing options...
bioshock Posted June 19, 2009 at 04:20 PM Author Report Share #273658 Posted June 19, 2009 at 04:20 PM 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. Link to comment Share on other sites More sharing options...
Weasel Posted June 19, 2009 at 05:53 PM Report Share #273673 Posted June 19, 2009 at 05:53 PM Claro que não há problema, desde que fique resolvido 😄 Knowledge to the masses Link to comment Share on other sites More sharing options...
bioshock Posted June 22, 2009 at 08:32 AM Author Report Share #274048 Posted June 22, 2009 at 08:32 AM 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! Link to comment Share on other sites More sharing options...
bioshock Posted June 22, 2009 at 01:31 PM Author Report Share #274124 Posted June 22, 2009 at 01:31 PM 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>") Link to comment Share on other sites More sharing options...
Weasel Posted June 22, 2009 at 04:23 PM Report Share #274164 Posted June 22, 2009 at 04:23 PM 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:" ) Knowledge to the masses Link to comment Share on other sites More sharing options...
bioshock Posted June 22, 2009 at 05:12 PM Author Report Share #274170 Posted June 22, 2009 at 05:12 PM 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. Link to comment Share on other sites More sharing options...
Weasel Posted June 22, 2009 at 05:41 PM Report Share #274182 Posted June 22, 2009 at 05:41 PM 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. Knowledge to the masses Link to comment Share on other sites More sharing options...
bioshock Posted June 23, 2009 at 08:27 AM Author Report Share #274299 Posted June 23, 2009 at 08:27 AM 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) Link to comment Share on other sites More sharing options...
Weasel Posted June 23, 2009 at 09:17 AM Report Share #274306 Posted June 23, 2009 at 09:17 AM 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: Knowledge to the masses Link to comment Share on other sites More sharing options...
bioshock Posted June 23, 2009 at 09:31 AM Author Report Share #274309 Posted June 23, 2009 at 09:31 AM 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. Link to comment Share on other sites More sharing options...
Weasel Posted June 23, 2009 at 09:46 AM Report Share #274317 Posted June 23, 2009 at 09:46 AM 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 Knowledge to the masses Link to comment Share on other sites More sharing options...
bioshock Posted June 23, 2009 at 09:57 AM Author Report Share #274319 Posted June 23, 2009 at 09:57 AM 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. Link to comment Share on other sites More sharing options...
Weasel Posted June 23, 2009 at 10:08 AM Report Share #274322 Posted June 23, 2009 at 10:08 AM 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 Knowledge to the masses Link to comment Share on other sites More sharing options...
bioshock Posted June 23, 2009 at 10:16 AM Author Report Share #274324 Posted June 23, 2009 at 10:16 AM 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. Link to comment Share on other sites More sharing options...
bioshock Posted June 23, 2009 at 10:46 AM Author Report Share #274328 Posted June 23, 2009 at 10:46 AM 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!! Link to comment Share on other sites More sharing options...
Weasel Posted June 23, 2009 at 11:15 AM Report Share #274338 Posted June 23, 2009 at 11:15 AM B) Knowledge to the masses Link to comment Share on other sites More sharing options...
zephirus Posted June 26, 2009 at 01:29 PM Report Share #275061 Posted June 26, 2009 at 01:29 PM 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? Link to comment Share on other sites More sharing options...
Weasel Posted June 26, 2009 at 02:05 PM Report Share #275067 Posted June 26, 2009 at 02:05 PM 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 Knowledge to the masses Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now