Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB6] velocizzare carico datagrid

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Secondo me alcuni loop di lettura non servono in quanto memorizzi nelle variabili solamente il contenuto dell'ultimo record letto, esempio:

    codice:
    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
    Io lo modificherei in questo modo:

    codice:
    Set Data4.Recordset = Db.OpenRecordset("select * from limiti where datalimite <= #" & Format(datai, "mm/dd/yyyy") & "# order by datalimite ")
    If Not Data4.Recordset.EOF Then
       Data4.MoveLast
       datalimite = Data4.Recordset!datalimite
       primolimite = Data4.Recordset!primolimite
       secondolimite = Data4.Recordset!secondolimite
       terzolimite = Data4.Recordset!terzolimite
    End If
    Data4.Recordset.Close
    Già togliendo alcuni di questi loop dovresti migliorare in prestazioni.
    Ciao

  3. #3
    grazie mgmg ma li devo toglierli a tutti o solo a quello indicato da te

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Devi togliere tutti quelli dove ti memorizzi i dati dell'ultimo record, negli altri dove fai delle somme, va bene come hai fatto. Non ti ho ripostato tutto il codice per non farti confusione ma, per esempio, anche questo è da variare.

    codice:
        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
        If Not data5.EOF Then
            data5.MoveLast
            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
        End If
        'data5.Recordset.MoveNext
        'Loop
        data5.Recordset.Close
    Ciao

  5. #5
    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.