PDA

Visualizza versione completa : [ACCESS VISUALBASIC] errore nessun valore nell'espressione immessa


darksoullight
22-05-2008, 10.59.05
salve a tutti.
ho un problema con il visual basic di access.
ho un report che richiama una query che crea una tabella.questa tabella però in alcuni casi può rimanere vuota.in questo caso viene creata una riga dove tutti i campi di tale tabella sono vuoti.
ora quando si crea il report mi viene lanciato l'errore "Nessun valore nell'espressione immessa.".
scrivo qui la parte di codice che mi genera errore:


Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)

VenPve = 0
If VenPac > 0 Then VPer = VenPve / VenPac
......
Exit sub


il problema è venPac che è uno dei campi della tabella.
potete aiutarmi?

miciomao
23-05-2008, 14.21.51
probabilmente in VenPac incontra qualche valore null e si inchioda

prova a mettere
If Nz(VenPac,0) > 0 Then VPer = VenPve / VenPac

oppure

If Nz(VenPac) > 0 Then VPer = VenPve / VenPac

dicci se funzica

darksoullight
23-05-2008, 14.35.00
grazie io ho utilizzato una soluzione alternativa.siccome si tratta di un report lancia un errore nel caso in cui non vi siano dati nella tabella.
comunque provo lo stesso.

miciomao
23-05-2008, 14.57.52
si, puoi annullare l'evento apertura report se non ci sono dati
io di solito faccio così

Private Sub Report_NoData(Cancel As Integer)
MsgBox "ERRORE:" + vbCrLf + "Report vuoto!" + vbCrLf + "Annullo l'evento"
DoCmd.SetWarnings False
DoCmd.CancelEvent
End Sub

darksoullight
23-05-2008, 15.34.57
si, puoi annullare l'evento apertura report se non ci sono dati
io di solito faccio così

Private Sub Report_NoData(Cancel As Integer)
MsgBox "ERRORE:" + vbCrLf + "Report vuoto!" + vbCrLf + "Annullo l'evento"
DoCmd.SetWarnings False
DoCmd.CancelEvent
End Sub

sì anche io ho utilizzato questa soluzione.
senti sai come limitare le righe di un report??
mi spiego meglio: ho un report con un raggruppamento (LINEA) e poi c'è il corpo con tutti gli elementi appartenenti a quella LINEA.
io però non lo voglio tutti.sai se c'è un modo per limitarli a 5 (per esempio)?

miciomao
23-05-2008, 15.51.35
prova questo esempio

darksoullight
23-05-2008, 17.30.53
prova questo esempio
scusa la mia ignoranza.qui il numero di righe è fisso,è una costante.
se io invece volessi passarglielo da una form??

miciomao
23-05-2008, 17.43.36
se l'origine dati è una query
(quindi potresti usarla anche per il report)

puoi entrare nelle proprietà della qry e selezionare il nr o la percentuale delle righe da visualizzare come nell'immagine allegata

questo è il sistema + rapido

può esserti utile?


http://img518.imageshack.us/img518/7811/senzatitolo1ao1.png

darksoullight
23-05-2008, 18.00.03
no mi è molto utile l'esempio che mi hai passato prima.
questo mi stampa solo i primi valori in assoluto..già ci avevo provato.
grazie mille

miciomao
23-05-2008, 18.04.27
si però puoi portare la qry in vb e assegnare al valore TOP ad una variabile numero che potrai scegliere tu.
Hai visto il codice sql generato nella qry dell'ultimo esempio ?

darksoullight
23-05-2008, 18.10.30
quello lo sapevo ma la TOP prende i primi valori in assoluto a me servono i primi di ogni guppo..
no ora lo guardo

miciomao
23-05-2008, 18.27.30
tu di gruppi non avevi mai parlato

cmq facciamo un'esempio

Tabella3

turno risultato datains
1 1-0 23/05/2008 18.15.40
1 2-0 23/05/2008 18.15.45
1 3-1 23/05/2008 18.15.46
2 4-5 23/05/2008 18.15.47
2 1-3 23/05/2008 18.15.50
2 2-5 23/05/2008 18.15.51
3 4-1 23/05/2008 18.15.52
3 3-3 23/05/2008 18.15.53
3 2-2 23/05/2008 18.15.54


la qry sarà

SELECT *
FROM Tabella3
WHERE (((Tabella3.datains) In (Select TOP 1 datains
FROM Tabella3 AS T
WHERE T.Turno=Tabella3.Turno
ORDER BY datains desc)));
il risultato sarà

turno risultato datains
1 3-1 23/05/2008 18.15.46
2 2-5 23/05/2008 18.15.51
3 2-2 23/05/2008 18.15.54


però come vedi bisogna avere un campo che identifica
una differenza univoca all'interno dello stesso turno, in questo caso la data pescata in ordine DESC

darksoullight
26-05-2008, 09.39.57
grazie mille.ho provato questa soluzione e funziona! in questo modo riesco a selezionare i primi 5 articoli per ogni linea.
grazie!

miciomao
26-05-2008, 10.34.48
;)