ACCESS - CONEXAO

MMMX 26/10/2011 09:37:02
#387772
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??
LUIZCOMINO 26/10/2011 09:39:55
#387773
você deve estar com o arquivo aberto em modo de editar tabelas, fecha o banco de dados e tente novamente
MMMX 26/10/2011 09:51:26
#387776
Só se eu to fazendo isso no código mesmo, por que o arquivo do BD está fechado...
KERPLUNK 26/10/2011 09:57:50
#387777
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
MMMX 26/10/2011 10:27:46
#387783
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?
KERPLUNK 26/10/2011 10:32:12
#387785
Mostre a sua string de conexão...
MMMX 26/10/2011 10:42:43
#387789
cnConex.Open [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=false;data Source = K:\bdSistemaPA\bdConex.accdb;Jet OLEDB:Database Password=123456[Ô]
KERPLUNK 26/10/2011 10:57:29
#387790
A string de conexão está ok. Provavelmente vc tem algum outro processo que esteja abrindo o arquivo...
LCSD 26/10/2011 11:24:08
#387792
Poste por favor a linha aonde está dando este erro.
MMMX 26/10/2011 11:32:39
#387794
Cara, é exatamente nessa, na linha onde é aberta a conexão.
PROFESSOR 26/10/2011 12:00:10
#387796
Resposta escolhida
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:

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.

Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas