Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354

    [VB6] Evento che parte in ritardo o in background

    In un form ho alcune combobox che si riempiono all'avvio del form stesso...solo che questa procedura ci impiega circa 1minuto...e non mi piace proprio l'idea di lanciare il form e dover aspettare perchè si apra. Avevo pensato ad un evento temporizzato. Ossia, dopo 5secondi da quando è attivo il form parte il riempimento delle combobox. Penso con il comando Timer, ma non so proprio come si il codice.
    oppure, c'è un modo per fare il riempimento delle combo in background? mantenendo finchè non è finito la combobox non attiva...

  2. #2
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    Che db usi e quanti dati carichi mi pare strano ci metta così tanto!!!!

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: [VB6] Evento che parte in ritardo o in background

    Originariamente inviato da Folcus
    In un form ho alcune combobox che si riempiono all'avvio del form stesso...solo che questa procedura ci impiega circa 1minuto...e non mi piace proprio l'idea di lanciare il form e dover aspettare perchè si apra. Avevo pensato ad un evento temporizzato. Ossia, dopo 5secondi da quando è attivo il form parte il riempimento delle combobox. Penso con il comando Timer, ma non so proprio come si il codice.
    oppure, c'è un modo per fare il riempimento delle combo in background? mantenendo finchè non è finito la combobox non attiva...
    Quella di caricare i combobox con i dati di un DB è una prassi che evito il più possibile, la uso solo se sono pochissimi dati per combo (15-20).
    Considerando poi che raramente i dati nei combobox sono utilizzati tutti, o tutti insieme.
    E se ci impiega un minuto, allora sicuramente è un implementazione da rivedere, troppo tempo.

    A parte questo, puoi tentare di 'alleviare' un po' il caricamento caricando prima il form, mostrandolo e poi caricare i combo.
    Devi mettere il codice di caricamento in una routine Public del form:
    codice:
        Public Sub CaricaCombo()
            Rem ----------------------------
            Rem codice che popola i combo
            Rem ----------------------------
        End Sub
    Quando devi caricare il form fai così
    codice:
        Dim fDati As frmDati
        Set fDati = New frmDati
        Load fDati
        With fDati
            .Show
            .Enabled = False ' per evitare che l'utente smanetti
            .CaricaCombo
            .Enabled = True
            Set fDati = Nothing
        End Wiht
    Ricorda anche di aprire i recordset indicando solo il comando SQL e la connessione:
    codice:
        rs.Open sStringaSQL, CN
    Questo è il modo più veloce di ottenre i dati.

    Però io rimango dell'idea che va riveduta l'implementazione

    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354
    il problema è che ci sono 3combobox da riempire con i dati provenienti da un DB (access).
    una è con la lista completa dei comuni d'italia (circa 15000records)
    una è con la lista completa delle province d'italia (circa 150records)
    e una è con i nominativi di un'associazione (circa 2000records)

    per quello ci impiega un botto di tempo...e per quello pensavo ad effettuare tale riempimento a form avviato...

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    354
    ho provato col codice da te proposto e ottengo un leggerissimo miglioramento...ma non a tal punto da rendere "fluido" il programma in apertura...

    non è una cosa importantissima questa eh...è un programmino interno per me...ma se riuscissi sarebbe cosa ottima capire come fare queste cose per programmini futuri...

  6. #6
    Utente di HTML.it L'avatar di bum
    Registrato dal
    Jun 2008
    Messaggi
    234
    Io quando ho tanti dati in un db access dopo la query faccio rs.MoveLast e poi lo riporto su con rs.MoveFirst, così forzo il caricamento di tutti i dati in memoria.

    Prova a vrdere se trai un miglioramento nel tuo caso

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Folcus
    il problema è che ci sono 3combobox da riempire con i dati provenienti da un DB (access).
    una è con la lista completa dei comuni d'italia (circa 15000records)
    una è con la lista completa delle province d'italia (circa 150records)
    e una è con i nominativi di un'associazione (circa 2000records)

    per quello ci impiega un botto di tempo...e per quello pensavo ad effettuare tale riempimento a form avviato...
    Caspita! Te lo credo che che è lento. VVoVe:
    No, così non va bene; è inutile caricare 15000 comuni e 2000 associazioni (passi per le provincie...). Loè per te ma anche per l'utente, che non ce lo vedo a scorrere 15000 comuni in cerca di un determinato comune, lo stesso vale per le associazioni, ma anche per le province.
    Non so che tipo di selezione devi fare (e se magari lo spieghi possiamo discuterne), ma qualsiasi cosa tu debba fare: questa implementazione è sbagliata .

    Guarda questi progetti, vedi come funzionano e vedrai la semplicità e la velocità di esecuzione:

    ADO DataProject 2
    http://nuke.vbcorner.net/Progetti/VB...8/Default.aspx

    ProvaLogin
    http://nuke.vbcorner.net/Progetti/VB...3/Default.aspx

    Nel primo c'è proprio la selezione dei comuni d'Italia, completo di database con + di 80.000 record (se non ricordo male) perchè comprende anche le vie (già dalle immagini si intuisce...).

    Poi ne riparliamo.

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.