Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Orologio
Forum - Visual Basic 6 - Orologio

Avatar
flappo (Normal User)
Newbie


Messaggi: 16
Iscritto: 06/10/2007

Segnala al moderatore
Postato alle 22:01
Mercoledì, 25/11/2009
Ciao a tutti, e ringrazio sin d'ora chi mi può aiutare.
Il mio problema è il segunete. Ho creato dbgrid,dove ho inseristo in base ai giorni della settimana, gli orari di accensione/spegnimento di una luce ad esempio.
Tramite la lettura del TIME del sistema leggo il tempo che trascorre.Devo fare in modo che leggendo l'ora impostata nella dbgrid, accenda e spenga una luce ad esempio. Bisogna fare attenzione che ci sono vari programmi es. Programma 1) 20.15 on - 22.15 off , programma 2) 20.20 on - 20.21 off. Io con un ciclo FOR riesco a far accendere la luce con il programma 1 , ma quando passo alla programmazione 2 mi spegne la luce (alle 20.21) anche se il primo programma non è terminato. Forse sbaglio di ciclare la dbgrid.   aiutatemi se riuscite, datemi dei consigli
Grazie, Ciao

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 11:13
Giovedì, 26/11/2009
evidentemente sbagli qualcosa... ma come possiamo fare a correggere il tuo errore se non posti il codice che usi?:-|

PM Quote
Avatar
flappo (Normal User)
Newbie


Messaggi: 16
Iscritto: 06/10/2007

Segnala al moderatore
Postato alle 22:02
Giovedì, 26/11/2009
Innanzi tutto desidero ringraziarti per avermi almeno risposto alla mia e-mail.
Ti rifaccio un riassunto del problema.
Io in un dbgri, i primi 7 campi, sono impostati i giorni della settimana, l’ottavo e il nono sono impostati gli orari di accensione e spegnimento delle luci ed esempio. Tramite la data del sistema stabilisco se oggi è lunedì, martedì o mercoledì, ecc. Con un ciclo FOR leggo il primo record; se ad esempio nel giorno selezionatoi ci sono degli orari selezionati, vado a leggere la colonna 8 e 9 ( 20.00 ON – 21.00 OFF),  con questi dati li confronto con l’orologio del sistema.
I codici che ho scritto sono i seguenti

giorno = Weekday(Date, 2)
For i = 0 To DbDati.Recordset.RecordCount - 1
                  
            dbGrid.Col = giorno - 1
            dbGrid.Row = i
            If dbGrid.Text = 0 Then
                dbGrid.Col = 7
                row1 = dbGrid.Text
                dbGrid.Col = 8
                row2 = dbGrid.Text
                
                If txtor.Text >= row1 Then
                    If row2 >= txtor.Text Then
                    ret.FillColor = RGB(250, 10, 10)
                    End If
                    Else
                    ret.FillColor = RGB(250, 200, 10)
                End If
   End If
Next

Il problema di questo ciclo sta nel fatto che se ad esempio il primo record colora di rosso il rettangolo ( perché il comando di accensione è giustamente in ON), il secondo record mi colora di arancione il rettangolo ( perché il comando di OFF è attivo) anche se il programma di accensione del primo record è ancora in ON.
Come sono impostati i codici non potrà mai funzionare bene, ma non so trovare un’altra strada. Il ciclo giusto dovrebbe iniziare con il tempo in ON e finire con il tempo in OFF e non vaga  più analizzato fino all’indomani. Fai attenzione che in qualsiasi momento tramite un’altra maschera io posso aggiungere/modificare/eliminare record del database     HELP!!!!!!

Spero di avervi spiegato tutto, forse per qualcuno è una cavolata, ma per uno come me, che scrive delle righe d’istruzione ( non sono programmatore sarebbe un’offesa per  l’onorata categoria), questo è un problema complicato.
Ciao e grazie

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 15:31
Venerdì, 27/11/2009
dovresti specificare cosa contiene txtor, row1 e row2...

PM Quote
Avatar
flappo (Normal User)
Newbie


Messaggi: 16
Iscritto: 06/10/2007

Segnala al moderatore
Postato alle 11:01
Sabato, 28/11/2009
txtor.text = Time
row1.text leggo il contenuto della colonna 7   e cioè l'ora di accensione ( es. 20.00 ON)
row2.text leggo il contenuto della colonna 8   e cioè l'ora di spegnimento ( es. 21.00 OFF)
ret (shape) per visualizzare l'accensione/spegnimento
Ciao a tutti e grazie

Ultima modifica effettuata da flappo il 28/11/2009 alle 11:01
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 12:56
Sabato, 28/11/2009
credo che il problema in se non sia difficile, però è difficile per me "ambientarmi"... dovresti spiegare meglio cosa dovrebbe fare il tuo progr, e cosa invece sbaglia...

forse ti è più chiaro il tuo stesso codice scrivendolo in pseudocodice:
               If txtor.Text >= row1 Then
                    If row2 >= txtor.Text Then
                    ret.FillColor = RGB(250, 10, 10)
                    End If
                    Else
                    ret.FillColor = RGB(250, 200, 10)
                End If

sarebbe:
Se l'ora di accenzione è già passata allora
Se l'ora di spegnimento è già passata allora
colora di rosso lo shape(?)
altrimenti (se l'ora di spegnimento non è ancora stata raggiunta)
coloralo di arancione

PM Quote
Avatar
flappo (Normal User)
Newbie


Messaggi: 16
Iscritto: 06/10/2007

Segnala al moderatore
Postato alle 9:50
Domenica, 29/11/2009
Il programma che voglio fare è quello di un normalissimo orologio che tutti abbiamo in casa per accendere/spegnere la caldaia ad esempio. ( si accende alle 20.00 ON e si spegne alle 21.00 OFF). I giorni della settimana e gli orari di accensione spegnimento sono inseriti in una dbgrid. Non funziona per il fatto che quando faccio il ciclo di lettura di tutti i record del mio database (filtrando il giorno della settimana) se con nel primo record le condizioni di accensione sono giuste, lo Shape si colora di rosso, leggendo il secondo record e le condizioni non sono soddisfatte, lo shape si colora di arancione (condizione else del If..then), Questo non è giusto perchè secondo il primo record il rettangolo deve essere ancora rosso, fino allo scadere del tempo.

grazie a tutti

PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 10:51
Domenica, 29/11/2009
Ammesso che nelle colonne della griglia ci siano i giorni della settimana (i campi del database)
Se tu hai una sola utenza da accendere e spegnere, ti conviene mettere gli orari nelle righe della griglia (i record del database) in ordine crescente.
Così dopo aver imposto come condizione WHERE giorno=xxx, scorrendo i record ti ritrovi prima l'ora di accensione e poi l'ora di spegnimento.

If Time >=OraAccensione AND Time<=OraSpegnimento then
   colori shape
end if

Se ci sono più orari nell'arco della giornata confronti il Time con le coppie trovate

Se hai più utenze aggiungi un campo Utenza e la query sarà:

WHERE giorno=xxx AND Utenza=yyy

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 11:59
Domenica, 29/11/2009
Testo quotato

Postato originariamente da flappo:
Questo non è giusto perchè secondo il primo record il rettangolo deve essere ancora rosso, fino allo scadere del tempo.



non so, forse risolvi con:

if ret.FillColor <> RGB(250, 10, 10) then ...

se il rettagolo non è rosso allora ... (lo colori di arancione)

PM Quote