ACCESS - CONEXAO
Pessoal, ao tentar fazer a conexão com um segundo programa no Acces estou tendo o erro da imagem. Alguém faz idéia do por que??
você deve estar com o arquivo aberto em modo de editar tabelas, fecha o banco de dados e tente novamente
Só se eu to fazendo isso no código mesmo, por que o arquivo do BD está fechado...
Essa parece ser uma unidade mapeada. Se qualquer usuário da rede abrir o arquivo em modo exclusivo, não tem como abrir. Verifique isso também
O arquivo não esta sendo aberto por nenhum usuário, a não ser pelo programa. Que está em duas máquinas.
[Ô]Se qualquer usuário da rede abrir o arquivo em modo exclusivo...[Ô]
E como eu faço para ele não abrir em modo exclusivo pelo código?
[Ô]Se qualquer usuário da rede abrir o arquivo em modo exclusivo...[Ô]
E como eu faço para ele não abrir em modo exclusivo pelo código?
Mostre a sua string de conexão...
cnConex.Open [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=false;data Source = K:\bdSistemaPA\bdConex.accdb;Jet OLEDB:Database Password=123456[Ô]
A string de conexão está ok. Provavelmente vc tem algum outro processo que esteja abrindo o arquivo...
Poste por favor a linha aonde está dando este erro.
Cara, é exatamente nessa, na linha onde é aberta a conexão.
Bom, a mensagem é clara: [Ô]O arquivo já está em uso[Ô].
Pode ocorrer também de a pasta, se compartilhada, estar com proteção contra escrita, mas nesse caso a mensagem de erro seria diferente.
Se está mesmo em uso, você pode conferir, pois nesse caso, um arquivo chamado [Ô]K:\bdSistemaPA\bdConex.laccdb[Ô] deve estar visÃvel para você. é com base nesse arquivo que o Driver retorna essa mensagem.
Esse arquivo é gerado sempre que uma conexão é feita á bases de dados do MS-Access, e serve como administrador das conexões.
Acessando o arquivo [Ô].accdb[Ô] pelo Office, por exemplo, você bloqueia o acesso de outros aplicativos, como a gente já sabe.
Mas ás vezes o próprio aplicativo pode causar esse efeito. Basta que ele tenha aberto a conexão e, por alguma razão, encerrado sem fechar essa conexão. Um erro em tempo de execução é o suficiente, e esse erro nem precisa ser relacionado ao banco de dados.
Uma coisa interessante á ser alterada, para que o banco seja compartilhado, é especificar o modo de acesso pretendido ao banco de dados. Sempre que for utilizar uma conexão para consultar e / ou atualizar dados, abra a conexão em modo compartilhado, e acesse em modo exclusivo apenas para compactar, gerar cópias de segurança e/ou reparar.
Isso pode ser feito de duas formas: Uma, pelo comando de conexão, que seria mais ou menos assim:
E a outra forma, por meio do componente de conexão, e seria assim:
Lembrando então, e estou listando isso não apenas para você, alguns procedimentos de segurança que servem não apenas para evitar que a conexão continue aberta, mas para garantir a integridade do banco de dados:
1. Tão logo você faça o que deseja com a conexão, encerre. Isso diminui os riscos de manter a conexão [Ô]pendurada[Ô] por uma falha de aplicativo.
2. Antes de efetuar qualquer atualização (insert ou update), verifique que as entradas de dados são compatÃveis com os tipos de dados e tamanhos dos campos no banco. Se não o forem, gere mensagem de alerta e não dê seqüência á gravação.
3. Sempre que for efetuar um processo em um banco de dados (consulta, atualização, inclusão, exclusão etc), crie uma function ou sub especificamente para esse fim, com tratamento de erros. Preferencialmente, crie uma classe que atue como D.A.L. para essas operações junto ao banco de dados.
4. Evite utilizar o objeto Recordset para fazer operações CRUD. Dê aos Recordsets a preferência para consultas.
Pode ocorrer também de a pasta, se compartilhada, estar com proteção contra escrita, mas nesse caso a mensagem de erro seria diferente.
Se está mesmo em uso, você pode conferir, pois nesse caso, um arquivo chamado [Ô]K:\bdSistemaPA\bdConex.laccdb[Ô] deve estar visÃvel para você. é com base nesse arquivo que o Driver retorna essa mensagem.
Esse arquivo é gerado sempre que uma conexão é feita á bases de dados do MS-Access, e serve como administrador das conexões.
Acessando o arquivo [Ô].accdb[Ô] pelo Office, por exemplo, você bloqueia o acesso de outros aplicativos, como a gente já sabe.
Mas ás vezes o próprio aplicativo pode causar esse efeito. Basta que ele tenha aberto a conexão e, por alguma razão, encerrado sem fechar essa conexão. Um erro em tempo de execução é o suficiente, e esse erro nem precisa ser relacionado ao banco de dados.
Uma coisa interessante á ser alterada, para que o banco seja compartilhado, é especificar o modo de acesso pretendido ao banco de dados. Sempre que for utilizar uma conexão para consultar e / ou atualizar dados, abra a conexão em modo compartilhado, e acesse em modo exclusivo apenas para compactar, gerar cópias de segurança e/ou reparar.
Isso pode ser feito de duas formas: Uma, pelo comando de conexão, que seria mais ou menos assim:
cnConex.Open [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=false;Mode=Share Deny None;Data Source=K:\bdSistemaPA\bdConex.accdb;Jet OLEDB:Database Password=123456;â€
E a outra forma, por meio do componente de conexão, e seria assim:
...
Dim db As String
Dim cs As String
db = [Ô]K:\bdSistemaPA\bdConex.accdb[Ô]
cs = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=false;Data Source=[Ô]& db &[Ô];Jet OLEDB:Database Password=123456;â€
If cnConex Is Nothing Then
Set cnConex = New ADODB.Connection
Else
If cnConex.State <> adStateClosed Then cnConex.Close
Set cnConex = New ADODB.Connection
End If
cnConex.ConnectionString = cs
cnConex.CursorLocation = adUseClient
cnConex.IsolationLevel = adXactReadCommitted
cnConex.Mode = adModeShareDenyNone
cnConex.Open
...
Lembrando então, e estou listando isso não apenas para você, alguns procedimentos de segurança que servem não apenas para evitar que a conexão continue aberta, mas para garantir a integridade do banco de dados:
1. Tão logo você faça o que deseja com a conexão, encerre. Isso diminui os riscos de manter a conexão [Ô]pendurada[Ô] por uma falha de aplicativo.
2. Antes de efetuar qualquer atualização (insert ou update), verifique que as entradas de dados são compatÃveis com os tipos de dados e tamanhos dos campos no banco. Se não o forem, gere mensagem de alerta e não dê seqüência á gravação.
3. Sempre que for efetuar um processo em um banco de dados (consulta, atualização, inclusão, exclusão etc), crie uma function ou sub especificamente para esse fim, com tratamento de erros. Preferencialmente, crie uma classe que atue como D.A.L. para essas operações junto ao banco de dados.
4. Evite utilizar o objeto Recordset para fazer operações CRUD. Dê aos Recordsets a preferência para consultas.
Tópico encerrado , respostas não são mais permitidas