Usuário com melhor resposta
Problemas para acessar o SQL Server via Excel (VBA)

Pergunta
-
Olá a todos,
criei uma base no SQL Server, e pretendia acessá-la por meio do Excel usando VBA.
Tentei acessar de duas formas diferentes e em ambas obtenho erros.
A primeira forma é a seguinte
Sub Acesso() Dim caminho, provider, userid As String Dim sql As String caminho = "c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\base1.mdf" Set conexao = New ADODB.Connection conexao.provider = "Microsoft.Jet.OLEDB.4.0" conexao.ConnectionString = caminho conexao.Open Set tabela = New ADODB.Recordset End Sub
E obtenho o seguinte erro: The Microsoft Jet database engine cannot opne the file 'c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\base1.mdf'
It is already opened exclusivelu by another user, or you need permission to view its data.
Procurando em fóruns obtive a seguinte alternativa:
Sub GetDataFromADO2() 'Declare variables Set objMyConn = New ADODB.Connection Set objMyCmd = New ADODB.Command Set objMyRecordset = New ADODB.Recordset 'Open Connection objMyConn.ConnectionString = "Provider=SQLOLEDB.1;Password=;Persist Security Info=True;User ID= GARDE\gonzalesc;Initial Catalog= c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\base1.mdf; Data Source=GSAOW028;integrated security=sspi;" objMyConn.Open End Sub
GARDE\gonzalesc é meu nome de usuário na rede, e foi com ele que criei a base. sou inclusive dbo dessa base, me atribui todas as permissões possíveis.
Mesmo assim obtenho esse erro.
Cannot open database 'c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\base1.mdf'
requested by the login. The login failed
Tentei mudar ambos os códigos de várias formas, mas sempre volta uma mensagem de erro, variam um pouco uma da outra, mas sempre focam no mesmo tema, de que não tive o acesso negado.
Curioso é que eu consigo acessar as tabelas da base pelo Excel, usando o DATA>From SQL Server, e não tenho problema nenhum.... se meu usuário não tivesse acesso não conseguiria fazer isso não?
Alguém sabe o que tenho q fazer??
Obrigado!!
Respostas
-
Carlo,
Sua 2ª opção de conexão está "quase" correta. Você precisa saber exatamente com o DBA ou responsável pelo seu servidor do banco de dados que você quer acessar qual é o usuário e senha que você pode utilizar para efetuar esta tarefa no Excel.
Segue abaixo, o seu método de conexão com o trecho destacado, onde você precisa inserir o usuário e senha para acesso:
Sub GetDataFromADO2() 'Objetos Dim oConn as ADODB.Connection Set oConn = New ADODB.Connection 'Abrindo a Conexão 'oConn.ConnectionString = "Provider=SQLNCLI;Server=<SeuServidor>\<SeuInstancia>;Database=<Nome_Logico_do_Banco>;User ID=<USUÁRIO_DO_SQL>;Password=<Sua_senha>" 'Seu objeto vai ficar + ou - assim oConn.ConnectionString = "Provider=SQLNCLI;Server=127.0.0.1\SQLExpress;Database=base1;User ID=sa;Password=123456" oConn.Open End Sub
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:16
-
Olá Durval!
Obrigado por ajudar.
Vou ver com o pessoal do TI onde acho o endereço do servior\instancia.
Tentei colocar GSAOW de novo e obitive a mensagem: Login failed for user 'gonzalesc', teria outro login que deveria usar? fui que instalei o SQL Server Express na minha máquina, e em nenhum momento criei um usuário... Quando uso SQL Maintenece Server vejo que nos objetos users tem logins como dbo, guest.. e clicando no properties do dbo, o login que aparece é justamente GARDE\gonzalesc...
Mas vou dar uma olhada melhor aqui!
Obrigado!
Carlo,
No momento da instalação do SQL Express, você pode ter inserido uma senha. Utilize esta senha com o usuário "sa".
'Faça a conexão local desta forma oConn.ConnectionString = "Provider=SQLNCLI;Server=.\SQLExpress;Database=base1;User ID=sa;Password=<senha_informada_na_instalacao>"
Não esqueça de marcar todos os posts que te ajudaram na solução como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:16
-
Durval,
3 pontos:
1) Documentei toda a instalação por meio de screenshots, justamente para se tivesse feito algo assim poder lembrar. E em nenhum momento coloquei senhas. No passo da instalação "Database Engine Configuration" em Authentication mode selecionei 'Windows authentication mode' e em Specify SQL Server administrators selecionei eu, o administrador e alguns membros da minha área.
Tentei fazer o login com sa e a senha do adminstrador e nada, como meu login e minha senha do windowns e tabmém não, e por fim Administrator ( que é o login do adminstrador) e a senha dele, e nada.
Tentei os 3 logins acima sem senha e também não obtive sucesso...2) Quanto ao server, quando coloco o que você mandou ele carrega por um tempo, e retorna o erro de access denied ou que o server não existe. Quando coloco GSAOW no server, aparece o erro logo em seguida Login failed for user '(aque é qualquer usuário que coloco, sa, gozalesc, Garde\gonzalesc...)', parece que ele encontra o servidor, tenta fazer o login e é barrado, ao contrário de quando coloco ./SQLExpress, que parece não encontrar o servidor....
3) Notei que no campo 'Provider' voce coloca SQLNCLI, enquanto eu coloco SQLOLEDB, é alguma diferença de versão do SQL Server? quando coloquei SQLNCLI ocorre o erro de que ele não encontrou o provider...
Desculpe pelo incomodo e obrigado novamente!!
Carlo,
Estou aqui para te ajudar ! Só o "obrigado" com a sua "solução respondida" já vale.
Como você instalou só "Windows Authentication" eu recomendo você ter um cuidado especial, porque caso mude alguma configuração de seu usuário na rede, seu banco pode ficar inacessível, recomendo que você insira outro usuário da rede ou, se possível, altere o acesso do seu SQL Express para "SQL Authentication".
No caso do "Windows Authentication", sua string de conexão será um pouco diferente, apenas informando que sua conexão vai obter o usuário logado na máquina. Segue abaixo:
oConn.ConnectionString = "Provider=SQLNCLI;Server=.\SQLExpress;Database=base1;Trusted_Connection=Yes;"
Não esqueça de marcar todos os posts que te ajudaram na solução como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA - SQL Server 2012
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Editado Durval Ramos segunda-feira, 27 de janeiro de 2014 19:05 Ajuste de informacao
- Marcado como Resposta Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:14
-
Deu certo!!
A única mudança que fiz foi com relação ao provider e ao server, provicer deixei o que usava e server deixei GSAOW028, e deu certo!
Vou implantar as mudanças que você suegeriu!
Muito obrigado!!!
ps: Deixei marcado como resposta todas as suas respostas, pois dependendo do problema que a pessoa tiver acho que ela pode usar alguma das outras..- Marcado como Resposta Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:16
- Editado Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:17
Todas as Respostas
-
Carlos,
Boa tarde,
Se você esta usando seu usuário do windows, basta colocar a string abaixo, que já vai utilizar seu usuário.
Provider=SQLOLEDB;Data Source=ServerIPOrName;Initial Catalog=DatabaseName;Trusted_connection=yes;
Boa sorte,
AT_+
-
Olá Alexandre!
obrigado pela ajuda,
porém continuo apresentando mensagens de erro,
Cannot open database 'c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\base1.mdf'
requested by the login. The login failedSerá que tenho que mudar alguma coisa no SQL Server?
Obrigado!
-
Carlo,
Sua 2ª opção de conexão está "quase" correta. Você precisa saber exatamente com o DBA ou responsável pelo seu servidor do banco de dados que você quer acessar qual é o usuário e senha que você pode utilizar para efetuar esta tarefa no Excel.
Segue abaixo, o seu método de conexão com o trecho destacado, onde você precisa inserir o usuário e senha para acesso:
Sub GetDataFromADO2() 'Objetos Dim oConn as ADODB.Connection Set oConn = New ADODB.Connection 'Abrindo a Conexão 'oConn.ConnectionString = "Provider=SQLNCLI;Server=<SeuServidor>\<SeuInstancia>;Database=<Nome_Logico_do_Banco>;User ID=<USUÁRIO_DO_SQL>;Password=<Sua_senha>" 'Seu objeto vai ficar + ou - assim oConn.ConnectionString = "Provider=SQLNCLI;Server=127.0.0.1\SQLExpress;Database=base1;User ID=sa;Password=123456" oConn.Open End Sub
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:16
-
Olá Durval!
Obrigado por ajudar.
Vou ver com o pessoal do TI onde acho o endereço do servior\instancia.
Tentei colocar GSAOW de novo e obitive a mensagem: Login failed for user 'gonzalesc', teria outro login que deveria usar? fui que instalei o SQL Server Express na minha máquina, e em nenhum momento criei um usuário... Quando uso SQL Maintenece Server vejo que nos objetos users tem logins como dbo, guest.. e clicando no properties do dbo, o login que aparece é justamente GARDE\gonzalesc...
Mas vou dar uma olhada melhor aqui!
Obrigado!
- Editado Carlo Gonzales segunda-feira, 27 de janeiro de 2014 17:57
-
Olá Durval!
Obrigado por ajudar.
Vou ver com o pessoal do TI onde acho o endereço do servior\instancia.
Tentei colocar GSAOW de novo e obitive a mensagem: Login failed for user 'gonzalesc', teria outro login que deveria usar? fui que instalei o SQL Server Express na minha máquina, e em nenhum momento criei um usuário... Quando uso SQL Maintenece Server vejo que nos objetos users tem logins como dbo, guest.. e clicando no properties do dbo, o login que aparece é justamente GARDE\gonzalesc...
Mas vou dar uma olhada melhor aqui!
Obrigado!
Carlo,
No momento da instalação do SQL Express, você pode ter inserido uma senha. Utilize esta senha com o usuário "sa".
'Faça a conexão local desta forma oConn.ConnectionString = "Provider=SQLNCLI;Server=.\SQLExpress;Database=base1;User ID=sa;Password=<senha_informada_na_instalacao>"
Não esqueça de marcar todos os posts que te ajudaram na solução como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:16
-
Durval,
3 pontos:
1) Documentei toda a instalação por meio de screenshots, justamente para se tivesse feito algo assim poder lembrar. E em nenhum momento coloquei senhas. No passo da instalação "Database Engine Configuration" em Authentication mode selecionei 'Windows authentication mode' e em Specify SQL Server administrators selecionei eu, o administrador e alguns membros da minha área.
Tentei fazer o login com sa e a senha do adminstrador e nada, como meu login e minha senha do windowns e tabmém não, e por fim Administrator ( que é o login do adminstrador) e a senha dele, e nada.
Tentei os 3 logins acima sem senha e também não obtive sucesso...2) Quanto ao server, quando coloco o que você mandou ele carrega por um tempo, e retorna o erro de access denied ou que o server não existe. Quando coloco GSAOW no server, aparece o erro logo em seguida Login failed for user '(aque é qualquer usuário que coloco, sa, gozalesc, Garde\gonzalesc...)', parece que ele encontra o servidor, tenta fazer o login e é barrado, ao contrário de quando coloco ./SQLExpress, que parece não encontrar o servidor....
3) Notei que no campo 'Provider' voce coloca SQLNCLI, enquanto eu coloco SQLOLEDB, é alguma diferença de versão do SQL Server? quando coloquei SQLNCLI ocorre o erro de que ele não encontrou o provider...
Desculpe pelo incomodo e obrigado novamente!!
-
Durval,
3 pontos:
1) Documentei toda a instalação por meio de screenshots, justamente para se tivesse feito algo assim poder lembrar. E em nenhum momento coloquei senhas. No passo da instalação "Database Engine Configuration" em Authentication mode selecionei 'Windows authentication mode' e em Specify SQL Server administrators selecionei eu, o administrador e alguns membros da minha área.
Tentei fazer o login com sa e a senha do adminstrador e nada, como meu login e minha senha do windowns e tabmém não, e por fim Administrator ( que é o login do adminstrador) e a senha dele, e nada.
Tentei os 3 logins acima sem senha e também não obtive sucesso...2) Quanto ao server, quando coloco o que você mandou ele carrega por um tempo, e retorna o erro de access denied ou que o server não existe. Quando coloco GSAOW no server, aparece o erro logo em seguida Login failed for user '(aque é qualquer usuário que coloco, sa, gozalesc, Garde\gonzalesc...)', parece que ele encontra o servidor, tenta fazer o login e é barrado, ao contrário de quando coloco ./SQLExpress, que parece não encontrar o servidor....
3) Notei que no campo 'Provider' voce coloca SQLNCLI, enquanto eu coloco SQLOLEDB, é alguma diferença de versão do SQL Server? quando coloquei SQLNCLI ocorre o erro de que ele não encontrou o provider...
Desculpe pelo incomodo e obrigado novamente!!
Carlo,
Estou aqui para te ajudar ! Só o "obrigado" com a sua "solução respondida" já vale.
Como você instalou só "Windows Authentication" eu recomendo você ter um cuidado especial, porque caso mude alguma configuração de seu usuário na rede, seu banco pode ficar inacessível, recomendo que você insira outro usuário da rede ou, se possível, altere o acesso do seu SQL Express para "SQL Authentication".
No caso do "Windows Authentication", sua string de conexão será um pouco diferente, apenas informando que sua conexão vai obter o usuário logado na máquina. Segue abaixo:
oConn.ConnectionString = "Provider=SQLNCLI;Server=.\SQLExpress;Database=base1;Trusted_Connection=Yes;"
Não esqueça de marcar todos os posts que te ajudaram na solução como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA - SQL Server 2012
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Editado Durval Ramos segunda-feira, 27 de janeiro de 2014 19:05 Ajuste de informacao
- Marcado como Resposta Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:14
-
Deu certo!!
A única mudança que fiz foi com relação ao provider e ao server, provicer deixei o que usava e server deixei GSAOW028, e deu certo!
Vou implantar as mudanças que você suegeriu!
Muito obrigado!!!
ps: Deixei marcado como resposta todas as suas respostas, pois dependendo do problema que a pessoa tiver acho que ela pode usar alguma das outras..- Marcado como Resposta Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:16
- Editado Carlo Gonzales segunda-feira, 27 de janeiro de 2014 19:17