Newsgroup: it.comp.appl.access
Titolo: non riesco ad interrompere l'esecuzione della routine

ciao a tutti
ho un problema in questo codice, nel punto sotto segnalato,
grazie dell'aiuto
 
On Error GoTo gestErrori
 
    Dim Rs As DAO.Recordset, Rs1 As DAO.Recordset, Rs2 As DAO.Recordset
    Set Rs = Forms!Mia_Fattura.Recordset
    Set Rs1 = Me.Recordset
     Set Rs2 = Me.Parent!DettaglioFattura.Form.Recordset
 
        Me.Parent![DettaglioFattura].SetFocus
 
        Rs1.MoveFirst
 
        Do Until Rs1.EOF
 
        If (Rs!IdCliente <> 0 And _
            Rs!IdCliente <> Nz(Rs1!IdCliente, 0)) Or _
                (Rs!IdFornitore <> 0 And _
                    Rs!IdFornitore <> Nz(Rs1!IdFornitore, 0)) Or _
                        (Rs!Idtrasp <> 0 And _
                            Rs!Idtrasp <> Nz(Rs1!Idtrasp, 0)) Then
 
            MsgBox "Stai cercando d'inserire Carichi non corrispondenti!!!", vbExclamation, "Attenzione!!"
            exit sub
 
in questo punto, non mi annulla l'operazione, ma mi accoda i record ugualmente!!!!!
 
        End If
 
        Rs2.AddNew
 
        Rs2!IdFattura = Rs!IdFattura
        Rs2!IDCarico = Rs1!IDCarico
        Rs2!nFatturaFo = Rs1!nFatturaFo
        Rs2!DataFatturaFo = Rs1!DataFatturaFo
        Rs2!importo = Rs1!importo
 
        Rs2.Update
 
        Rs1.MoveNext
 
        Loop
 
        Me.Requery
 
noRecord:
        MsgBox "Non ci sono più record da aggiungere!!!"
 
      '  Set Rs = Nothing
      '  Set Rs1 = Nothing
      '  Set Rs2 = Nothing
 
Esci:
    Exit Sub
 
gestErrori:
    Beep
    If Err.Number = 3021 Then GoTo noRecord
    MsgBox Err.Number & " - " & Err.Description
    GoTo Esci


cosi' non ho piu' if Err.Number =3021
ma rimane sempre il problema che mi accoda
tutti i record anche quando  si verifica la condizione
 
 
On Error GoTo gestErrori
 
    Dim Rs As DAO.Recordset, Rs1 As DAO.Recordset, Rs2 As DAO.Recordset
    Dim nRecord As Integer
    Set Rs = Forms!Mia_Fattura.Recordset
    Set Rs1 = Me.Recordset
    Set Rs2 = Me.Parent!DettaglioFattura.Form.Recordset
 
    nRecord = Me.Recordset.RecordCount
 
    If nRecord <> 0 Then
 
        If (Rs!IdCliente <> 0 And _
            Rs!IdCliente <> Nz(Rs1!IdCliente, 0)) Or _
                (Rs!IdFornitore <> 0 And _
                    Rs!IdFornitore <> Nz(Rs1!IdFornitore, 0)) Or _
                        (Rs!Idtrasp <> 0 And _
                            Rs!Idtrasp <> Nz(Rs1!Idtrasp, 0)) Then
 
            MsgBox "Stai cercando d'inserire Carichi non corrispondenti!!!", vbExclamation, "Attenzione!!"
            exit sub
 
'qui mi accoda ugualmente i record!!!  
 
    else
 
        Me.Parent![DettaglioFattura].SetFocus
 
        Rs1.MoveFirst
 
        Do Until Rs1.EOF
 
        End If
 
        Rs2.AddNew
 
        Rs2!IdFattura = Rs!IdFattura
        Rs2!IDCarico = Rs1!IDCarico
        Rs2!nFatturaFo = Rs1!nFatturaFo
        Rs2!DataFatturaFo = Rs1!DataFatturaFo
        Rs2!importo = Rs1!importo
 
        Rs2.Update
 
        Rs1.MoveNext
 
        Loop
 
        Me.Requery
 
   End If
        End If
 
        MsgBox "Non ci sono più record da aggiungere!!!"
 
      '  Set Rs = Nothing
      '  Set Rs1 = Nothing
      '  Set Rs2 = Nothing
 
