ERRO SQL SERVER

AZORSCA 23/08/2012 17:16:19
#408478
Caros estou tentando efetuar um UPDATE em SQL Server.
Para conexão eu utilizo a seguinte:

Set oRecOp = New ADODB.Recordset
vStrSql = [Ô]Select * from ger001 where serial=[ô][Ô] & SCAvs & [Ô][ô][Ô]
oRecOp.Open vStrSql, oCon, adOpenKeyset, adLockOptimistic

O erro que é exibido é o seguinte: [Ô]Alinha não pode ser localizada para atualização. Alguns valores podem ter sido alterados desde que ela foi lida pela última vez.[Ô]
O erro está no seguinte Update:

oCon.Execute ([Ô]Update ger001 set Nome=[ô][Ô] & txtfields(1).Text & [Ô][ô], Razao=[ô][Ô] & txtfields(2).Text & [Ô][ô], [Ô] & _
[Ô]Endereco=[ô][Ô] & txtfields(3).Text & [Ô][ô], Bairro=[ô][Ô] & txtfields(4).Text & [Ô][ô], [Ô] & _
[Ô]Cep=[ô][Ô] & Cep(6).Text & [Ô][ô], telefone1=[ô][Ô] & MaskEdBox1.Text & [Ô][ô], [Ô] & _
[Ô]estado=[ô][Ô] & txtfields(9).Text & [Ô][ô], telefone2=[ô][Ô] & MaskEdBox2.Text & [Ô][ô], [Ô] & _
[Ô]CGC=[ô][Ô] & CGCCPF(0).Text & [Ô][ô], IE=[ô][Ô] & txtfields(11).Text & [Ô][ô], [Ô] & _
[Ô]Email=[ô][Ô] & txtfields(0).Text & [Ô][ô], Site=[ô][Ô] & txtfields(5).Text & [Ô][ô], [Ô] & _
[Ô]DominioPadrao=[ô][Ô] & txtfields(7).Text & [Ô][ô], DiasPrevisao=[ô][Ô] & txtfields(12).Text & [Ô][ô], [Ô] & _
[Ô]Atualiza=[ô][Ô] & Check8.value & [Ô][ô], RecDias=[ô][Ô] & Text(0).Text & [Ô][ô], [Ô] & _
[Ô]Taxa=[ô][Ô] & Text(1).Text & [Ô][ô], Multa=[ô][Ô] & Check12.value & [Ô][ô], [Ô] & _
[Ô]ValMulta=[ô][Ô] & Text(2).Text & [Ô][ô], LancaConta=[ô][Ô] & Check20.value & [Ô][ô], [Ô] & _
[Ô]ContaParaLancar=[ô][Ô] & DBCombo3.Text & [Ô][ô], LancaContaRet=[ô][Ô] & Check21.value & [Ô][ô], [Ô] & _
[Ô]ContaParaLancarRet=[ô][Ô] & DBCombo4.Text & [Ô][ô], DespParaLancarRet=[ô][Ô] & DBCombo5.Text & [Ô][ô], [Ô] & _
[Ô]Parceria=[ô][Ô] & Check23.value & [Ô][ô], PorcentagemParceria=[ô][Ô] & Replace(Text(3).Text, [Ô],[Ô], [Ô].[Ô]) & [Ô][ô], [Ô] & _
[Ô]DtBaseParceria=[ô][Ô] & Format(dbDate1(2), [Ô]YYYY-MM-DD[Ô]) & [Ô][ô], DescricaoParceria=[ô][Ô] & txtfields(29).Text & [Ô][ô], [Ô] & _
[Ô]Bloqueia=[ô][Ô] & Check22.value & [Ô][ô], SenhaPadrao=[ô][Ô] & txtfields(18).Text & [Ô][ô], UserDB=[ô][Ô] & txtfields(19).Text & [Ô][ô], [Ô] & _
[Ô]IpDB=[ô][Ô] & txtfields(21).Text & [Ô][ô], NomeDB=[ô][Ô] & txtfields(30).Text & [Ô][ô], EmailRet=[ô][Ô] & txtfields(10).Text & [Ô][ô], [Ô] & _
[Ô]IpSmtp=[ô][Ô] & txtfields(8).Text & [Ô][ô], CodContaCob=[ô][Ô] & txtfields(6).Text & [Ô][ô], Instrucoes=[ô][Ô] & txtfields(13).Text & [Ô][ô], [Ô] & _
[Ô]msgBoleto=[ô][Ô] & txtfields(16).Text & [Ô][ô], msgAtrazo=[ô][Ô] & txtfields(17).Text & [Ô][ô], Local=[ô][Ô] & txtfields(14).Text & [Ô][ô], [Ô] & _
[Ô]msgIVR=[ô][Ô] & txtfields(22).Text & [Ô][ô], MensCobReg1=[ô][Ô] & txtfields(31).Text & [Ô][ô], MensCobReg2=[ô][Ô] & txtfields(32).Text & [Ô][ô], [Ô] & _
[Ô]MensCobReg3=[ô][Ô] & txtfields(15).Text & [Ô][ô], IniNumNotasED=[ô][Ô] & txtfields(24).Text & [Ô][ô], [Ô] & _
[Ô]DataUltimaNFED=[ô][Ô] & Format(dbDate1(0), [Ô]YYYY-MM-DD[Ô]) & [Ô][ô], IniNumNotas=[ô][Ô] & txtfields(25).Text & [Ô][ô], [Ô] & _
[Ô]DataUltimaNF=[ô][Ô] & Format(dbDate1(1), [Ô]YYYY-MM-DD[Ô]) & [Ô][ô], AliquotaICMS=[ô][Ô] & txtfields(23).Text & [Ô][ô], [Ô] & _
[Ô]ReduzBCICMS=[ô][Ô] & Check24.value & [Ô][ô], ValReduzBCICMS=[ô][Ô] & Text(4).Text & [Ô][ô], UserServerMon=[ô][Ô] & txtUserServerMon.Text & [Ô][ô], [Ô] & _
[Ô]SenhaServerMon=[ô][Ô] & txtSenhaServerMon.Text & [Ô][ô], ServerMon=[ô][Ô] & txtEndServerMon.Text & [Ô][ô] [Ô] & _
[Ô]Where Serial=[ô][Ô] & SCAvs & [Ô][ô][Ô])



