none
Istruzione Doevents RRS feed

  • Domanda

  • Salve  a tutti,

    ho una domanda da porre alla vostra attenzione:

    in una subroutine in vb6

    utilizzo un ciclo while per scorrere un recordset ed effettuare determinate operazioni,

    all'interno di questo ciclo uso un'istruzione doevents per permettere al SO, durante questo ciclo, di operare normalmente. Tuttavia, ad un certo punto, finito il ciclo, la routine si blocca, non prosegue le istruzioni successive, come se il SO non restituisce il controllo a VB6.

    Come posso fare a risolvere il problema ? Esiste una soluzione ?

    Grazie in anticipo delle eventuali risposte

    martedì 4 settembre 2012 09:40

Tutte le risposte

  • Ciao AngeloF,

    non credo dipenda dal DoEvents ti conviene mettere delle info di Debug per controllare il tuo ciclo per identificare la causa del tuo problema.

    Eventualmente posta (se non è una valagata di materiale) il codice in questione.

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    martedì 4 settembre 2012 14:20
  • Il codice è questo :

        If DBMng.RstOpen(DBSoc.objDbSocieta, rsSchema, sSql, dbOpenSnapshot) Then
        
            Call DBMng.RstMoveLast(rsSchema)
            nMax = DBMng.RstRecordCount(rsSchema)
            Call DBMng.RstMoveFirst(rsSchema)
            
            stbMain.Text = "Caricamento Layout del Documento..."
        
            Do While Not DBMng.RstEOF(rsSchema)
            
                stbMain.FloodPercent = ncol * 100 \ nMax
                If (ncol \ 5) * 5 = ncol Then DoEvents
                nCodSchema = rsSchema!CodiceSchema        
            
                
                'ALTRE OPERAZIONI
                
                If Not DBMng.RstMoveNext(rsSchema) Then Exit Do
                ncol = ncol + 1    
            Loop
        
        end if

        'ALTRO CODICE ...

    Il codice che ho messo sopra, non è stato creato da me, comunque, ti spiego come è architettato:

    Si tratta di una form per la stampa delle fatture di un'azienda, in questa parte specifica di codice c'è proprio il pezzo di codice contenuto in una routine di una classe specifica, istanziata in fase di stampa.Ecco, il problema nasce solo su paticolari fatture, mentre sulle altre fatture il problema non esiste.Il problema in sè, è che per quelle particolari fatture la routine non giunge alla fine del loop, basta però un click sulla form, perchè tutto riproceda correttamente; mi è venuto in mente allora la funzione Doevents che restituisce il controllo al SO.

    Se ti servono altre info fammi sapere, comunque al momento grazie

    martedì 4 settembre 2012 15:24
  • Ciao AngeloF,

    molto strano ... io comunque modifichere questa riga da

    If (ncol \ 5) * 5 = ncol Then DoEvents

    a

    DoEvents

    quanto al blocco è veramente strano il programma deve comunque lavorare il DoEvents viene messo solo per dare spazio alla coda messaggi di Windows (es. refresh video)

    Io proverei a mettere un log su file per capire dove si blocca (quando si blocca)

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    martedì 4 settembre 2012 16:00
  • mettendo solamente DoEvents rimane tutto come prima,

    provo adesso a scrivere un file di log con i cicli del loop, ti farò sapere

    ............

    ............

    ..........

    Ho scritto il file di log, e ho notato che il blocco avviene proprio la

    prima volta che entra nell'istruzione

    If (ncol \ 5) * 5 = ncol Then DoEvents

    E' come se con questo doevents il controllo passasse al SO e non tornasse più all'applicazione

    • Modificato AngeloNew martedì 4 settembre 2012 16:40
    martedì 4 settembre 2012 16:29
  • Ciao AngeloF,

    più che al SO non è che entra in gioco qualche altra parte del tuo programma ?

    Ricorda che DoEvents permette di far eseguire anche eventi interni al tuo programma.

    PS Consiglio ... quando aggiungi informazioni fai un Reply e non modificare il testo precedente altrimenti non viene notificata la notizia a chi ha sottoscritto il thread e magari non si accorge che hai integrato le informazioni.

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato


    martedì 4 settembre 2012 18:32
  • credo di no, comunque non saprei come fare a capirlo
     ed eventualmente ad impedirlo
    • Modificato AngeloNew mercoledì 5 settembre 2012 07:56
    mercoledì 5 settembre 2012 07:56