ERRO COM DATA - 30/02/2012
pessoal, estou fazendo um sistema de parcelas... onde defino inicio e quantidade de parcelas e o sistema gera 1 registro para cada mês... sendo sequencial a data de inicio...
meu problema está quando defino inicio dia 30/01/2012 e mando gerar 3 parcelas... ele gera a do mês de fevereiro errado:
30/01/2012
12/02/1930
30/03/2012
como corrijo isso?
Private Sub Gerar_Parcelas()
Dim var_Mes As Integer
Dim var_Ano As Integer
Dim var_Dia As Integer
Dim DIA As Integer
Dim DATA As String
Dim i As Integer
[ô]Dim x As Integer
Dim PARCELA As Currency
Dim SQL As String
Dim n_PARC As Integer
If n_PARC = 0 Then n_PARC = 1
Call Abrir_BancodeDados
SQL = [Ô]SELECT * FROM PARCELAS[Ô]
Set RS = BD.OpenRecordset(SQL)
var_Mes = Format(txtInicio, [Ô]mm[Ô])
var_Ano = Format(txtInicio, [Ô]yy[Ô])
For i = 1 To Val(txtQuant.Text)
Autonumeracao_Parcelas
If var_Mes > 12 Then
var_Mes = 1
var_Ano = var_Ano + 1
End If
var_Dia = Int(cboDiaPgto)
DIA = var_Dia
DATA = DIA & [Ô]/[Ô] & Format(var_Mes, [Ô]00[Ô]) & [Ô]/[Ô] & Format(var_Ano, [Ô]00[Ô])
RS.AddNew
RS!CODIGO = x
RS!COD_MATRICULA = CLng(lblCodMatricula.Caption)
RS!COD_CLIENTE = CLng(txtCodCliente.Text)
RS!Numero = n_PARC
RS!VENCIMENTO = Format(CDate(DATA), [Ô]dd/mm/yy[Ô])
RS!Valor = CCur(txtParc.Text)
RS.Update
var_Mes = var_Mes + 1
n_PARC = n_PARC + 1
Next
End Sub
Public Function Verifica_Dia(DIA, var_Mes)
Dim diasDoMes As Variant
DIA = Val(DIA)
diasDoMes = Array(31, 28, 30, 30, 31, 30, 31, 30, 30, 31, 30, 31)
If DIA = 31 Then
Verifica_Dia = diasDoMes(var_Mes - 1)
Else
Verifica_Dia = DIA
End If
End Function
meu problema está quando defino inicio dia 30/01/2012 e mando gerar 3 parcelas... ele gera a do mês de fevereiro errado:
30/01/2012
12/02/1930
30/03/2012
como corrijo isso?
[ô]O problema está quando a data calculada está fora do calendário, exemplo 30/02/2012.
[ô]Faça as correções em vermelho.
Private Sub Gerar_Parcelas()
Dim var_Mes As Integer
Dim var_Ano As Integer
Dim var_Dia As Integer
Dim DIA As Integer
Dim DATA As String
Dim i As Integer
[ô]Dim x As Integer
Dim PARCELA As Currency
Dim SQL As String
Dim n_PARC As Integer
If n_PARC = 0 Then n_PARC = 1
Call Abrir_BancodeDados
SQL = [Ô]SELECT * FROM PARCELAS[Ô]
Set RS = BD.OpenRecordset(SQL)
var_Mes = Format(txtInicio, [Ô]mm[Ô])
var_Ano = Format(txtInicio, [Ô]yy[Ô])
For i = 1 To Val(txtQuant.Text)
Autonumeracao_Parcelas
If var_Mes > 12 Then
var_Mes = 1
var_Ano = var_Ano + 1
End If
var_Dia = Int(cboDiaPgto)
DIA = var_Dia
DATA =[txt-color=#e80000] Verifica_Dia(var_Dia, var_Mes) [/txt-color]& [Ô]/[Ô] & Format(var_Mes, [Ô]00[Ô]) & [Ô]/[Ô] & Format(var_Ano, [Ô]00[Ô])
RS.AddNew
RS!CODIGO = x
RS!COD_MATRICULA = CLng(lblCodMatricula.Caption)
RS!COD_CLIENTE = CLng(txtCodCliente.Text)
RS!Numero = n_PARC
RS!VENCIMENTO = Format(CDate(DATA), [Ô]dd/mm/yy[Ô])
RS!Valor = CCur(txtParc.Text)
RS.Update
var_Mes = var_Mes + 1
n_PARC = n_PARC + 1
Next
End Sub
Public Function Verifica_Dia(DIA, var_Mes)
Dim diasDoMes As Variant
DIA = Val(DIA)
diasDoMes = Array(31, 28, 30, 30, 31, 30, 31, 30, 30, 31, 30, 31)
[txt-color=#e80000][ô]If DIA = 31 Then
If DIA > diasDoMes(var_Mes - 1) Then[/txt-color]
Verifica_Dia = diasDoMes(var_Mes - 1)
Else
Verifica_Dia = DIA
End If
End Function
[ô]Faça as correções em vermelho.
Private Sub Gerar_Parcelas()
Dim var_Mes As Integer
Dim var_Ano As Integer
Dim var_Dia As Integer
Dim DIA As Integer
Dim DATA As String
Dim i As Integer
[ô]Dim x As Integer
Dim PARCELA As Currency
Dim SQL As String
Dim n_PARC As Integer
If n_PARC = 0 Then n_PARC = 1
Call Abrir_BancodeDados
SQL = [Ô]SELECT * FROM PARCELAS[Ô]
Set RS = BD.OpenRecordset(SQL)
var_Mes = Format(txtInicio, [Ô]mm[Ô])
var_Ano = Format(txtInicio, [Ô]yy[Ô])
For i = 1 To Val(txtQuant.Text)
Autonumeracao_Parcelas
If var_Mes > 12 Then
var_Mes = 1
var_Ano = var_Ano + 1
End If
var_Dia = Int(cboDiaPgto)
DIA = var_Dia
DATA =[txt-color=#e80000] Verifica_Dia(var_Dia, var_Mes) [/txt-color]& [Ô]/[Ô] & Format(var_Mes, [Ô]00[Ô]) & [Ô]/[Ô] & Format(var_Ano, [Ô]00[Ô])
RS.AddNew
RS!CODIGO = x
RS!COD_MATRICULA = CLng(lblCodMatricula.Caption)
RS!COD_CLIENTE = CLng(txtCodCliente.Text)
RS!Numero = n_PARC
RS!VENCIMENTO = Format(CDate(DATA), [Ô]dd/mm/yy[Ô])
RS!Valor = CCur(txtParc.Text)
RS.Update
var_Mes = var_Mes + 1
n_PARC = n_PARC + 1
Next
End Sub
Public Function Verifica_Dia(DIA, var_Mes)
Dim diasDoMes As Variant
DIA = Val(DIA)
diasDoMes = Array(31, 28, 30, 30, 31, 30, 31, 30, 30, 31, 30, 31)
[txt-color=#e80000][ô]If DIA = 31 Then
If DIA > diasDoMes(var_Mes - 1) Then[/txt-color]
Verifica_Dia = diasDoMes(var_Mes - 1)
Else
Verifica_Dia = DIA
End If
End Function
olha colega como é simples
veja o código acima a simplicidade é formidável, no caso usei apenas o DateAdd, no exemplo acima exibo as parcelas em um listbox
se você fizer o teste verá que as parcelas serão exibidas corretamente
Private Sub Command1_Click()
GeraParcelas [Ô]30/01/2012[Ô], 3
End Sub
Function GeraParcelas(DataIni As Date, quant As Integer)
List1.Clear
DataIni = DateAdd([Ô]m[Ô], -1, DataIni)
For P = 1 To quant
List1.AddItem P & [Ô] - [Ô] & DateAdd([Ô]m[Ô], P, DataIni)
Next P
End Function
veja o código acima a simplicidade é formidável, no caso usei apenas o DateAdd, no exemplo acima exibo as parcelas em um listbox
se você fizer o teste verá que as parcelas serão exibidas corretamente
Se te interessar, veja a modificação sugerida para seu projeto
bom não sei se funcionara faça os testes
Private Sub Gerar_Parcelas()
Dim i As Integer
Dim SQL As String
Dim DataIni As Date
Dim QuantParcelas As Integer
DataIni = CDate(txtInicio.Text)
QuantParcelas = CInt(txtQuant.Text)
Call Abrir_BancodeDados
SQL = [Ô]SELECT * FROM PARCELAS[Ô]
Set RS = BD.OpenRecordset(SQL)
DataIni = DateAdd([Ô]m[Ô], -1,DataIni)
For i = 1 To QuantParcelas
RS.AddNew
RS!CODIGO = x
RS!COD_MATRICULA = CLng(lblCodMatricula.Caption)
RS!COD_CLIENTE = CLng(txtCodCliente.Text)
RS!Numero = i
RS!VENCIMENTO = Format(DateAdd([Ô]m[Ô], i, DataIni), [Ô]dd/mm/yy[Ô])
RS!Valor = CCur(txtParc.Text)
RS.Update
Next i
End Sub
bom não sei se funcionara faça os testes
Citação::
olha colega como é simplesPrivate Sub Command1_Click()
GeraParcelas [Ô]30/01/2012[Ô], 3
End SubFunction GeraParcelas(DataIni As Date, quant As Integer)
List1.Clear
DataIni = DateAdd([Ô]m[Ô], -1, DataIni)
For P = 1 To quant
List1.AddItem P & [Ô] - [Ô] & DateAdd([Ô]m[Ô], P, DataIni)
Next P
End Function
veja o código acima a simplicidade é formidável, no caso usei apenas o DateAdd, no exemplo acima exibo as parcelas em um listbox
se você fizer o teste verá que as parcelas serão exibidas corretamente
Muito bom o exemplo marcelo.
Tópico encerrado , respostas não são mais permitidas