Caso alguém possa me ajudar ficarei muito Grato.


Obrigado
CASSIOJFF 23/08/2012 21:31:49
#408488
Resposta escolhida
acho q vc tem q fechar o oRecop pra ai sim fazer a atualizacao
PROFESSOR 23/08/2012 21:59:38
#408490
Bom, veja, você instanciou um Recordset, mas usou um Connection nas operações CRUD. Obviamente, ambos estão fora de sincronia, ou seja, o Recordset [Ô]não sabe[Ô] o que o Connection fêz, e assim, não sabe onde (em qual registro) se posicionar.

Utilize o próprio Recordset para as operações CRUD, ou então, após quaisquer uma dessas operações, recarregue os Recordsets antes de utilizá-los.



AZORSCA 23/08/2012 22:37:25
#408493
Desculpe minha Ignorância, mais o que seria o CRUD?
PROFESSOR 24/08/2012 03:33:34
#408512
Desculpo-me eu, que deveria ter sido mais [Ô]amigável[Ô], hehehe!

CRUD = Toda operação de criação, leitura, atualização e exclusão de registros.

Mas voltando ao caso exposto, após o Execute, o objeto oRecOp ainda está aberto, mas, se for movimentado, ou se estiver vinculado á grades ou outros controles, essa mensagem citada surge, certo?

Tente, assim que findar o [Ô]Execute[Ô], usar o método oRecOp.Requery, que serve como um [Ô]refresh[Ô] para atualizar o componente com as alterações que há na base de dados, ou, como sugerido pelo CASSIOJFF, desconecte o Recordset, faça a atualização e em seguida, reconecte.
AZORSCA 24/08/2012 08:51:32
#408518
Professor obrigado pelo esclarecimento.

Fiz como o Cassio disse, fechando a recordset e atualizando a Crud.

Aparece o seguinte erro:

Operação não permitida neste contexto.


O mesmo erro aparece se eu colocar uma OrecOp.Requery após a Query SQL.
AZORSCA 24/08/2012 10:21:06
#408537
Erro corrigido com um nothing igual ao amigo Cassio recomendou Obrigado.
Tópico encerrado , respostas não são mais permitidas