Newsgroup: it.comp.appl.access
Titolo: annullare report se anche un solo record(del recordset) ha volore <=0

ho inserito questo codice su clic di un pulsante
per aprire un report
 
On Error GoTo ErrNoData
 
    Dim stDocName As String
 
    Me.Dirty = False
    stDocName = "Ordine"
    DoCmd.OpenReport stDocName, acPreview, , "IdOrdine =" & Me!IDOrdine
 
If IsNull(Forms!M_Ordine!M_Carichi_Ordine.Form!DataCarico) Then
    MsgBox "Devi inserire la data del carico"
    Exit Sub
End If
 
If Forms!M_Ordine!Sm_TbOrdine.Form!TotaleNetto <= 0 Then
    MsgBox "Report Annullato perchè il totale dell'Ordine è inferiore o 
uguale a zero"
    Exit Sub
End If
 
ErrNoData:
If Err.Number = 2501 Then Resume Next
 
volevo annullare il report  se il totale anche di un solo record del 
recordset fosse <=0.
 
Però se ho piu' di un record e il cursure è posizionato
su  quello >0 il report mi si apre ugualmente.
 
Come posso risolvere?
grazie 
 
 

 ha scritto nel messaggio 
news:4f40c24f$0$1381$4faf...@reader1.news.tin.it...

mi è sufficiente ache un MsgBox
grazie 
 
 

Franco ha scritto:

Con Dmin() (vedi help <F1> ed esempi nei post precedenti) puoi facilmente
trovare il valore più basso tra tutti quelli aventi uno specifico
IDordine. Poi agisci di conseguenza.
Ciao.
-Marco-
 
 
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

 ha scritto nel messaggio 
news:jhttrk$j4h$1...@news.newsland.it...

Grazie Marco 
 
 


 
chiedo aiuto per migliorare cio' che ho fatto,
eliminando la query.
 
 
ho creato una query: "Q_Ordine_Imponibile"
sql
SELECT TbCarico.IdCarico, TbCarico.IdOrdine, nz([quantita]*[PrezzoVendita]) 
AS ImponibileVendita, IIf([ImponibileVendita]="",0,[ImponibileVendita]) AS 
ImpVendita
FROM TbOrdine INNER JOIN (TbCarico LEFT JOIN TbRigheOrdine ON 
TbCarico.IdCarico = TbRigheOrdine.IdCarico) ON TbOrdine.IDOrdine = 
TbCarico.IdOrdine;
 
 
poi da codice su clic di un pulsante ho fatto:
 
    Dim ValutaX As Currency
 
ValutaX = DMin("ImpVendita", "Q_Ordine_Imponibile", "IdOrdine=" & 
Forms!M_Ordine!M_Carichi_Ordine.Form!IDOrdine)
 
If ValutaX <= 0 Then
MsgBox "ATTENZIONE: Ci sono carichi Nulli o valori uguali a " & ValutaX
End If
 
grazie
 
 

Franco ha scritto:

Funziona? Almeno il risultato per ora c'è, se trovi un sistema migliore è
tutto di guadagnato, altrimenti mantieni questo.
 
Non puoi eliminare la query se usi Dmin. 
Dovresti aggiungere un riferimento alla libreria DAO o ADO, usarle per
aprire un recordset e calcolare il valore, il che sarebbe più veloce, è
risaputo che le funzioni di aggregazione sui domini (dsum, dmin, dmax,
davg...) sono terribilmente lente.
Con un recordset non ti serve avere una query salvata, puoi far eseguire
direttamente l'SQL (anche se le query salvate sono ottimizzate e quindi
più veloci).
 
Non ti serve nemmeno includere IdCarico e IdOrdine tra i campi risultanti,
in effetti li usi solo per impostare i criteri e a te interessa solo
l'importo minimo.
Direi che una cosa simile potrebbe restituire il risultato voluto, provala
in una query
SELECT Min(nz([quantita],0)*nz([PrezzoVendita],0)) AS MinImponibileVendita
FROM TbRigheOrdine
WHERE IdCarico In (SELECT DISTINCT IdCarico FROM TbCarico WHERE IdOrdine=
Forms!M_Ordine!M_Carichi_Ordine.Form!IDOrdine)


 Forms!M_Ordine!M_Carichi_Ordine.Form!IDOrdine)
 
non da errori, ma non funziona
 
cmq Grazie Marco 
 
 


Uhmmmmm....non puo' fare una findfirst? e testare il nomatch? (su 
.recordsetclone), se la fa su .recordset modifica il currentrecord.
Se non ho capito male sul subform ci sono solo i record relativi 
all'ordine (e comunque potrebbe usare il criterio sui due valori 
idordine e 0.
 
-- 
 
ac (x=y-1)

 idordine e 0.
 
Si, penso che si possa anche fare un findfirst con un criterio tipo
Imorto<=0 Or Isnull(Importo), anche se da quel che ho capito l'importo in
tabella non c'è, non so qual è tra Quantità e PrezzoVendita che può essere
nullo, zero o minore di zero.
Certo che teoricamente e per logica non dovrebbero essere ammessi in
tabella quantità o prezzi nulli o negativi, mancano dei controlli in fase
di inserimento dati.
Piuttosto che perdere tempo a cercare sistemi per fare tutti quei test
sarebbe meglio correggere la situazione e sistemare la parte di
inserimento dati in modo che non sia più possibile inserire valori anomali.


 -Marco-
 
Grazie
 
 
 

 Come posso modificarla?
 
Hai due sistemi per la validazione dei dati: bloccante e non bloccante,
cioè impedisci assolutamente di salvare il record finché i dati non sono a
posto oppure mostri solo un avvertimento ma consenti comunque di salvarli
così come sono.
Prima di tutto imposta come valore predefinito Zero in modo che
all'inserimento di un nuovo record nelle caselle interessate ci sia già
uno zero e non si presentino vuote.
Sull'evento Prima di aggiornare della maschera (Before Update) fai i test,
un msgbox e se vuoi impedire il salvataggio imposti Cancel=true.
 
if isnull(me.Quantità) Or me.Quantità<0 then
  msgbox "Devi compilare la casella Quantità con un valore
positivo","Verifica coerenza dati"
  cancel=true
elseif isnull(me.Prezzo) Or me.Prezzo<0 then
  msgbox "Devi compilare la casella Prezzo con un valore
positivo","Verifica coerenza dati"
  cancel=true
end if


 ha scritto nel messaggio 
news:ji2i36$35u$1...@news.newsland.it...

 grazie Marco