A OPERA?ÃO DEVE USAR CONSULTA ATUALIZ?VEL

ABREU 08/03/2016 05:53:15
#458769
Que o novo dia traga novas realizações para todos!

Em sede de projeto, o meu aplicativo VB.Net 2012 está rodando perfeitamente.
Consigo fazer a inclusão e a edição de todos os registros no banco de dados Access 2007 sem qualquer problema.

Com a ajuda dos amigos do vbmania, fiz o meu primeiro pacote de instalação com o INNO.
Nunca pensei que pudesse ficar tão bom!

Para testar, instalei o aplicativo no meu próprio computador e num outro computador usuário.

Ocorre que em ambos os ambientes, quando eu tento incluir ou editar um registro, é emitida uma mensagem de erro: “A operação deve usar uma consulta atualizável.”

Pesquisei na internet, e cheguei à conclusão de que esse erro pode ter quatro causas:

1 - A conta de convidado da Internet (IUSR_MACHINE) que, por padrão, faz parte do grupo [Ô]Todos[Ô], não tem permissões de gravação no arquivo de banco de dados.
Creio que este não é o meu caso, pois estou trabalhando com um aplicativo desktop.

2 – é dito que esse erro ocorre porque o banco de dados não foi aberto com o modo correto para gravação; que deve ser usada a propriedade MODO para indicar as permissões da conexão. Eis o exemplo que encontrei na rede:

SQL = [Ô]UPDATE Products Set UnitPrice = 2;[Ô]
Set Conn = Server.CreateObject([Ô]ADODB.Connection[Ô])
Conn.Mode = 3 [ô]3 = adModeReadWrite
Conn.Open [Ô]myDSN[Ô]
Conn.Execute(SQL)
Conn.Close

Sinceramente não sei como me valer do exemplo acima. A sintaxe que uso para me conectar com o meu banco de dados é a seguinte:

Imports System.Data.OleDb
Public Class frmCaixa
Dim BDCon As New OleDbConnection
Private Sub frmCaixa _Load(sender As Object, e As EventArgs) Handles MyBase.Load
BDCon.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;[Ô] _
& [Ô]Data Source=BDados.accdb;Jet OLEDB:System database=system.mdw;[Ô]
BDCon.Open()
End Sub

3 - Outra causa apontada para esse erro é o fato da configuração [Ô]Somente leitura[Ô] estar marcada na página Opções para esse DSN no ODBC Manager.
Creio que este também não seja o meu caso. Ademais, a propriedade “Somente leitura” é inalterável nas últimas versões do Windows; é um “dogma” estabelecido pela Microsoft para todos os arquivos e pastas.

4 – Finalmente, dizem na rede que o erro pode ser causado por instruções SQL que violam a integridade referencial do banco de dados.
Certamente este não é o meu caso, pois, em sede de projeto, o aplicativo roda perfeitamente e eu consigo fazer a inclusão e a edição dos registros, o que demonstra que as minhas instruções SQL estão corretas.

Estou mais perdido do que cego em tiroteio. Por favor, me ajudem a encontrar uma solução!
DS2T 08/03/2016 06:30:00
#458770
1 - Seu banco de dados está aberto em modo exclusivo? Se tiver, pode dar erro na hora de tentar fazer alguma alteração.
2 - Seu problema está na hora da instrução SQL ou na hora de abrir o banco já dá isso?

Obs: Dê preferência ao ODBC... O OleDB é um provedor que está sendo descontinuado pela Microsoft...
FFCOUTO 08/03/2016 08:21:46
#458772
Resposta escolhida
Caro amigo ABREU,

Esse erro é causado pelo simples motivo de não haver permissão de gravação no arquivo do banco de dados. Recentemente tive um problema parecido. E a solução é apenas alterar a permissão do arquivo e permitir modificação.

Como você está usando o INNO SETUP basta usar a flag Permission e atribuir as permissões de gravação.

