Jump to content
San Roman

Salvar múltiplos lançamentos

Recommended Posts

San Roman

Bom dia amigos.

Tenho o seguinte código para inserir registros em banco de dados:

 Private Sub inserirReceita()

        Using con As FbConnection = conectarFirebird()

            con.Open()

            Try
                Dim i As Integer
                Dim numeroParcela As Integer = txtParcelasFrmRec.Text
                Dim dataMovimento As Date
                Dim dataVencimento As Date

                If numeroParcela = 1 Then
                    dataMovimento = dtpDataMovimentoFrmRec.Text
                    dataVencimento = dtpDataVctoFrmRec.Text
                ElseIf numeroParcela > 1 Then
                    dataMovimento = DateAdd(DateInterval.Month, 1, dtpDataMovimentoFrmRec.Value)
                    dataVencimento = DateAdd(DateInterval.Month, 1, dtpDataMovimentoFrmRec.Value)
                End If

                Using strCom As FbCommand = New FbCommand("INSERT INTO tbReceita (DataMovimento, DataEfetiva, Titular, Login, NumDoc, Situacao, FormaPgto, Conta, Categoria, SubCategoria, Itens, Pagador, Valor, Obs, Parcela, Periodicidade ) " & _
                                                          "VALUES (@DataMovimento, @DataEfetiva, @Titular, @Login, @NumDoc, @Situacao, @FormaPgto, @Conta, @Categoria, @SubCategoria, @Itens, @Pagador, @Valor, @Obs, @Parcela, @Periodicidade)", con)

                    For i = 1 To numeroParcela
                        With strCom
                            .Parameters.Add(New FbParameter("@DataMovimento", FbDbType.Date)).Value = dataMovimento
                            .Parameters.Add(New FbParameter("@DataEfetiva", FbDbType.Date)).Value = dataVencimento
                            .Parameters.Add(New FbParameter("@Titular", FbDbType.VarChar)).Value = frmLogin.txtNome.Text
                            .Parameters.Add(New FbParameter("@Login", FbDbType.VarChar)).Value = frmLogin.cbNome.Text
                            .Parameters.Add(New FbParameter("@NumDoc", FbDbType.BigInt)).Value = txtNumDocFrmRec.Text
                            .Parameters.Add(New FbParameter("@Situacao", FbDbType.VarChar)).Value = cbSituacaoFrmRec.Text
                            .Parameters.Add(New FbParameter("@FormaPgto", FbDbType.VarChar)).Value = cbFormaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Conta", FbDbType.VarChar)).Value = cbContaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Categoria", FbDbType.VarChar)).Value = cbCategoriaFrmRec.Text
                            .Parameters.Add(New FbParameter("@SubCategoria", FbDbType.VarChar)).Value = cbSubCategoriaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Itens", FbDbType.VarChar)).Value = cbItensFrmRec.Text
                            .Parameters.Add(New FbParameter("@Pagador", FbDbType.VarChar)).Value = txtPagadorFrmRec.Text
                            .Parameters.Add(New FbParameter("@Valor", FbDbType.Decimal)).Value = CDec(txtValorFrmRec.Text)
                            .Parameters.Add(New FbParameter("@Obs", FbDbType.VarChar)).Value = txtObsFrmRec.Text
                            .Parameters.Add(New FbParameter("@Parcela", FbDbType.VarChar)).Value = numeroParcela
                            .Parameters.Add(New FbParameter("@Periodicidade", FbDbType.VarChar)).Value = cbPeriodicidadeFrmRec.Text
                        End With
                        strCom.ExecuteNonQuery()
                        strCom.Parameters.Clear()
                    Next i
                End Using

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

        End Using

    End Sub 



Já grava com o número correto de lançamentos colocados em txtParcelasFrmRec.text.

Mas as datas de movimento e vencimento e número de parcelas ficam com a mesma data e o mesmo numero de parcelas, ou seja, um mês após a data informada para o primeiro vencimento e o mesmo numero de parcelas informado em txtParcelasFrmRec.text.

Quando na verdade gostaria que retornasse assim:

No caso de três parcelas mensais com vencimento do primeiro lançamento para 25/07/2017

Primeiro lançamento:
Data Movimento: 25/07/2017
Data Vencimento: 25/07/2017
Parcela 1/3

Segundo lançamento:
Data Movimento: 25/08/2017
Data Vencimento: 25/08/2017
Parcela 2/3

Segundo lançamento:
Data Movimento: 25/09/2017
Data Vencimento: 25/09/2017
Parcela 3/3

Se puderem me ajudar desde já agradeço.

 

Share this post


Link to post
Share on other sites
Antonio Silva Magalhaes

Boa tarde,

O que tu fazes aqui :

If numeroParcela = 1 Then
                    dataMovimento = dtpDataMovimentoFrmRec.Text
                    dataVencimento = dtpDataVctoFrmRec.Text
                ElseIf numeroParcela > 1 Then
                    dataMovimento = DateAdd(DateInterval.Month, 1, dtpDataMovimentoFrmRec.Value)
                    dataVencimento = DateAdd(DateInterval.Month, 1, dtpDataMovimentoFrmRec.Value)
 End If

