Newsgroup: it.comp.appl.access
Titolo: Tradurre in VB alcune righe, sono in difficolta

Conosco poco il VB qualcuno mi potrebbe tradurre questo poche righe in
codice: ho descritto anche quello che deve fare in caso ho sbagliato proprio
la struttura.
----------------------------------
In query ho creato questo calcolo:
Impegno: [Orario Fine]-[Orario inizio]
E fino a qui non ci sono problemi. PERCHE' FUNZIONA
Adesso arriva il brutto, devo calcola il SUPERO che non è altro che lo
STRAORDINARIO, mi va bene di farlo sia in VB oppure in SQL (preferisco VB,
perchè tra i due non ci capisco un cazzo lo stesso però in VB ci sto dietro,
perchè capisco un pò come funziona ma non riesco a crealo)
Facendo in VB:
il campo "Orario inizio" ha queste etichetta "Inizio"
il campo "Orario Fine " ha questo etichetta "Fine"
Perchè se ho capito bene in query si usa il nome del campo in VB il nome
dell'etichetta.
SUPERO:
Supero diurno: dopo la decima ora di servizio
Supero notturno: dopo la settima ora
Diurno: dalle 5:00 alle 23:59
Notturno: dalle 0:00 alle 4:59
Esempio: un servizio che inizia alle 4:40 e termina alle 11:50 è in supero,
perchè iniziando prima delle 5:00 non si può passare la 7 settima ora,
quindi 11:50 - 4:40 = 7:10 quindi 0:10 di supero.
un servizo che inizia alle 5:30 e termina alle 15:45 è in supero, perchè
iniziando dopo delle 5:00 non si posso passare le 10 ore di servizio, quindi
15:45- 5:30 = 10:15 quindi 0:15 di supero.
Ecco il mio ragionamento
IF  "INIZIO" è maggiore o uguale delle 0:00 ma minore delle 5:00  THEN
IF "IMPEGNO" > 7  THEN
SUPERO:  IMPEGNO - 7  (cosi facendo, lui verifica prima che il servizio sia
compreso tra le 0 e le 5, poi verifica che l'impengo sia maggiore di 7, se
lo è, allora mi calcora di quanto è in supero)
END IF
ELSE
IF "IMPEGNO" > 10  THEN
SUPERO: IMPEGNO - 10 (cosi facendo, se l'orario non cade entro le 0 e le 5,
sicuramente si tratta di lavoro diurno, quindi il supero scatta dopo la 10
ora, quindi una volta verificato che l'impegno abbia passato le 10 ore,m gli
faccio eseguire il conto
END IF
END IF
Mi date una manina????
Ciao e grazieeeeeeeeeeeee

 dell'etichetta.
No. In una query - istruzione SQL - si usa il nome del campo, perchè la
query legge e scrive in un campo.
In VB si usa il nome del 'controllo' che contiene il dato. Qs. controllo può
essere associato a un campo o no, ma se vuoi che il risultato venga scritto
anche in un campo della tabella, dopo averlo calcolato dovrai fare in modo
che venga scritto lì dentro. Altrimenti ti verrà visualizzato solo nel
controllo che hai utilizzato.

Dunque, diciamo che scrivi l'orario di inizio in un controllo textbox che si
chiama txtInizio, e l'orario di fine in un altro controllo textbox che si
chiama txtFine, e vuoi vedere l'eventuale supero in un controllo textbox che
si chiama txtSupero.
  Dim Impegno As Integer
  ' calcola l'impegno in minuti
  Impegno = DateDiff("n", txtInizio.Text, txtFine.Text)
  If DatePart("h", txtInizio.Text) >= 0 And DatePart("h", txtInizio.Text) < 5
Then
    If Impegno > (7 * 60) Then ' se l'impegno supera le 7 ore
      txtSupero.Text = Impegno - (7 * 60)
    End If
  Else
    If Impegno > (10 * 60) Then ' se l'impegno supera le 10 ore
      txtSupero.Text = Impegno - (10 * 60)
    End If
  End If
Spero ti sia d'aiuto. Ciao
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:151Z41Z184Z155Y...@usenet.libero.it...

Ti ringrazio tantissimo, mi potresti speigare solo uan cosa, (tanto per
imparare) perchè moltiplichi 7 o 10 * 60????
Dove mi consigli di mettere il tutto, in apertura in un pulsante su
corrente.
Fammi sapere
Ciao e grazieeeeeeeeeeeeee

 ha scritto nel messaggio
news:151Z41Z184Z155Y...@usenet.libero.it...

Ho provato
Ma quando lo eseguo la prima riga va in errore:
Impegno = DateDiff("n", txtInizio.Text, txtFine.Text)
Inizo e Fino sono orari, forse è li il problema????
la "n" cosa significa????


Anzitutto, suppongo che l'errore sia che non si può fare riferimento ad un
controllo che non ha lo stato attivo. Avevo dimenticato che VBA lo fa, per
cui ho modificato la routine, mettendo i valori in due variabili, e
spostando il focus su ogni controllo prima di immagazzinare il valore nella
variabile.
  Dim OraInizio As Date, OraFine As Date
  Dim Impegno As Integer
  ' imposta le due variabili OraInizio e OraFine
  Me.txtInizio.SetFocus
  OraInizio = Me.txtInizio.Text
  Me.txtFine.SetFocus
  OraFine = Me.txtFine.Text
  Me.txtSupero.SetFocus
  ' calcola l'impegno in minuti
  Impegno = DateDiff("n", OraInizio, OraFine)
  If DatePart("h", OraInizio) >= 0 And DatePart("h", OraInizio) < 5 Then
    If Impegno > (7 * 60) Then ' se l'impegno supera le 7 ore
      txtSupero.Text = Impegno - (7 * 60)
    End If
  Else
    If Impegno > (10 * 60) Then ' se l'impegno supera le 10 ore
      txtSupero.Text = Impegno - (10 * 60)
    End If
  End If
Il fatto che si tratta di due orari lo gestisci direttamente nelle due
caselle di testo: devi impostare per entrambe il formato OraBreve 24h.
Ricordati che dopo le ore andranno scritte separate dai due punti (es.
12:35)
Per rispondere anche alle altre tue domande, i i valori sono moltiplicati
per 60 perché l'impegno viene ricavato in minuti, per cui se devo scrivere i
minuti di supero, cioè l'impegno meno 10 ore, devo fare minuti_di_impegno -
(10h * 60 min_l'una). La "n" significa che la differenza di orario viene
calcolata in minuti (v. Guida in linea, funzione DateDiff). Se scrivevo "h",
l'impegno mi veniva calcolato in ore. Esempio: dalle 12:10 alle 13:40 la
differenza è 1,5 ore (con DateDiff("h", ... ) oppure 90 minuti (con
DateDiff("n", ... )
Dove devi mettere qs. codice, nell'evento Corrente o nel Click di un
pulsante?
Dipende.
Sicuramente devi eseguirlo non prima di avere entrambe le ore nelle caselle
di testo. Se le ore sono associate ai campi di un database lo puoi mettere
su corrente, ma devi stare attento ad alcune cose: entrambe le caselle
devono contenere un orario quando ci si muove tra i record, quindi dove devo
inserire gli orari? Se li inserisco nella stessa maschera, quando mi sposto
sul record vuoto, il codice viene eseguito e la riga che imposta OraInizio
mi da un errore perché legge una casella vuota. Allora: 1) inserisco le ore
da codice, sempre nell'evento Corrente ma prima di arrivare a questo blocco
di istruzioni; oppure 2) impedisco all'utente di inserire un nuovo orario in
questa maschera, in modo che l'evento Corrente non incontri mai una casella
di testo vuota; oppure 3) gestisco l'errore nel codice, quindi imposto come
deve comportarsi il programma quando incontra una casella vuota.
La stessa esigenza c'è se metti le istruzioni nel Click di un pulsante, solo
che in tal caso l'utente non è obbligato a fare clic prima di aver impostato
entrambe le ore. Puoi addirittura tenere il pulsante disabilitato finché non
sono presenti entrambi i valori. E quando ti sposti tra i record non viene
eseguito alcun codice e non c'è pericolo di errori. Lo svantaggio è che
l'utente deve eseguire esplicitamente il calcolo, tramite il pulsante, cioè
non viene fatto in automatico.
Un'altra soluzione è nel DopoAggiornamento di entrambe le caselle, ma prima
di eseguire il codice devi verificare che la casella non sia vuota, e che
anche nell'altra ci sia un valore.
Io per testarlo l'ho messo sul Click di un pulsante, e funziona. Tu puoi
sceglere in base a ciò che vuoi ottenere.
Spero di aver chiarito. Ciao.


 ha scritto nel messaggio
news:151Z37Z64Z98Y1...@usenet.libero.it...

Grazie..... per l'aiuto datomi......... mi potresti fare un ultimo
favore????
Mi invii la tua prova in ACCESS e cosi lo provo e poi trasformo il tutto sul
mio DB adattando i vari testi.
Mio indirizzo: 
ma...@santillimarco.it
Ciao e grazieeeeeeeeeeeeeeeee


te lo mando stasera quando torno a casa
