UPDATE NAO FUNCIONA. O QUE FALTA EM MEU CODIGO?
PREZADOS, BOA TARDE.
TENHO UM FORMULÃRIO EM VBA EXCEL(2003) COM UM OBJETO MULTIPAGE.
ESTOU ACRESCENTANDO UMA ABA PARA CONSULTA/ALTERAÇÕES DE REGISTROS.
O MEU UPDATE NÃO ESTà FUNCIONANDO. E NÃO Dà MENSAGEM DE ERRO.
O BANCO DE DADOS é ACCESS(2003). CONSIGO CONSULTAR OS REGISTROS SEM NENHUM PROBLEMA,
MAS O UPDATE NÃO FUNCIONA.
ABAIXO O MEU CÓDIGO PARA MELHOR COMPREENSÃO:
[ô]A INSTRUÇÃO:
gsql = [Ô][Ô]
gsql = [Ô]UPDATE TabelaM SET Situacao = [Ô] & [Ô][ô][Ô] & cmbsituacao.Text & [Ô][ô] [Ô]
gsql = gsql & [Ô] and Oper = [Ô] & [Ô][ô][Ô] & cmbOperacional.Text & [Ô][ô] [Ô]
gsql = gsql & [Ô] WHERE idCache = [Ô] & rv!idCache & [Ô] [Ô]
[ô]RESULTADO NO IMMEDIATE(APARENTEMENTE ESTà CERTO)
?gsql
UPDATE TabelaM SET Situacao = [ô]RECUSADO[ô] and Oper = [ô]NÃO IDENTIFICADO[ô] WHERE idCache = 172
[ô]ABAIXO A FUNÇÃO QUE EXECUTA O SQL
On Error Resume Next
Set rs = New ADODB.Recordset
rs.Open gsql, db, adOpenKeyset, adLockReadOnly
If Err Then
MsgBox Err.Description, vbCritical, [Ô]Erro[Ô]
Err.Clear
Exit sub
End if
[ô]ESTà FALTANDO ALGUMA COISA?
OBS:
-TENHO PERMISSÕES PARA LER E ALTERAR NO BANCO.
-UTILIZO adOpenKeyset, adLockReadOnly POIS EM OUTRA CONSULTA PRECISO DO VALOR DO rv.RecordCount...
QUALQUER SUGESTÃO é BEM-VINDA.
AGRADEÇO A ATENÇÃO.
ATT.
RICK
TENHO UM FORMULÃRIO EM VBA EXCEL(2003) COM UM OBJETO MULTIPAGE.
ESTOU ACRESCENTANDO UMA ABA PARA CONSULTA/ALTERAÇÕES DE REGISTROS.
O MEU UPDATE NÃO ESTà FUNCIONANDO. E NÃO Dà MENSAGEM DE ERRO.
O BANCO DE DADOS é ACCESS(2003). CONSIGO CONSULTAR OS REGISTROS SEM NENHUM PROBLEMA,
MAS O UPDATE NÃO FUNCIONA.
ABAIXO O MEU CÓDIGO PARA MELHOR COMPREENSÃO:
[ô]A INSTRUÇÃO:
gsql = [Ô][Ô]
gsql = [Ô]UPDATE TabelaM SET Situacao = [Ô] & [Ô][ô][Ô] & cmbsituacao.Text & [Ô][ô] [Ô]
gsql = gsql & [Ô] and Oper = [Ô] & [Ô][ô][Ô] & cmbOperacional.Text & [Ô][ô] [Ô]
gsql = gsql & [Ô] WHERE idCache = [Ô] & rv!idCache & [Ô] [Ô]
[ô]RESULTADO NO IMMEDIATE(APARENTEMENTE ESTà CERTO)
?gsql
UPDATE TabelaM SET Situacao = [ô]RECUSADO[ô] and Oper = [ô]NÃO IDENTIFICADO[ô] WHERE idCache = 172
[ô]ABAIXO A FUNÇÃO QUE EXECUTA O SQL
On Error Resume Next
Set rs = New ADODB.Recordset
rs.Open gsql, db, adOpenKeyset, adLockReadOnly
If Err Then
MsgBox Err.Description, vbCritical, [Ô]Erro[Ô]
Err.Clear
Exit sub
End if
[ô]ESTà FALTANDO ALGUMA COISA?
OBS:
-TENHO PERMISSÕES PARA LER E ALTERAR NO BANCO.
-UTILIZO adOpenKeyset, adLockReadOnly POIS EM OUTRA CONSULTA PRECISO DO VALOR DO rv.RecordCount...
QUALQUER SUGESTÃO é BEM-VINDA.
AGRADEÇO A ATENÇÃO.
ATT.
RICK
UPDATE TabelaM
SET Situacao = [ô]RECUSADO[ô],
Oper = [ô]NÃO IDENTIFICADO[ô]
WHERE idCache = 172
TECLA.
ALTEREI, MAS AGORA INDICOU O SEGUINTE ERRO: [Ô]A OPERAÇÃO DEVE USAR UMA CONSULTA ATUALIZÃVEL[Ô].
O QUE SIGNIFICA?
OBRIGADO PELA ATENÇÃO.
ATT.
RICK
ALTEREI, MAS AGORA INDICOU O SEGUINTE ERRO: [Ô]A OPERAÇÃO DEVE USAR UMA CONSULTA ATUALIZÃVEL[Ô].
O QUE SIGNIFICA?
OBRIGADO PELA ATENÇÃO.
ATT.
RICK
Amigo é a forma como você está abrindo a RECORDSET, abra da seguinte forma abaixo.
rs.Open gsql, db, adOpenKeyset, adLockOptimistic
sSQL = [Ô]UPDATE TabelaM SET Situacao = [ô]RECUSADO[ô], Oper = [ô]NÃO IDENTIFICADO[ô] WHERE idCache = 172[Ô]
db.Execute sSQL
MsgBox [Ô]Atualização efetuada com sucesso![Ô], , [Ô]Atualização[Ô]
LUIS FLAVIO.
JÃ TENTEI COM O adLockOptimistic, MAS NADA ACONTECE.
TECLA.
EXECUTEI A SUA DICA E A MSGBOX EXIBIU A MENSAGEM, PORéM, O REGISTRO NÃO FOI ATUALIZADO....
O ESTRANHO é QUE QUANDO EXECUTO UM SELECT ESPECÃFICO gsql = [Ô]SELECT * FROM CrivoCache WHERE idCache = 172 [Ô] E GUARDO O RETORNO DE UM CAMPO EM UMA VARIÃVEL COMO: LOK = rs!nomeCliente, TENHO O RETORNO DO CAMPO SEM NENHUM PROBLEMA, EX: [Ô]ROBSON ANDRADE NUNES[Ô].
E PIOR AINDA é QUE EXECUTEI A QUERY DE ATUALIZAÇÃO EM UMA CONSULTA EM MODO SQL NO ACCESS E O REGISTRO é ATUALIZADO SEM PROBLEMAS...
ESTOU REVENDO TODAS AS ABAS QUE ACESSAM O BANCO, ACREDITO QUE SEJA ALGUM TIPO DE CONFLITO, POIS Hà VÃRIOS CURSORES EXECUTANDO CONSULTAS DIVERSAS EM UMA FUNÇÃO AMARRADA E REPLETA DE RECORDSETS E TALVEZ ISSO ESTEJA TRAVANDO A TABELA PARA ATUALIZAÇÕES.
[Ô]TODO ESSE ATRASO POR UM SIMPLES UPDATE[Ô]
AGRADEÇO AS DICAS. AGUARDO NOVAS SUGESTÕES.
ATT.
RICK.
JÃ TENTEI COM O adLockOptimistic, MAS NADA ACONTECE.
TECLA.
EXECUTEI A SUA DICA E A MSGBOX EXIBIU A MENSAGEM, PORéM, O REGISTRO NÃO FOI ATUALIZADO....
O ESTRANHO é QUE QUANDO EXECUTO UM SELECT ESPECÃFICO gsql = [Ô]SELECT * FROM CrivoCache WHERE idCache = 172 [Ô] E GUARDO O RETORNO DE UM CAMPO EM UMA VARIÃVEL COMO: LOK = rs!nomeCliente, TENHO O RETORNO DO CAMPO SEM NENHUM PROBLEMA, EX: [Ô]ROBSON ANDRADE NUNES[Ô].
E PIOR AINDA é QUE EXECUTEI A QUERY DE ATUALIZAÇÃO EM UMA CONSULTA EM MODO SQL NO ACCESS E O REGISTRO é ATUALIZADO SEM PROBLEMAS...
ESTOU REVENDO TODAS AS ABAS QUE ACESSAM O BANCO, ACREDITO QUE SEJA ALGUM TIPO DE CONFLITO, POIS Hà VÃRIOS CURSORES EXECUTANDO CONSULTAS DIVERSAS EM UMA FUNÇÃO AMARRADA E REPLETA DE RECORDSETS E TALVEZ ISSO ESTEJA TRAVANDO A TABELA PARA ATUALIZAÇÕES.
[Ô]TODO ESSE ATRASO POR UM SIMPLES UPDATE[Ô]
AGRADEÇO AS DICAS. AGUARDO NOVAS SUGESTÕES.
ATT.
RICK.
Amigo tente assim:
Mas dá uma verificado no critério WHERE que você está fazendo, ele não está encontrando ou não está atualizando?
SET Rs = db.EXECUTE(sSQL)
Mas dá uma verificado no critério WHERE que você está fazendo, ele não está encontrando ou não está atualizando?
LUIS FLAVIO.
EXECUTEI A INSTRUÇÃO E [Ô]PASSOU RETO[Ô], SEM NENHUMA ALTERAÇÃO...
COM UM gsql = [Ô]SELECT * FROM CrivoCache WHERE idCache = 172 [Ô] ELE ENCONTRA O REGISTRO...
A INSTRUÇÃO UPDATE é EXECUTADA SEM PROBLEMAS EM MODO SQL EM UMA CONSULTA DO ACCESS. O REGISTRO é ALTERADO...
ESTOU DESENHANDO OUTRO FORMULÃRIO E TENTAR A ATUALIZAÇÃO FECHANDO TODAS AS CONEXÕES, EXCETO A DA NOVA APLICAÇÃO..., ESSAS MÚLTIPLAS ABAS ESTÃO CONFUSAS DEMAIS E O ANTIGO PROGRAMADOR NÃO LEMBRA COMO FUNCIONA O FLUXO....
SE FUNCIONAR, PENSAREI EM OUTRA AMARRAÇÃO(APESAR DE NÃO SER O IDEAL)
OBRIGADO PELA ATENÇÃO.
ATT.
RICK
EXECUTEI A INSTRUÇÃO E [Ô]PASSOU RETO[Ô], SEM NENHUMA ALTERAÇÃO...
COM UM gsql = [Ô]SELECT * FROM CrivoCache WHERE idCache = 172 [Ô] ELE ENCONTRA O REGISTRO...
A INSTRUÇÃO UPDATE é EXECUTADA SEM PROBLEMAS EM MODO SQL EM UMA CONSULTA DO ACCESS. O REGISTRO é ALTERADO...
ESTOU DESENHANDO OUTRO FORMULÃRIO E TENTAR A ATUALIZAÇÃO FECHANDO TODAS AS CONEXÕES, EXCETO A DA NOVA APLICAÇÃO..., ESSAS MÚLTIPLAS ABAS ESTÃO CONFUSAS DEMAIS E O ANTIGO PROGRAMADOR NÃO LEMBRA COMO FUNCIONA O FLUXO....
SE FUNCIONAR, PENSAREI EM OUTRA AMARRAÇÃO(APESAR DE NÃO SER O IDEAL)
OBRIGADO PELA ATENÇÃO.
ATT.
RICK
PREZADOS.
DEPOIS DE MUITA PESQUISA ENCONTREI A SOLUÇÃO NO SITE http://msdn.microsoft.com:
BASTAVA UM db.Execute [Ô]COMMIT[Ô]
SÓ HAVIA VISTO ESSES COMANDOS EM PROCEDURES, MAS DEU CERTO....
OBRIGADO PELAS SUGESTÕES E ATENÇÃO.
ENCERRO O TÓPICO.
ATT.
RICK
DEPOIS DE MUITA PESQUISA ENCONTREI A SOLUÇÃO NO SITE http://msdn.microsoft.com:
BASTAVA UM db.Execute [Ô]COMMIT[Ô]
SÓ HAVIA VISTO ESSES COMANDOS EM PROCEDURES, MAS DEU CERTO....
OBRIGADO PELAS SUGESTÕES E ATENÇÃO.
ENCERRO O TÓPICO.
ATT.
RICK
Tópico encerrado , respostas não são mais permitidas