akyra
03-03-2005, 10:05
ciao a tutti! sto facendo un programmino per la gstione di un database con Access 2003 e avrei bisogno di fare una cosettina simpatica.
avrei la necessità di scorrere i record presenti sotto una maschera e colorare una casella di testo (corrispondente al campo di un record) di un certo colore se una certa condizione è soddisfatta...
ho scritto un po' di righe in visual basic di questro tipo:
Private Sub Form_Open(Cancel As Integer)
Dim numRecord As Long
DoCmd.Maximize
numRecord = Me.Recordset.RecordCount
If numRecord > 0 Then
Me.Recordset.MoveLast
Do
Me![FatturatoMensAttaule].ForeColor = 0
If Me![FatturatoMensAttaule] < Me![FatturatoMensPrec] Then
Me![FatturatoMensAttaule].ForeColor = 255
End If
numRecord = numRecord - 1
Me.Recordset.MovePrevious
Loop While numRecord > 0
Else
MsgBox "Periodo Inesistente", vbInformation, "Attenzione"
End If
End Sub
come si può ben capire quello che fa questo codice non è altro che posizionarsi sull'ultimo record della maschera in questione, controllare se il valore di un certo campo del record ([FatturatoMensAttaule]) è minore di un altro campo ([FatturatoMensPrec]) e impostare il primo campo al colore 255 (rosso) se tale condizione è soddisfatta. Il loop prosegue finchè si non si finisco i record della maschera.
Il problema è che questo codice non colora di rosso solo i campi dei record che soddisfano quella condizione. Infatti esso colora i campi di tutti i record non appena ne trova anche solo uno che soddisfa la condizione...in poche parole mi colora tutti i record di rosso presenti nel corpo della maschera, non appena trova un record che soddisfa la condizione.
Avrei quendi bisogno di modificare il codice in modo tale che mi colori di rosso solo i campi di ciascun record che soddisfano la condizione.
Ringrazio preventivamente tutti quelli che collaboreranno alla discussione.
avrei la necessità di scorrere i record presenti sotto una maschera e colorare una casella di testo (corrispondente al campo di un record) di un certo colore se una certa condizione è soddisfatta...
ho scritto un po' di righe in visual basic di questro tipo:
Private Sub Form_Open(Cancel As Integer)
Dim numRecord As Long
DoCmd.Maximize
numRecord = Me.Recordset.RecordCount
If numRecord > 0 Then
Me.Recordset.MoveLast
Do
Me![FatturatoMensAttaule].ForeColor = 0
If Me![FatturatoMensAttaule] < Me![FatturatoMensPrec] Then
Me![FatturatoMensAttaule].ForeColor = 255
End If
numRecord = numRecord - 1
Me.Recordset.MovePrevious
Loop While numRecord > 0
Else
MsgBox "Periodo Inesistente", vbInformation, "Attenzione"
End If
End Sub
come si può ben capire quello che fa questo codice non è altro che posizionarsi sull'ultimo record della maschera in questione, controllare se il valore di un certo campo del record ([FatturatoMensAttaule]) è minore di un altro campo ([FatturatoMensPrec]) e impostare il primo campo al colore 255 (rosso) se tale condizione è soddisfatta. Il loop prosegue finchè si non si finisco i record della maschera.
Il problema è che questo codice non colora di rosso solo i campi dei record che soddisfano quella condizione. Infatti esso colora i campi di tutti i record non appena ne trova anche solo uno che soddisfa la condizione...in poche parole mi colora tutti i record di rosso presenti nel corpo della maschera, non appena trova un record che soddisfa la condizione.
Avrei quendi bisogno di modificare il codice in modo tale che mi colori di rosso solo i campi di ciascun record che soddisfano la condizione.
Ringrazio preventivamente tutti quelli che collaboreranno alla discussione.