Newsgroup: it.comp.appl.access
Titolo: Ripetere piu' volte un'istruzione If

Ciao a tutti,scusate la banalita' ma sono fermo su questa
problematica.Ho un form "Maschera1" e un sottoform "sottomaschera".Nel
form "Maschera1" ho un pulsante di comando che mi esegue un'
istruzione If relativa al sottoform "sottomaschera":
If Me.campo1= True And Me.campo2= False Then
          MsgBox "ATTENZIONE!! eccccc"
            ElseIf Me.Campo1= False And Me.Campo2= True Then
                       MsgBox "ATTENZIONE!!!
ecccc
   Else
DoCmd.OpenReport "Report1", acNormal
end if
L'istruzione in esame verifica tali condizioni solo per il primo
record del sottoform "sottomaschera",io inceve vorrei che facesse tale
verifica per tutti i records del subform.
Grazie in anticipo
Dino

 Dino
 Potresti anche scriverla cosě:
 If Me.campo1= Not Me.campo2 Then
           MsgBox "ATTENZIONE!! eccccc"
    Else
 DoCmd.OpenReport "Report1", acNormal
 end if
Poi se la verifica deve avvenire su tutti i record devi ciclare i record.
--
sv
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Io farei diversamente (restando a livello form e senza scomodare i
recordset)...
Public var_Controllo As Integer
var_Controllo=0
-------------------
On Error GoTo err:
giro:
If Me.campo1= True And Me.campo2= False Then
           var_Controllo=1
             ElseIf Me.Campo1= False And Me.Campo2= True Then
                        var_Controllo=1
...ecccc
End If
DoCmd.GoToRecord , , acNext
GoTo giro:
err:
if var_Controllo=1 then
    Msgbox "ATTENZIONE...."
Else
    DoCmd.OpenReport "Report1", acNormal
End If
var_Controllo=0

 - Mostra testo citato -
Grazie a tutti per la risp.Io prenderei in considerazione prima la
risposta di Pabli.Allora ho due dubbi da sottolinearti :
1)il Public var_Controllo As Integer va inserito nel modulo del form
vero???Eppure mi da errore.Ho risolto inserendolo come dichiarazione
nella routine
Dim Public var_Controllo As Integer....
2) Perche' fai creare un nuovo record???(DoCmd.GoToRecord , , acNext
ecccc) non devo creare un new rec devo solo analizzare quelli
esistenti.
Infatti la verifica la esegue solo al primo record
Per quanto riguarda SV il ciclare i records si,ma in che modo????Fammi
gentilm ente un esempio
Grazie ancora per la vs. disp
Dino

 esistenti.
Non e' acNewrec e acNext (vai al prossimo)
Comunque quello che vuoi fare e' aprire report1 solo se *tutti* i record 
hanno campo1 & campo2 entrambi vero o entrambi falso?
-- 
ac (x=y-1)


wrote:

Sì e' così Ale.Tutti i records del subform devono avere i campi campo1
& campo2 entrambi vero o entrambi falso?
Mi correggo per il record,infatti non e' nuovo ma e' "prossimo".Anche
se nel mio caso svolge la stessa funzione.
Grazie
Dino

 gentilm ente un esempio
l'esempio gia' te l'ho fatto... DoCmd.GoToRecord , , acNext equivale a
dire al sistema a livello Forms "vai al record successivo"... il Goto
giro: esegue il "ciclo" su tutti i records del SubForm... l'On Error
serve proprio a gestire l'ultimo record non trovato (quindi quando i
records sono finiti); in quel caso il sistema guarda il valore della
variabile, e se ha incontrato tra gli "n" campi degli "n" records
anche solo 1 che non soddisfaceva i tuoi requisiti, ecco che apre il
report, altrimenti fila via dritto e non fa nulla...
almeno e' quello che avevo capito ti servisse nello specifico.


 Dino
A te la scelta. Pablito ti ha già fatto l'esempio, oppure con un recordset.
Solo che non capisco come dalla maschera principale con un pulsante tu
gestisci i record della subform con un Me.Campo1.


 - Mostra testo citato -
