BOTÃO ALTERAR EST? DUPLICANDO CADASTRO

SERENO 14/06/2016 09:27:14
#463474
Boa tarde,

Tenho uma tela de cadastro de clientes, e nela tem os botões, Incluir, Confirmar, Limpar, Alterar e Excluir. Acontece que quando clico no botão Alterar, para fazer alguma alteração no cadastro do cliente, ele está duplicando. Enfim, ao invés de apenas atualizar a alteração, está cadastrando de novo.

Exemplo: Clico no botão Alterar, e os textbox ficam liberados para alterações. Depois que faço alguma alteração, clico no botão Confirmar, para atualizar os dados.

O código do botão Alterar é este:

Private Sub cmdAlterar_Click()
txtRaz.BackColor = &H80000005
txtFan.BackColor = &H80000005
txtEnd.BackColor = &H80000005
txtNum.BackColor = &H80000005
txtBai.BackColor = &H80000005
txtCid.BackColor = &H80000005
cmbEst.BackColor = &H80000005
txtCep.BackColor = &H80000005
txtCnpj.BackColor = &H80000005
txtIe.BackColor = &H80000005
txtTel.BackColor = &H80000005
txtObs.BackColor = &H80000005
txtRaz.Enabled = True
txtFan.Enabled = True
txtEnd.Enabled = True
txtNum.Enabled = True
txtBai.Enabled = True
txtCid.Enabled = True
cmbEst.Enabled = True
txtCep.Enabled = True
txtCnpj.Enabled = True
txtIe.Enabled = True
txtTel.Enabled = True
txtObs.Enabled = True
cmdConfirmar.Enabled = True
txtRaz.SetFocus
End Sub

O código do botão Confirmar é este:

Private Sub cmdConfirmar_Click()
If txtRaz.Text <> [Ô][Ô] Then
RS.AddNew
RS!cod = txtCod.Text
RS!datcad = Date
RS!raz = txtRaz.Text
RS!fan = txtFan.Text
RS!End = txtEnd.Text
RS!num = txtNum.Text
RS!bai = txtBai.Text
RS!cid = txtCid.Text
RS!est = cmbEst.Text
RS!cep = txtCep.Text
RS!CNPJ = txtCnpj.Text
RS!Ie = txtIe.Text
RS!tel = txtTel.Text
RS!obs = txtObs.Text
RS.Update

RS_CONF.FindFirst [Ô]cod_cli=[Ô] & RS_CONF!cod_cli
RS_CONF.Edit
RS_CONF!cod_cli = txtCod.Text

RS_CONF.Update

cmdLimpar_Click
Else
MsgBox [Ô]Preencha os campos para o cadastro![Ô], vbInformation + vbOKOnly, [Ô]FF Express[Ô]
txtRaz.SetFocus
End If

End Sub
Aguardo ajuda de vocês.
ROOLSI 14/06/2016 09:55:45
#463475
RS.AddNew -> na alteração não pode conter essa linha.
SERENO 14/06/2016 10:38:43
#463478
Citação:

:
RS.AddNew -> na alteração não pode conter essa linha.



Eu retirei a linha RS.AddNew do comando Confirmar, mas agora está dando erro.

Rum-Time error [ô]3020[ô]
Update ou CancelUpdate sem AddNew ou Edit.
KLINGER 14/06/2016 11:42:16
#463481
RS.Edit
PERCIFILHO 14/06/2016 11:51:25
#463482
RS.Edit --> para editar um registro
RS.AddNew --> para inserir um registro
SERENO 14/06/2016 12:19:56
#463484
Citação:

:
RS.Edit --> para editar um registro
RS.AddNew --> para inserir um registro



Porém o botão Confirmar, é o mesmo para salvar a alteração ou gravar um novo registro.

Acho que o erro está ai.

Exemplo: Ao invés de eu atualizar o cadastro nº 2, ele está duplicando no BD para 2, 2 (duas vezes).
OMAR2011 14/06/2016 13:53:33
#463485
Se você tiver um patrão pode ter certeza que não vai repetir.
Seu patrão é a chave primária.
PERCIFILHO 14/06/2016 16:11:20
#463497
Você poderia fazer assim:
criar uma variável global do tipo boolean, exemplo: AddMode (não me lembro mais como se declara no VB6).
Aí, no código do botão Alterar você coloca:
AddMode = false
E no código do botão para Salvar, você coloca:
AddMode = true

No código Confirmar, você deixaria mais ou menos assim:
If AddMode = false Then Rs.Edit
ElseIf AddMode = true Then RS.AddNew.
E o restante do código para gravar o registro

Como não programo em VB6, não sei a sintaxe correta, mas a lógica é esta aí.

Mais ou menos isso, entendeu? é só uma ideia, e funciona, tá? Se não tiver outra, testa aí e qualquer coisa poste novamente.
Abraços.
SERENO 14/06/2016 17:26:22
#463505
Citação:

:
Você poderia fazer assim:
criar uma variável global do tipo boolean, exemplo: AddMode (não me lembro mais como se declara no VB6).
Aí, no código do botão Alterar você coloca:
AddMode = false
E no código do botão para Salvar, você coloca:
AddMode = true

No código Confirmar, você deixaria mais ou menos assim:
If AddMode = false Then Rs.Edit
ElseIf AddMode = true Then RS.AddNew.
E o restante do código para gravar o registro

Como não programo em VB6, não sei a sintaxe correta, mas a lógica é esta aí.

Mais ou menos isso, entendeu? é só uma ideia, e funciona, tá? Se não tiver outra, testa aí e qualquer coisa poste novamente.
Abraços.



Infelizmente não consegui criar esta variável, pois sou leigo no assunto.
Desde já agradeço pela ajuda.
ALVAROVB2009 15/06/2016 09:42:08
#463539
Resposta escolhida
Fácil resolver isso
No inicio do seu form no General faça o seguinte
Dim Incluir as boolean

No seu botão incluir faça o seguinte, acrescente o código
Incluir = True

No seu botão Alterar faça o seguinte, acrescente o código
Incluir = False

No seu botão confirmar faça a seguinte pergunta
If incluir = True then
rs.addnew
rs.cod = txtcod.text
else
rs.edit
endif
RS!datcad = Date
RS!raz = txtRaz.Text
RS!fan = txtFan.Text
RS!End = txtEnd.Text
RS!num = txtNum.Text
RS!bai = txtBai.Text
RS!cid = txtCid.Text
RS!est = cmbEst.Text
RS!cep = txtCep.Text
RS!CNPJ = txtCnpj.Text
RS!Ie = txtIe.Text
RS!tel = txtTel.Text
RS!obs = txtObs.Text
RS.Update

RS_CONF.FindFirst [Ô]cod_cli=[Ô] & RS_CONF!cod_cli
RS_CONF.Edit
RS_CONF!cod_cli = txtCod.Text

RS_CONF.Update

cmdLimpar_Click


E pronto, coloquei o campo cod logo embaixo do incluir, pois acredito que ele seja um campo chave e dessa maneira não poderá sofrer alteração, agora é só fazer os ajustes que vc precisa, caso for necessário

Acho que é isso, qqer coisa posta ai a pergunta, senão não esqueça de encerrar o tópico
SERENO 15/06/2016 15:10:24
#463562
Obrigado pela ajuda de todos. Consegui sanar o problema.

Abraço!
Tópico encerrado , respostas não são mais permitidas