DestDir: {app}; Source: bancodedados.mdb; Permissions: users-modify everyone-modify


Acima as permissões de modificação serão dadas aos grupos Usuários e Todos.
ACCIOLLY 08/03/2016 08:42:48
#458773
Caro FFCOUTO, sempre tive esse problema. Todas as vezes gerei setup pelo inno e sempre no final tinha que mudar as configurações de gravação posteriormente a instalação. Agora que você postou essa dica, MUITO OBRIGADO!
KURTGU 08/03/2016 09:00:04
#458777
Citação:

:
Caro amigo ABREU,

Esse erro é causado pelo simples motivo de não haver permissão de gravação no arquivo do banco de dados. Recentemente tive um problema parecido. E a solução é apenas alterar a permissão do arquivo e permitir modificação.

Como você está usando o INNO SETUP basta usar a flag Permission e atribuir as permissões de gravação.

DestDir: {app}; Source: bancodedados.mdb; Permissions: users-modify everyone-modify


Acima as permissões de modificação serão dadas aos grupos Usuários e Todos.




Vlw Não sabia dessa tambem..
ABREU 08/03/2016 12:09:56
#458795
Caro amigo DS2T,

O problema ocorre na hora em que o aplicativo executa a instrução SQL, pois o banco é aberto e lido normalmente.
O erro só acontece quando se executa as instruções SQL para INSERT ou para UPDATE.
Como posso verificar o modo em que o banco está aberto? Eu nunca trabalhei abrindo o banco de dados num modo específico.

Prezado FFCOUTO,

Desculpa a pergunta tão primária, mas sou novo no INNO: Como devo usar a flag Permission para atribuir as permissões?
Eis a sintaxe com a qual eu instalo o banco de dados:

[Files]
Source: [Ô]C:\Installer\Arquivos\ BDados.accdb[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion

Fiz duas tentativas sem êxito, naturalmente por não estar aplicando a sua orientação da forma correta.

Primeira tentativa:
[Files]
DestDir: {app}; Source: BDados.accdb; Permissions: users-modify everyone-modify
Source: [Ô]C:\Installer\Arquivos\ BDados.accdb[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion

Segunda tentativa:
[Files]
Source: [Ô]C:\Installer\Arquivos\ BDados.accdb[Ô]; DestDir: [Ô]{app}[Ô]; Permissions: users-modify everyone-modify; Flags: ignoreversion

Onde eu estou errando?

FFCOUTO 08/03/2016 13:25:31
#458807
ABREU, aparentemente está correto a forma que você lançou os arquivos. No entanto, não é recomendável a utilização da pasta do programa para local do banco de dados. O ideal seria você usar uma das pastas especiais do Windows, como por exemplo, CommonAplicationData.

Outra coisa que, por descuido, não mencionei no post anterior é que além dos arquivos terem permissão para leitura e gravação é necessário também que o diretório onde o arquivo está tenha permissão para gravação. Dito isto, você deverá atribuir as permissões também para a pasta (app) também.

[DIRS]
Name: {app}; Permissions: users-modify everyone-modify


ABREU 08/03/2016 16:41:37
#458810
Caro amigo FFCOUTO,

Finalmente o meu aplicativo, depois de instalado, rodou como uma engrenagem oleada – graças à sua orientação.
Apliquei a seguinte sintaxe no script do Inno Setup:

[Dirs]
Name: {app}; Permissions: users-modify everyone-modify

[Files]
Source: [Ô]C:\Installer\Arquivos\ BDados.accdb[Ô]; DestDir: [Ô]{app}[Ô]; Permissions: users-modify everyone-modify; Flags: ignoreversion

Agora vou trabalhar na questão do local do banco de dados conforme recomendação.

Encerro o tópico pedindo a Deus que sempre ilumine todos aqueles que se dispõem a ajudar os seus semelhantes!
Tópico encerrado , respostas não são mais permitidas