Esci:
    Exit Sub
 
gestErrori:


prova a mettere 
anziche' exit sub 
 
 
exit do
piuttosto attivati un flag di controllo
 
dim ctrl as boolean
ctrl = false
 
...
do
if
   ctrl= true
   exit do
endif
loop
 
if cttl then
   msgbox condizione 
endif
 
e testare se 


grazie pfm


ho provato, ma il risultato non è sempre corretto
 
        Dim ctrl As Boolean
        ctrl = False
 
        Do
        If (Rs!IdCliente <> 0 And _
            Rs!IdCliente <> Nz(Rs1!IdCliente, 0)) Or _
                (Rs!IdFornitore <> 0 And _
                    Rs!IdFornitore <> Nz(Rs1!IdFornitore, 0)) Or _
                        (Rs!Idtrasp <> 0 And _
                            Rs!Idtrasp <> Nz(Rs1!Idtrasp, 0)) Then 
        ctrl = True
 
        End If
        Exit Do
        Loop
 
        If ctrl Then
   	MsgBox ctrl
        Else
   	MsgBox ctrl
        End If
 
anche se i record ci sono a volte mi da l'errore
-
2147352567
 - Nessun record corrente


ho provato in in questo modo, ma funziona solo se il record (che non deve essere accodato)si trova per primo.
 
   Dim Rs As DAO.Recordset, Rs1 As DAO.Recordset, Rs2 As DAO.Recordset
   Dim ctrl As Boolean
   Set Rs = Forms!Mia_Fattura.Recordset
   Set Rs1 = Me.Recordset
    Set Rs2 = Me.Parent!DettaglioFattura.Form.Recordset         
 
        If Not Rs1.BOF And Not Rs1.EOF Then
        Rs1.MoveFirst
        ctrl = False
        Do
        If (Rs!IdCliente <> 0 And _
            Rs!IdCliente <> Nz(Rs1!IdCliente, 0)) Or _
                (Rs!IdFornitore <> 0 And _
                    Rs!IdFornitore <> Nz(Rs1!IdFornitore, 0)) Or _
                        (Rs!Idtrasp <> 0 And _
                            Rs!Idtrasp <> Nz(Rs1!Idtrasp, 0)) Then
        ctrl = True
 
        End If
        Exit Do
        Loop
 
 
 
        If ctrl Then
            MsgBox "Stai cercando d'inserire Carichi non corrispondenti!!!", vbExclamation, "Attenzione!!"
        Else
 
        Me.Parent![DettaglioFattura].SetFocus
 
        Rs1.MoveFirst
 
        Do Until Rs1.EOF
 
        Rs2.AddNew
 
        Rs2!IdFattura = Rs!IdFattura
        Rs2!IDCarico = Rs1!IDCarico
        Rs2!nFatturaFo = Rs1!nFatturaFo
        Rs2!DataFatturaFo = Rs1!DataFatturaFo
        Rs2!importo = Rs1!importo 
 
        Rs2.Update
 
        Rs1.MoveNext
 
        Loop
 
        Me.Requery
 
        End If
 
        MsgBox "Non ci sono più record da aggiungere!!!"
        End If

Il 21/06/2014 17:12, 
francodel...@gmail.com
 ha scritto:
Cia Franco,
credo di avertelo gia' scritto nell'altro 3d dove sta il problema, che e 
logico!
 
La exit sub che hai nel codice originale funziona (deve funzionare)
e l'interruzione che provoca, al massimo, non accoda il record corrente.
Se hai gia' accodato dei record quelli rimangono (e sono logicamente 
corretti).
 
ammettiamo che hai dieci record da accodare con queste qualita' 
(corretto significa che supererebbe la if di controllo):
 
1-corretto
2-corretto
3-errato
4-corretto
da 5 a 10 corretto
 
alla fine della routine dovresti trovare accodati i record 1 e 2
Se non vuoi che vengano accodati "DEVI" gestirli con una "TRANSAZIONE"
(o preoccuparti tu di fare la cancellazione al contrario)
 
 
P.S. Nei tuoi post ogni tanto cerca di "tagliare" quello che non serve 
altrimenti il post continua ad allungarsi e contiene tanto "garbage"
-- 
ac (x=y-1)
Aborro il Killfile
(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)
 
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
http://www.avast.com
 
 


vero!!!
grazie