In effetti l'esempio che ho fatto non porta la sintassi corretta,in
realta' il "me.campo e' un Me.Sottomaschera!Campo1.
Di seguito vi riporto il codice originale,così vediamo dove sbaglio.
Mi piacerebbe pero' che tu o voi "gentilmente mi fareste un esempio di
come dovrei ciclare i dati della tabella
ecco il codice:
On Error GoTo Err
Giro:
   Dim var_Controllo As Integer
   var_Controllo = 0
If Me.sottomaschera![Campo1] = True And Me.sottomaschera![Campo2] =
False Then
       var_Controllo = 1
          MsgBox "ATTENZIONE!!!....ecccccc"
            ElseIf Me.sottomaschera![Campo1]= False And
Me.sottomaschera![Campo2] = True Then
             var_Controllo = 1
                       MsgBox "ATTENZIONE!!!ecccccc"
        End If
DoCmd.GoToRecord , , acNext
GoTo Giro:
Err:
If var_Controllo = 1 Then
    MsgBox "ATTENZIONE...."
Else
   Docmd.Open report "Report1",acNormal
End If
var_Controllo = 0
end sub
Grazie mille
Dino

 Grazie mille
e allora non va bene...
DoCmd.GoToRecord , , acNext
funziona in locale...

 funziona in locale...
però puoi mettere quelle funzione su un tasto del subform, e dal form
padre emulare il clik sul tasto di cui prima... cosi' funzionerebbe (a
quel punto basterebbe il Me.Campo1).

 - Mostra testo citato -
In effetti ho provato or..ora e va gia' meglio.Pero' ad esempio ho
simulato di avere i due campi a false e ovviamente non mi faceva piu'
uscire dall' msgbox.
In definitiva io come penso tu abbia capito devo "solo" (si fa per
dire) verificare che campo1 o campo2 siano o tutte due a false o tutte
due a true,mentre nelle condizioni sopra elencate deve dare
segnalazionw.
Dino


Hai svariati modi per farlo
1) Invece di usare dcmd.gotorecord usa il recordsetclone di 
sottomaschera e cicli come ti ha mostrato pablitomf
2) due controlli nascosti con la somma di campo1 e campo2
se sono entrambi 0 o se sono con valore (assoluto) (abs(campo)= al 
recordcount lanci report1
2) fai due dsum e ti comporti come al punto precedente.
-- 
ac (x=y-1)

 - Mostra testo citato -
Ciao e grazie per la risp.ma..... campo 1 e campo 2 sono due campi con
la prop. sì\no,scusa cosa c'entra la somma!!! Forse lo stesso codice
che ho riportato sopra devo inserirlo in un controllo nel subform???
Dino

 che ho riportato sopra devo inserirlo in un controllo nel subform???