é verificar se existe mais que uma parcela, e alteras a data conforme pretendes, no entanto isso tem que ser dentro do ciclo. Para o numero de parcela o raciocínio é o mesmo. Acrescentas 1 mês por cada numero de parcelas = DateAdd(DateInterval.Month, i, dtpDataMovimentoFrmRec.Value)

ou seja :

 

                    For i = 1 To numeroParcela
                        With strCom
                            .Parameters.Add(New FbParameter("@DataMovimento", FbDbType.Date)).Value = DateAdd(DateInterval.Month, i, dtpDataMovimentoFrmRec.Value)
                            .Parameters.Add(New FbParameter("@DataEfetiva", FbDbType.Date)).Value = DateAdd(DateInterval.Month, i, dtpDataMovimentoFrmRec.Value)

                            .....
				.....

                            .Parameters.Add(New FbParameter("@Parcela", FbDbType.VarChar)).Value = i & "/"& numeroParcela
                            .Parameters.Add(New FbParameter("@Periodicidade", FbDbType.VarChar)).Value = cbPeriodicidadeFrmRec.Text
                        End With
                        strCom.ExecuteNonQuery()
                        strCom.Parameters.Clear()
                    Next i
                End Using

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

        End Using

Abraço

Edited by Antonio Silva Magalhaes

Share this post


Link to post
Share on other sites
San Roman

Olá Antonio,

Diga-se passagem meu chara...

Segui seu exemplo e o código ficou da seguinte forma:

Private Sub inserirReceita()

        Using con As FbConnection = conectarFirebird()

            con.Open()

            Try
                Dim i As Integer
                Dim numeroParcela As Integer = txtParcelasFrmRec.Text

                Using strCom As FbCommand = New FbCommand("INSERT INTO tbReceita (DataMovimento, DataEfetiva, Titular, Login, NumDoc, Situacao, FormaPgto, Conta, Categoria, SubCategoria, Itens, Pagador, Valor, Obs, Parcela, Periodicidade ) " & _
                                                          "VALUES (@DataMovimento, @DataEfetiva, @Titular, @Login, @NumDoc, @Situacao, @FormaPgto, @Conta, @Categoria, @SubCategoria, @Itens, @Pagador, @Valor, @Obs, @Parcela, @Periodicidade)", con)

                    For i = 1 To numeroParcela
                        With strCom
                            If i = 1 Then
                                .Parameters.Add(New FbParameter("@DataMovimento", FbDbType.Date)).Value = dtpDataMovimentoFrmRec.Text
                                .Parameters.Add(New FbParameter("@DataEfetiva", FbDbType.Date)).Value = dtpDataVctoFrmRec.Text
                            Else
                                .Parameters.Add(New FbParameter("@DataMovimento", FbDbType.Date)).Value = DateAdd(DateInterval.Month, i, dtpDataMovimentoFrmRec.Value)
                                .Parameters.Add(New FbParameter("@DataEfetiva", FbDbType.Date)).Value = DateAdd(DateInterval.Month, i, dtpDataMovimentoFrmRec.Value)
                            End If
                            .Parameters.Add(New FbParameter("@Titular", FbDbType.VarChar)).Value = frmLogin.txtNome.Text
                            .Parameters.Add(New FbParameter("@Login", FbDbType.VarChar)).Value = frmLogin.cbNome.Text
                            .Parameters.Add(New FbParameter("@NumDoc", FbDbType.BigInt)).Value = txtNumDocFrmRec.Text
                            .Parameters.Add(New FbParameter("@Situacao", FbDbType.VarChar)).Value = cbSituacaoFrmRec.Text
                            .Parameters.Add(New FbParameter("@FormaPgto", FbDbType.VarChar)).Value = cbFormaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Conta", FbDbType.VarChar)).Value = cbContaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Categoria", FbDbType.VarChar)).Value = cbCategoriaFrmRec.Text
                            .Parameters.Add(New FbParameter("@SubCategoria", FbDbType.VarChar)).Value = cbSubCategoriaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Itens", FbDbType.VarChar)).Value = cbItensFrmRec.Text
                            .Parameters.Add(New FbParameter("@Pagador", FbDbType.VarChar)).Value = txtPagadorFrmRec.Text
                            .Parameters.Add(New FbParameter("@Valor", FbDbType.Decimal)).Value = CDec(txtValorFrmRec.Text)
                            .Parameters.Add(New FbParameter("@Obs", FbDbType.VarChar)).Value = txtObsFrmRec.Text
                            .Parameters.Add(New FbParameter("@Parcela", FbDbType.VarChar)).Value = i & "/" & numeroParcela
                            .Parameters.Add(New FbParameter("@Periodicidade", FbDbType.VarChar)).Value = cbPeriodicidadeFrmRec.Text
                        End With
                        strCom.ExecuteNonQuery()
                        strCom.Parameters.Clear()
                    Next i
                End Using

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

        End Using

    End Sub

Eis o que acontece.

Os lançamentos ficam da seguinte forma:

