salve ragazzi vi posto un pezzo del progetto per visualizzare
un conto a scalare nel datagrid degli interessi maturati giorno per giorno piu le relative spese di un conto corrente funziona perfettamente ma e un po lento per via del controllo che deve fare
di tutti i giorni
lo fatto in base alle mie poche esperienze in gwbasic
se qualcuno gentilmente gli darebbe uno sguardo per vedere se si potrebbe velocizzare con qualche stringa piu completa di vb6
<------------------------------------------------------------------->
Private Sub DTPicker1_Change(Index As Integer)
datai = Format(DTPicker1(0).Value, "DD/MM/YYYY")
dataf = Format(DTPicker1(1).Value, "DD/MM/YYYY")
Label6.Caption = Format(DTPicker1(1), "dd/mm/yyyy")
competenze
End Sub
---------------------------------------------------------------------
Sub competenze()
numeroperazioni = 0
si = 0
saldo = 0
versamenti = 0
assegni = 0
spese = 0
primomaxsco = 0
secondomaxsco = 0
Label11.ForeColor = &H8000&
Label8.ForeColor = vbRed
Label7.Caption = FormatCurrency(0)
Label8.Caption = FormatCurrency(0)
Label11.Caption = FormatCurrency(0)
Rs.Close
Rs.Open QR, Cn, adOpenDynamic, adLockBatchOptimistic
' trova tutti i versamenti fino a datai
Set Data1.Recordset = Db.OpenRecordset("select * from versamenti where datavaluta <= #" & Format(datai, "mm/dd/yyyy") & "# order by datavaluta ")
Do Until Data1.Recordset.EOF
versamenti = versamenti + Data1.Recordset!versamento
Data1.Recordset.MoveNext
Loop
Data1.Recordset.Close
'trova tutti gli assegni con scadenza fino a datai
Set Data2.Recordset = Db.OpenRecordset("select * from assegni where datascadenza <= #" & Format(datai, "mm/dd/yyyy") & "# order by datascadenza ")
Do Until Data2.Recordset.EOF
assegni = assegni + Data2.Recordset!valoreassegno
Data2.Recordset.MoveNext
Loop
Data2.Recordset.Close
' trova tutte le spese ed interessi con valuta fino a datai
Set Data3.Recordset = Db.OpenRecordset("select * from spese_interessi where datavaluta <= #" & Format(datai, "mm/dd/yyyy") & "# order by datavaluta ")
Do Until Data3.Recordset.EOF
spese = spese + Data3.Recordset!importospese
Data3.Recordset.MoveNext
Loop
Data3.Recordset.Close
' trova tutti i limiti fino a datai
Set Data4.Recordset = Db.OpenRecordset("select * from limiti where datalimite <= #" & Format(datai, "mm/dd/yyyy") & "# order by datalimite ")
Do Until Data4.Recordset.EOF
datalimite = Data4.Recordset!datalimite
primolimite = Data4.Recordset!primolimite
secondolimite = Data4.Recordset!secondolimite
terzolimite = Data4.Recordset!terzolimite
Data4.Recordset.MoveNext
Loop
Data4.Recordset.Close
' trova tutte le % interessi fino a datai
Set Data5.Recordset = Db.OpenRecordset("select * from tassi_operazioni where datainizio_tasso <= #" & Format(datai, "mm/dd/yyyy") & "# order by datainizio_tasso ")
Do Until Data5.Recordset.EOF
datainiziotasso = Data5.Recordset!datainizio_tasso
primotassodeb = Data5.Recordset!primotassodebitore
secondotassodeb = Data5.Recordset!secondotassodebitore
tassocreditore = Data5.Recordset!tassocreditore
primoscoperto = Data5.Recordset!primo_scoperto
secondoscoperto = Data5.Recordset!secondo_scoperto
spesechiusura = Data5.Recordset!spesechiusura
speseperoperazione = Data5.Recordset!speseperoperazione
Data5.Recordset.MoveNext
Loop
Data5.Recordset.Close
rimanenza = 0
rimanenza = versamenti - assegni - spese
ddatai = datai
ritorno:
datai = DateAdd("d", 1, datai)
If datai <= dataf Then
' trova i versamenti alla datai
Set Data1.Recordset = Db.OpenRecordset("select * from versamenti where datavaluta = #" & Format(datai, "mm/dd/yyyy") & "#")
If Data1.Recordset.RecordCount <> 0 Then
Do Until Data1.Recordset.EOF
versamenti = versamenti + Data1.Recordset!versamento
numeroperazioni = numeroperazioni + 1
Data1.Recordset.MoveNext
Loop
si = si + 1
End If
Data1.Recordset.Close
'trova gli assegni con scadenza alla datai
Set Data2.Recordset = Db.OpenRecordset("select * from assegni where datascadenza = #" & Format(datai, "mm/dd/yyyy") & "#")
If Data2.Recordset.RecordCount <> 0 Then
Do Until Data2.Recordset.EOF
assegni = assegni + Data2.Recordset!valoreassegno
numeroperazioni = numeroperazioni + 1
Data2.Recordset.MoveNext
Loop
si = si + 1
End If
Data2.Recordset.Close
' trova le spese ed interessi con valuta datai
Set Data3.Recordset = Db.OpenRecordset("select * from spese_interessi where datavaluta = #" & Format(datai, "mm/dd/yyyy") & "#")
If Data3.Recordset.RecordCount <> 0 Then
Do Until Data3.Recordset.EOF
spese = spese + Data3.Recordset!importospese
numeroperazioni = numeroperazioni + 1
Data3.Recordset.MoveNext
Loop
si = si + 1
End If
Data3.Recordset.Close
' trova tutti i limiti alla datai
Set Data4.Recordset = Db.OpenRecordset("select * from limiti where datalimite = #" & Format(datai, "mm/dd/yyyy") & "#")
If Data4.Recordset.RecordCount <> 0 Then
Do Until Data4.Recordset.EOF
datalimite = Data4.Recordset!datalimite
primolimite = Data4.Recordset!primolimite
'secondolimite = Data4.Recordset!secondolimite
Data4.Recordset.MoveNext
Loop
si = si + 1
End If
Data4.Recordset.Close
' trova tutte le % interessi alla datai
Set Data5.Recordset = Db.OpenRecordset("select * from tassi_operazioni where datainizio_tasso = #" & Format(datai, "mm/dd/yyyy") & "#")
If Data5.Recordset.RecordCount <> 0 Then
Do Until Data5.Recordset.EOF
datainiziotasso = Data5.Recordset!datainizio_tasso
primotassodeb = Data5.Recordset!primotassodebitore
secondotassodeb = Data5.Recordset!secondotassodebitore
tassocreditore = Data5.Recordset!tassocreditore
primoscoperto = Data5.Recordset!primo_scoperto
secondoscoperto = Data5.Recordset!secondo_scoperto
spesechiusura = Data5.Recordset!spesechiusura
speseperoperazione = Data5.Recordset!speseperoperazione
Data5.Recordset.MoveNext
Loop
si = si + 1
End If
Data5.Recordset.Close
If si <> 0 Then
si = 0
debitori = 0
creditori = 0
intdeb = 0
intcred = 0
tasso = 0
giorni = DateDiff("d", ddatai, datai)
If rimanenza < 0 Then
debitori = rimanenza * giorni
debitori = debitori - debitori - debitori
If rimanenza > primolimite Then
intdeb = (((debitori / 366) / 100) * primotassodeb)
tasso = primotassodeb
primomaxsco = rimanenza
Else
dif = rimanenza - primolimite
dif = dif * giorni
rimanenza = primolimite - primolimite - primolimite
intdeb = (((rimanenza / 366) / 100) * primotassodeb)
tasso = primotassodeb
debitori = primolimite * giorni
debitori = debitori - debitori - debitori
rimanenza = primolimite
If primomaxsco > rimanenza Then
primomaxsco = rimanenza
End If
primomaxsco = primomaxsco - primomaxsco - primomaxsco
Rs.AddNew
Rs!datavaluta = ddatai
Rs!percentuale = tasso
Rs!saldipervaluta = FormatCurrency(rimanenza)
Rs!giorni = giorni
Rs!numerodebitori = debitori
Rs!interessidebitori = FormatCurrency(intdeb)
Rs!numerocreditori = creditori
Rs!interessicreditori = FormatCurrency(intcred)
Rs.Update
rimanenza = dif / giorni
dif = dif - dif - dif
intdeb = (((dif / 366) / 100) * secondotassodeb)
tasso = secondotassodeb
debitori = dif
If secondomaxsco > rimanenza Then
secondomaxsco = rimanenza
secondomaxsco = secondomaxsco - secondomaxsco - secondomaxsco
End If
End If
Else
creditori = rimanenza * giorni
intcred = (((creditori / 366) / 100) * tassocreditore)
tasso = tassocreditore
End If
Rs.AddNew
Rs!datavaluta = ddatai
Rs!percentuale = tasso
Rs!saldipervaluta = FormatCurrency(rimanenza)
Rs!giorni = giorni
Rs!numerodebitori = debitori
Rs!interessidebitori = FormatCurrency(intdeb)
Rs!numerocreditori = creditori
Rs!interessicreditori = FormatCurrency(intcred)
Rs.Update
ddatai = datai
End If
rimanenza = versamenti - assegni - spese
GoTo ritorno
End If
Set DataGrid1.DataSource = Rs 'riempie la vostra griglia coi dati del recorset
saldo = versamenti - assegni - spese
If saldo < 0 Then
Label7.ForeColor = vbRed
Label7.Caption = FormatCurrency(saldo)
Else
Label7.ForeColor = &H8000&
Label7.Caption = FormatCurrency(saldo)
End If
aggiornalabel
End Sub
----------------------------------------------------------------------
Sub aggiornalabel()
intdeb = 0
intcred = 0
If Rs.AbsolutePosition < 0 Then Exit Sub
If Rs.RecordCount <> 0 Then
Rs.MoveFirst
Do While Not Rs.EOF
intdeb = intdeb + DataGrid1.Columns("Interessi Debitori").Value
Label8.Caption = FormatCurrency(intdeb)
intcred = intcred + DataGrid1.Columns("interessi creditori").Value
Label11.Caption = FormatCurrency(intcred)
Rs.MoveNext
Loop
End If
Label13.Caption = numeroperazioni
Label17.Caption = FormatCurrency(numeroperazioni * speseperoperazione)
Label19.Caption = primoscoperto
Label23.Caption = secondoscoperto
Label15.Caption = FormatCurrency(primomaxsco)
Label21.Caption = FormatCurrency(secondomaxsco)
Label26.Caption = FormatCurrency(primomaxsco * primoscoperto / 100)
Label27.Caption = FormatCurrency(secondomaxsco * secondoscoperto / 100)
Label29.Caption = FormatCurrency(intdeb + (numeroperazioni * speseperoperazione) + (primomaxsco * primoscoperto / 100) + (secondomaxsco * secondoscoperto / 100) + spesechiusura - intcred)
Label30.Caption = FormatCurrency(spesechiusura)
End Sub