A OPERA?ÃO DEVE USAR CONSULTA ATUALIZ?VEL
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!
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!
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...
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...
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.
Acima as permissões de modificação serão dadas aos grupos Usuários e Todos.
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.
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!
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..
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?
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?
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.
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
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!
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