PDA

Visualizza la versione completa : VB.NET mi sono perso nel Timer....


iceberg
20-05-2002, 23:54
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

Boldan
21-05-2002, 10:38
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!!:stordita:

vonkranz
21-05-2002, 10:42
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.

iceberg
21-05-2002, 10:42
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

Boldan
21-05-2002, 10:52
Per il controllo dell'esecuzione corretta del trasferimento ne abbiamo già discusso nel forum.

http://forum.html.it/forum/showthread.php?s=&threadid=235708&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!!:ciauz:

iceberg
21-05-2002, 14:32
Grazie per tutte le info!

Faccio un po' di prove;)

iceberg
21-05-2002, 15:27
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.

Boldan
21-05-2002, 16:30
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:

Loading