No caso de  parcelas:

o primeiro lançamento na data do movimento

Data Movimento = 26/07/2017

Data 1º Vencimento = 26/07/2017 --- correto

Data 2º Vencimento = 26/09/2017 --- incorreto

O correto seria um mês após a data de movimento - 26/08/2017.

As parcelas aparecem corretamente no aplicativo mas o banco de dados Firebird dá um erro ao mostrar os dados com o IBExpert:

can't format message 13:578 -- message file C:\WINDOWS\firebird.msg not found. Conversion error from string "1/1"

Não mostra os dados da tabela no IBExpert, mas mostra corretamente no datagridview do aplicativo.

Se tiver alguma solução, fico no aguardo.

Abraços

 

Share this post


Link to post
Share on other sites
Antonio Silva Magalhaes

Bom dia,

Deixa assim :

 
Private Sub inserirReceita()

        Using con As FbConnection = conectarFirebird()

            con.Open()

            Try
                Dim i As Integer
                Dim numeroParcela As Integer = txtParcelasFrmRec.Text

                Using strCom As FbCommand = New FbCommand("INSERT INTO tbReceita (DataMovimento, DataEfetiva, Titular, Login, NumDoc, Situacao, FormaPgto, Conta, Categoria, SubCategoria, Itens, Pagador, Valor, Obs, Parcela, Periodicidade ) " & _
                                                          "VALUES (@DataMovimento, @DataEfetiva, @Titular, @Login, @NumDoc, @Situacao, @FormaPgto, @Conta, @Categoria, @SubCategoria, @Itens, @Pagador, @Valor, @Obs, @Parcela, @Periodicidade)", con)

                    For i = 1 To numeroParcela
                        With strCom
                            
                          
                                .Parameters.Add(New FbParameter("@DataMovimento", FbDbType.Date)).Value = DateAdd(DateInterval.Month, i-1, dtpDataMovimentoFrmRec.Value)
                                .Parameters.Add(New FbParameter("@DataEfetiva", FbDbType.Date)).Value = DateAdd(DateInterval.Month, i-1, dtpDataMovimentoFrmRec.Value)
                           
                            .Parameters.Add(New FbParameter("@Titular", FbDbType.VarChar)).Value = frmLogin.txtNome.Text
                            .Parameters.Add(New FbParameter("@Login", FbDbType.VarChar)).Value = frmLogin.cbNome.Text
                            .Parameters.Add(New FbParameter("@NumDoc", FbDbType.BigInt)).Value = txtNumDocFrmRec.Text
                            .Parameters.Add(New FbParameter("@Situacao", FbDbType.VarChar)).Value = cbSituacaoFrmRec.Text
                            .Parameters.Add(New FbParameter("@FormaPgto", FbDbType.VarChar)).Value = cbFormaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Conta", FbDbType.VarChar)).Value = cbContaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Categoria", FbDbType.VarChar)).Value = cbCategoriaFrmRec.Text
                            .Parameters.Add(New FbParameter("@SubCategoria", FbDbType.VarChar)).Value = cbSubCategoriaFrmRec.Text
                            .Parameters.Add(New FbParameter("@Itens", FbDbType.VarChar)).Value = cbItensFrmRec.Text
                            .Parameters.Add(New FbParameter("@Pagador", FbDbType.VarChar)).Value = txtPagadorFrmRec.Text
                            .Parameters.Add(New FbParameter("@Valor", FbDbType.Decimal)).Value = CDec(txtValorFrmRec.Text)
                            .Parameters.Add(New FbParameter("@Obs", FbDbType.VarChar)).Value = txtObsFrmRec.Text
                            .Parameters.Add(New FbParameter("@Parcela", FbDbType.VarChar)).Value = i & "/" & numeroParcela
                            .Parameters.Add(New FbParameter("@Periodicidade", FbDbType.VarChar)).Value = cbPeriodicidadeFrmRec.Text
                        End With
                        strCom.ExecuteNonQuery()
                        strCom.Parameters.Clear()
                    Next i
                End Using

            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try

        End Using

    End Sub

- DateAdd(DateInterval.Month, i-1, dtpDataMovimentoFrmRec.Value) , quando i = 1 (primeiro vencimento) , ele pega na data de movimento e acrescenta 1-1 meses, ou seja, fica igual. Quando i = 2 , ele pega na data de movimento e acrescenta 2-1 meses, ou seja, um mês à frente.

 

Quanto á questão do erro na base de dados, qual o tipo de dados que tens para esse campo? o erro esta na conversão. Se tiveres Varchar na base de dados então experimenta  alterar o parâmetro para cstr(i & "/" & numeroParcela) ou (i & "/" & numeroParcela).toString para que assuma o 1/1 ou 2/3 como sendo string.

 

Abraço

Share this post


Link to post
Share on other sites
San Roman

Boa tarde Antonio Silva.

 

Amigo, desculpe pela demora ao responder, estava em viagem...

 

Funcionou perfeitamente, muito obrigado pela ajuda que foi pontual e certeira.

 

Darei o tópico como encerrado

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.