Visualizzazione dei risultati da 1 a 10 su 10

Discussione: VB6 Controllo Timer

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    120

    VB6 Controllo Timer

    Salve a tutti!
    Devo poter far visuallizzare in sequenza una serie di immagini che prelevo dal db attraverso una query,devo utilizzare il controllo Timer,facevo la query all'interno dell'evento timer e il risultato lo caricavo all'interno del controllo Image(anche questo all'interno dell'evento Timer), purtroppo carica solo la prima immagine...come posso fare?
    Grazie 1000

  2. #2
    Puoi postare il codice incriminato?
    Vuoi sbattezzarti? Guarda QUI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    120

    VB6 Controllo Timer

    Ecco il codice:

    Private Sub Timer1_Timer()
    Do While Not RS.EOF
    SQL = "select nome_file,pathall,data,commento from fileallega
    Call Carica(SQL)
    RS.MoveNext
    Loop
    End Sub

    Public Function Carica(SQL As String)
    On Error GoTo 0
    Set RS = CreateObject("ADODB.Recordset")
    RS.Open SQL, ConnAdo
    If Err <> 0 Then
    MsgBox Error, vbCritical
    Exit Function
    End If
    Image2 = LoadPicture(RS(1) & "\" & RS(0))
    End Function

  4. #4

    Re: VB6 Controllo Timer

    Originariamente inviato da binbum
    Ecco il codice:

    Private Sub Timer1_Timer()
    Do While Not RS.EOF
    SQL = "select nome_file,pathall,data,commento from fileallega
    Call Carica(SQL)
    RS.MoveNext
    Loop
    End Sub

    Public Function Carica(SQL As String)
    On Error GoTo 0
    Set RS = CreateObject("ADODB.Recordset") <--errore, leggi sempre il 1°
    RS.Open SQL, ConnAdo
    If Err <> 0 Then
    MsgBox Error, vbCritical
    Exit Function
    End If
    Image2 = LoadPicture(RS(1) & "\" & RS(0))
    End Function
    L'errore è logico perchè ogni volta che chiami la funzione Carica instanzi nuovamente il recordset, è per questo che leggi sempre il primo record. Dunque instanzia il recordset all'esterno delle 2 procedure e nel timer fai un semplice movenext (prima però controlla che non sia EOF!)

    Dovrebbe funzionare :master:
    Vuoi sbattezzarti? Guarda QUI

  5. #5
    Leggendo il codice mi stupisce che ti carichi solo la prima, io avrei pensato solo l'ultima...
    In realtà te le carica tutte, ma talmente veloce che non riesci a vederle o che il pc non fa in tempo a visualizzarle. Nel codice non è il Timer che controlla il caricamento delle immagini, ma è il ciclo DoWhile-Loop. Infatti il comando RS.MoveNext l'hai messo nel ciclo, quindi ogni volta che si verifica l'evento Timer1_Timer, ti verranno visualizzate tutte le immagini nel giro di un attimo.
    Se la tua intenzione è quella di visualizzare un'immagine ogni Timer1_Timer basta che togli il ciclo (al massimo inserisci il controllo prima di RS.MoveNext per verificare di non aver raggiunto la fine del database).
    Se invece vuoi visualizzare tutte le immagini del database al singolo evento Timer1_Timer inserisci i comandi "Image2.Refresh" e "DoEvents" dopo "Image2 = LoadPicture(RS(1) & "\" & RS(0))"

  6. #6
    Oups... quello che dice Last_Winter è vero...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    120

    VB6 Controllo Timer

    Salve a tutti!
    Ho provato a fare così:

    Private Sub Timer1_Timer()
    Do While Not RS.EOF
    SQL = "select nome_file,pathall from fileallegati"
    Call carica(SQL)
    RS.MoveNext
    Loop
    End Sub

    Public Function carica(SQL As String)
    On Error GoTo 0
    Set RS = CreateObject("ADODB.Recordset")
    RS.Open SQL, ConnAdo
    If Err <> 0 Then
    MsgBox Error, vbCritical
    Exit Function '
    End If
    Image2 = LoadPicture(RS(1) & "\" & RS(0))
    Image2.Refresh
    DoEvents
    End Function


    Ora non mi carica alcuna immagine!!!!!
    Grazie 1000 a tutti

  8. #8
    Inserendo Image.Refresh e DoEvents cambia che lasci al pc il tempo per caricare l'immagine, in modo che riesci a vedere il passaggio tra un'immagine e l'altra, ma non influisce sul fatto che l'immagine venga caricata o no. Inoltre non hai fatto la correzione di cui parlava Last_Winter, cioè togliere le righe
    codice:
    Set RS = CreateObject("ADODB.Recordset") 
    RS.Open SQL, ConnAdo
    e le righe di gestione degli errori, che diventerebbero inutili.

  9. #9
    Prova questo:

    Private sub Inizializza()
    SQL = "select nome_file,pathall from fileallegati"

    Set RS = CreateObject("ADODB.Recordset")
    RS.Open SQL, ConnAdo
    Timer_Start
    If Err <> 0 Then
    MsgBox Error, vbCritical
    Exit Function '
    End If

    End sub

    Private Sub Timer1_Timer()

    if RS.EOF then
    exit sub 'oppure fai un movefirst...
    end if

    RS.MoveNext

    if RS.EOF then
    exit sub 'oppure fai un movefirst...
    end if

    Call carica(RS(1),RS(0))
    End Sub

    Private sub carica(Rec1 As String,Rec2 as String)
    On Error GoTo 0
    Image2 = LoadPicture(RS(1) & "\" & RS(0))
    Image2.Refresh
    DoEvents
    End Sub

    Forse ci siamo.... :master:
    Vuoi sbattezzarti? Guarda QUI

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    120

    VB6 Controllo Timer

    Salve e grazie a tutti!
    Ho messo il codice di Last_Winter ed è andato tutto bene tranne una cosa...non mi visualizzava la prima immagine presente nel db e quindi la Call Carica(RS(1),RS(0)) l'ho messa prima del RS.MoveNext e così visualizzava anche la prima immagine!
    Grazie 100000

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.