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

    VB.NET mi sono perso nel Timer....

    Mi sto perdendo: vorrei far leggere da un DB ogni 30 Secondi se l'ora corrente è presente nel DB, in caso affermativo eseguire il Microsoft Transfer Control (prendendo ovviamente altre info presenti nel Record (o nei Record) che rispondono alla condizione: IP ecc..)


    Qualcuno puo' gentilmente aiutarmi????


    Private Sub FRMSEND_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load

    ' apro la connessione
    ImpostaCostanti()
    Dim cn As ADODB.Connection = New ADODB.Connection
    Dim rs As ADODB.Recordset = New ADODB.Recordset

    cn.Open(Connessione)
    rs.Open("SELECT Client.Data, Client.Ora, Client.IP, Client.Login, Client.Password, Client.CartellaOrigine, Client.CartellaDestinazione FROM Client", cn)
    If Not rs.EOF Then
    Do While Not rs.EOF


    ' a questo punto dovrei inserire il TIMER ed eseguire il Microsoft Transfer Control con i dati ricavati dal DB (IP, Login e PSW), ma non so come fare

    '....... TIMER

    Dim oraprefissata

    oraprefissata = (rs.Fields("Login").Value)

    If oraprefissata =

    ' ....... MTC



    rs.MoveNext()



    Loop
    End If
    rs.Close()
    cn.Close()

    rs = Nothing
    cn = Nothing

    End Sub
    Iceberg

  2. #2

    L'inizio va bene, ma...

    L'inizio è corretto, infatti sull'apertura della form apri il database.
    Poi dovresti impostare la prorpietà Enabled di timer a True (di default devi impostarla a False).
    Non appena imposti tale prorprità a True si attiva il timer e ogni X millisecondi (quelli specificati nella prorpietà Interval) verrà generato l'evento Timer nel quale dovrai scrivere il codice di lettura del database per verificare se l'ora attuale (funzione Time) è presente in un record ed eseguire il trasferimento del file.
    Un consiglio: la lettura del database è molto lenta se ti scorri tutto il database fino a fine file (EOF) soprattutto se all'interno del DB ci sono molti records. Ti conviene impostare una chiave con l'ora di esecuzione, in questo modo puoi effettuare une ricerca (Seek) direttamente con l'ora che ricavi dalla funzione Time.

    Spero sia abbastanza chiaro, fammi sapere...

    Ciao!!
    lupusinfabula

    Programmatore VB, ASP, Delphi.

  3. #3
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    Ad esclusione dell'apertura della connessione e della creazione del recordset, tutta la parte di ricerca dell'ora nel recordset stesso e la parte di attivazione del Microsoft Transfer Control, la devi fare nell'evento timer dell'oggetto timer che avra' la prop. interval impostata a 30000 millisecondi.
    Ti consiglio di mettere anche un refresh del recordset prima di fare la ricerca che ti interessa (sempre nell'evento timer) per fare in modo di avere i dati il + aggiornati possibile.
    Questo in VB6, ma penso che l'oggetto timer in vb.net non sia molto diverso.
    ...and I miss you...like the deserts miss the rain...

  4. #4
    Ti rigrazio per la risposta! A livello teorico ho capito, ma non riesco ad utilizzare l'oggetto TIMER e, soprattutto far eseguire il trasferimento di files (tramite Microsoft Internet Transfer Controll) e controllare che venga eseguito tutte le volte che l'ora corrente è presente nel DB

    Per quanto riguarda il problema dei records, sono al massimo 20 quindi non dovrei preoccuparmi per la velocità ... spero!


    Grazie ancora
    Iceberg

  5. #5

    Per il controllo...

    Per il controllo dell'esecuzione corretta del trasferimento ne abbiamo già discusso nel forum.

    http://forum.html.it/forum/showthrea...highlight=Inet

    Mentre per il fatto che non ti funziona il trasferimento dovresti scrivermi il codice che utilizzi nell'evento timer, così da poter verificare eventuali errori. Ad ogni modo, già gestendo l'evento StateChanged di Inet dovresti riuscire a capire dov'è l'errore.

    Fai quindi riferimento a quanto già detto nel forum. (Se fai una ricerca della parole Inet ti viene fuori tutto!!)

    Ciao!!
    lupusinfabula

    Programmatore VB, ASP, Delphi.

  6. #6
    Grazie per tutte le info!

    Faccio un po' di prove
    Iceberg

  7. #7
    Sto facendo alcune prove ma ho riscontrato dei problemi

    1) la SUB dell'oggetto TIMER non posso metterla dentro la SUB FRMSEND_Load(ByVal eventSender ...???
    mi da errore! dove devo metterla? (per fare in modo che sia sempre in esecuzione)

    2) stavo pensando che controllando ogni minuto la presenza di quell'ora nel DB, potrei perdere alcuni Record! Forse sarebbe meglio controllare solo l'ora (e non ora+minuti) (non mi viene in mente altra soluzione); quindi come posso ricavare solo l'ora da

    Dim adesso As Date = DateTime.Now

    e dall'elemento preso dal DB?

    oraprefissata = (rs.Fields("Ora").Value)



    Scusate le domanda ma lo saprei fare solo con ASP e sul libro di VB (che sto cercando di studiare) non trovo nulla sulla gestiore dell'ora.
    Iceberg

  8. #8

    Prova così...

    Per quanto riguarda la sub dell'oggetto Timer essa viene richiamata dall'evento generato dall'oggetto, quindi non devi proccuparti della sua esecuzione, avverrà ogni X secondi (come specificato dalla proprietà interval).
    Per quanto riguarda il recupero dell'ora puoi usare la funzione Format(adesso, "hh").

    Ciao!!:gren:
    lupusinfabula

    Programmatore VB, ASP, Delphi.

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.