Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

nossila

Como melhor esse código

Recommended Posts

Pessoal, Tenho duas tabelas empenho e mov_compra. A 1ª contêm uma chave primaria no campo n_empenho e a 2ª uma chave estrangeira no campo n_empenho. Esta case tudo perfeito, pois gostaria que ao gerar um erro de inclusão na tabela mov_compra não gravasse os dados na outra tabela.Como faço isso.Private Sub cmdgravar_Click()Dim adoEmpenho As New ADODB.RecordsetDim adoMov_Compra As New ADODB.RecordsetOn Error GoTo cmdGravar ' Erro ao gravar registroIf lvprod.ListItems.Count <= 0 Then Exit SubElse If txtquantidade.Text = Empty Then MsgBox "Informe o valor da quantidade !", vbInformation txtquantidade.SetFocus Exit Sub ElseIf adoEmpenho.State = 1 Then Set adoEmpenho = Nothing adoEmpenho.Open "SELECT * from empenho where n_empenho = '" & n_empenho.Text & "'", gconexao, adOpenDynamic, adLockPessimistic With adoEmpenho If .EOF Then gconexao.BeginTrans .AddNew .Fields(0) = n_empenho.Text .Fields(1) = data_empenho.Text .Fields(2) = tipo_empenho.Text .Fields(3) = modalidade.Text .Fields(4) = inciso.Text .Fields(5) = processo.Text .Fields(6) = Str(valor_empenho.Text) .Fields(7) = cod_fornecedor.Text .Fields(8) = cod_departamento.Text .Update .Requery gconexao.CommitTrans .CloseEnd IfEnd With For I = 1 To lvprod.ListItems.Count If adoMov_Compra.State = 1 Then Set adoMov_Compra = Nothing adoMov_Compra.Open "SELECT * from mov_compra", gconexao, adOpenDynamic, adLockPessimistic With adoMov_Compra gconexao.BeginTrans .AddNew .Fields(1) = n_empenho.Text .Fields(2) = lvprod.ListItems(I).Text .Fields(3) = lvprod.ListItems(I).SubItems(4) .Fields(4) = lvprod.ListItems(I).SubItems(5) .Fields(5) = lvprod.ListItems(I).SubItems(6) .Fields(6) = Str(lvprod.ListItems(I).SubItems(7)) .Fields(7) = Str(lvprod.ListItems(I).SubItems(8)) .Update .Requery gconexao.CommitTrans .Close End Withsql = "update Produto set estoque_atual = estoque_atual + '" & lvprod.ListItems(I).SubItems(7) & "' where cod_produto ='" & lvprod.ListItems(I).Text & "'" gconexao.Execute sql Next I cmdGravar.Enabled = FalseEnd IfEnd IfMsgBox "Operação realizada com sucesso !", vbInformation, "Salvar Inclusão"cmdgravar_exit:Exit SubcmdGravar:MsgBox Err.Description, vbInformation, "Erro em [cmdgravar]"End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usa controle de transaçõescom Begin trans e Commit e Roolback em caso de errodaí tudo que é inserido deixa de ter sido inserido

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tu usa um banco de dados que permite transações como o AccessTu pode usar o controle de transaçõesfunciona assimBancoDeDados.BeginTransmarca um ponto no banco de dados em que o banco de dados será revertido caso aja a necessidadeBancoDeDados.CommitTransInforma que as operações foram bem sucedidas e podem ser gravadas em definitivo no banco de dadosouBandoDeDados.RoolBackfaz com que o banco de dados retorne no ponto que foi informado em BaginTrans assim todas as inserções, alterações e deleções são como que desfeitas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tu usa um banco de dados que permite transações como o AccessTu pode usar o controle de transaçõesfunciona assimBancoDeDados.BeginTransmarca um ponto no banco de dados em que o banco de dados será revertido caso aja a necessidadeBancoDeDados.CommitTransInforma que as operações foram bem sucedidas e podem ser gravadas em definitivo no banco de dadosouBandoDeDados.RoolBackfaz com que o banco de dados retorne no ponto que foi informado em BaginTrans assim todas as inserções, alterações e deleções são como que desfeitas

Xevious,Veja só. Se substituir o comando gconexao.CommitTrans no meu código para gconexao.RollbackTrans nos periodos de gravação vai funcionar é isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.