I campi booleani sono, di fatto, di tipo numerico 0=false <>0 = vero 
(access per vero assegna -1, per questo ho segnalato di usare abs())
Il codice lo devi inserire sull'evento di click del "button". Il path 
dei controlli, ovviamente, deve tenere conto che l'evento si verifica 
sul form e non nel subform.
comunque io l'avrei fatta cosi
Dim rs as variant
set rs = currentdb.openrecordset("select sum(campo1) as tC1, sum(campo2) 
as tC2, count(*) as conta from tabella")
if (rs("tc1) = 0 and rs("tc2) = 0)
or (abs(rs("tc1)) = rs("conta")  and abs(rs("tc2)) = rs("conta")) then
    openreport
else
	msgbox
endif
ovviamente se ci sono delle condizioni di filtro che hai impostato sul 
recordsource della sottomaschera vanno riproposte
-- 
ac (x=y-1)

 ac (x=y-1)
Grazie Ale,mi prostro alla tua preparazione!!!Complimenti.Sviolinate a
parte(ma le meriti) adesso sono abbastanza "cotto".Domani mattina
provo e ti faccio sapere.Stai in linea.
Grazie ancora
Dino

 - Mostra testo citato -
Eccomi Ale.allora ho provato ad impostare il tuo codice ma mi da
errore :("Previsto separatore di elenco :oppure")).
In realta' la sintassi sembra corretta.
If (rs("tc1) = 0 and rs("tc2) = 0 or (abs(rs("tc1)) = rs("conta")  and
abs(rs("tc2)) = rs("conta"))
Grazie
Dino


direi di no mancano virgolette
If (rs("tc1") = 0 and rs("tc2") = 0 or (abs(rs("tc1")) = rs("conta") 
and abs(rs("tc2")) = rs("conta"))
-- 
ac (x=y-1)

 - Mostra testo citato -
E' vero (che "oco" sono) mancavano le virgolette;così l'ho guardato e
l'ho copiato.In realta' pero' mi da ancora lo stesso errore
"......separatore" come mai????
Grazie e porta pazienza!!!!
Dino

 Dino
Copia e incolla quello che hai scritto
-- 
ac (x=y-1)

 - Mostra testo citato -
E' quello che ho fatto.Cerchiamo di intenderci :
If (rs("tc1") = 0 and rs("tc2") = 0 or (abs(rs("tc1")) =
rs("conta")and abs(rs("tc2")) = rs("conta")) then
Openreport
Questo e' quello che ho copiato e che mi da errore!!!!!
Dino

 Questo e' quello che ho copiato e che mi da errore!!!!!
Dino! Ma sant'iddio non hai modificato openreport e messaggio?
quella parte *non* e' sintatticamente corretta! Sistemala come era nel 
tuo post iniziale.
-- 
ac (x=y-1)

 - Mostra testo citato -
Ale,no!!!Non ti spaventare,certo che OpenReport non e' sintatticamente
giusto ma l'ho messo solo come esempio per il Then.Il problema e'
sopra per me!!!!
Dino


Per favore, copia e incolla *tutto* quello che hai impostato nella routine.
E comunque mi sembra che ci sia  una parentesi malmessa.
If (rs("tc1") = 0 and rs("tc2") = 0) or (abs(rs("tc1")) =
rs("conta")and abs(rs("tc2")) = rs("conta")) then
-- 
ac (x=y-1)



Ecco il tutto:
On Error GoTo Err
Dim rs As Variant
Set rs = CurrentDb.OpenRecordset("select sum(Me.Sottoscheda_Buoni![in
conformità?]) as tC1, sum(Me.Sottoscheda_Buoni![Stampa fasi])as tC2,
count(*) as conta from [Dettagli fatture]")
If (rs("tc1") = 0 and rs("tc2") = 0 or (abs(rs("tc1")) =
rs("conta")and abs(rs("tc2")) = rs("conta"))then
 DoCmd.OpenReport "pippo"
Else
        MsgBox "pippo"
End If
Err:
Dino


...e se non c'e' rs? ;)

 wrote:

ma se e' un Recordset perche' mai Variant?...
Dim db              As DAO.Database
Dim rs              As DAO.Recordset
Set db = CurrentDb
Set db = db.OpenRecordset(" Tua Query ")
While rs.EOF = False ' Avvia il ciclo.
    With rs
        If (rs("tc1") = 0 and rs("tc2") = 0 or (abs(rs("tc1")) =
rs("conta") and abs(rs("tc2")) = rs("conta")) then
            DoCmd.OpenReport "pippo"
        Else
            MsgBox "pippo"
        End If
    End With
    rs.MoveNext
Wend
Set rs = Nothing
Set db = Nothing


NB nella tua query questo e' sbagliato :
sum(Me.Sottoscheda_Buoni![Stampa fasi])as tC2
metti spazio prima di "as"


NB. nella tua query non c'e' lo spazio con "AS" di "tC2"...

 End With rs.MoveNext Wend Set rs = Nothing Set db = Nothing
cfr sopra.
-- 
ac (x=y-1)

 Non serve ritorna 1 solo record
sempre che ci sia... e se non c'e' ?... rs("tc1") & Co. vanno in
errore, per cui o gestisci l'errore in tal senso, o ti conviene cmq
utilizzare il With rs e l'EOF...


ma poi [in conformità?] e' un nome di un campo? :S, cioe' un campo il
cui nome e' con accento e interrogativo? :D (se cosi' fosse, non ci
piace)

 - Mostra testo citato -
OK,Raga...ho risolto in un altro modo.Ho creato un inputbox dover
faccio decidere al cliente se stampare o non stampare.Dopo la scelta
ovviamente ho un'istruzione If che gestisce il tutto.
Grazie ancora
Dino
NB:Provero' comunque meglio il codice di Ale perche' a me da sempre
errore