Newsgroup: it.comp.appl.access
Titolo: Inserimento scadenza ed eventuali rate

Buongiorno a tutti,
sono a riproporre un mio vecchio e antipatico problema che nonostante varie 
manipolazioni non sono ancora riuscita a risolvere.
Al momento sono arrivata a questo punto: con l'evento click qui di seguito, 
riesco a non avere un errore solo se non modifico nulla dei valori 
predefiniti della sottomaschera [SCADENZARIO DETTAGLI] che vengono prelevati 
dalla maschera [SCADENZARIO INTESTAZIONE] e quindi mi diventa impossibile 
rateizzare una fattura in più scadenze. Per farlo, devo andare nelle tabelle 
di riferimento e inserire a mano i valori dei campi PROTOCOLLO e PROTOCOLLO 
NUMERICO.
Qui, (tenetevi forte...) il mio evento click:
Private Sub SALVA_Click()
On Error GoTo myError
Me.Form.Requery
    Dim Db As DAO.Database
    Set Db = CurrentDb
    Dim Rs As DAO.Recordset
    Set Rs = Db.OpenRecordset("SCADENZARIO INTESTAZIONE")
    With Rs
        .AddNew
        ![ORIGINE] = Me.ORIGINE
        ![PROTOCOLLO NUMERICO] = Me.PROTOCOLLO
        ![PROTOCOLLO] = Format(Me.ORIGINE & "." & Me.PROTOCOLLO & "." & 
Me.ANNO)
        ![NUMERO] = Me.DOC_NUMERO
        ![DATA EMISSIONE] = Me.DATA_DOC
        !IMPORTO = Me.IMPORTO
        ![RAGIONE SOCIALE] = Me.RAGIONE_SOCIALE
        .Update
        .Close
    End With
    Set Rs = Nothing
    Set Db = Nothing
Me.Form.Requery
    Set Db = CurrentDb
    Set Rs = Db.OpenRecordset("SCADENZARIO DETTAGLI")
    With Rs
        .AddNew
        !ORIGINE = Forms![INSERISCI SCADENZA]![SCADENZARIO 
DETTAGLI]![ORIGINE]
        !ID = Forms![INSERISCI SCADENZA]![SCADENZARIO DETTAGLI]![ID]
        ![PROTOCOLLO NUMERICO] = Me.PROTOCOLLO
        ![PROTOCOLLO] = Format(Me.ORIGINE & "." & Me.PROTOCOLLO & "." & 
Me.ANNO)
        !IMPORTO = Forms![INSERISCI SCADENZA]![SCADENZARIO 
DETTAGLI]![IMPORTO]
        !SCADENZA = Forms![INSERISCI SCADENZA]![SCADENZARIO 
DETTAGLI]![SCADENZA]
        ![MODALITA' PAGAMENTO] = Forms![INSERISCI SCADENZA]![MOD PAGAMENTO]
        .Update
        .Close
    End With
   DoCmd.Close
myExit:
  Exit Sub
myError:
    Select Case Err.Number
        Case 3022
            MsgBox "SCADENZA GIA' INSERITA PER QUESTA FATTURA!"
            Resume myExit
        Case Else
            MsgBox "Piccola eccezione " & vbCrLf & _
                Err.Number & " " & Err.Description
         Resume myExit
    End Select
End Sub
Dove sta il malefico inghippo?
Giorgia 

     Set Db = Nothing
perche' li chiudi in mezzo poi li riapri e poi non li richiudi piu'?

 perche' li chiudi in mezzo poi li riapri e poi non li richiudi piu'?
Ma questi sono tocchi di classe, dei simpatici calembour, quei vezzi 
artistici che si concedono ai geni...
:-PPPP *grin*
Antonio 

 ha scritto nel messaggio 
news:68e09be2-ca8e-44df...@dp9g2000vbb.googlegroups.com...

[INSERISCI SCADENZA] č la form che mi serve per prelevare i dati che mi 
servono per inserire le scadenze in maniera piů veloce.
In particolare:
Private Sub Form_Open(Cancel As Integer)
If CurrentProject.AllForms("NUOVA FATTURA ACQUISTO").IsLoaded Then
Me.ORIGINE = Forms![NUOVA FATTURA ACQUISTO]![ORIGINE]
Me.ANNO = Year(Forms![NUOVA FATTURA ACQUISTO]![REGISTRAZIONE IVA])
Me.PROTOCOLLO = Forms![NUOVA FATTURA ACQUISTO]![PROTOCOLLO]
Me.DOC_NUMERO = Forms![NUOVA FATTURA ACQUISTO]![FATTURA NUMERO]
Me.DATA_DOC = Forms![NUOVA FATTURA ACQUISTO]![DATA FATTURA]
Me.IMPORTO = Forms![NUOVA FATTURA ACQUISTO]![TOTALE FATTURA]
Me.RAGIONE_SOCIALE = Forms![NUOVA FATTURA ACQUISTO]![CONTO FORNITORE]
Me.SCADENZA = Forms![NUOVA FATTURA ACQUISTO]![SCADENZA]
Me.MOD_PAGAMENTO = Forms![NUOVA FATTURA ACQUISTO]![MODALITA' PAGAMENTO]
ElseIf CurrentProject.AllForms("NUOVA FATTURA VENDITA").IsLoaded Then
Me.ORIGINE = Forms![NUOVA FATTURA VENDITA]![ORIGINE]
Me.PROTOCOLLO = Forms![NUOVA FATTURA VENDITA]![PROTOCOLLO]
Me.ANNO = Year(Forms![NUOVA FATTURA VENDITA]![REGISTRAZIONE IVA])
Me.DOC_NUMERO = Forms![NUOVA FATTURA VENDITA]![FATTURA NUMERO]
Me.DATA_DOC = Forms![NUOVA FATTURA VENDITA]![DATA FATTURA]
Me.IMPORTO = Forms![NUOVA FATTURA VENDITA]![TOTALE FATTURA]
Me.RAGIONE_SOCIALE = Forms![NUOVA FATTURA VENDITA]![CONTO CLIENTE]
Me.SCADENZA = Forms![NUOVA FATTURA VENDITA]![SCADENZA]
Me.MOD_PAGAMENTO = Forms![NUOVA FATTURA VENDITA]![MODALITA' PAGAMENTO]
ElseIf CurrentProject.AllForms("NUOVA RICEVUTA FISCALE").IsLoaded Then
Me.ORIGINE = Forms![NUOVA RICEVUTA FISCALE]![ORIGINE]
Me.ANNO = Year(Forms![NUOVA RICEVUTA FISCALE]![REGISTRAZIONE IVA])
Me.PROTOCOLLO = Forms![NUOVA RICEVUTA FISCALE]![PROTOCOLLO]
Me.DOC_NUMERO = Forms![NUOVA RICEVUTA FISCALE]![RICEVUTA NUMERO]
Me.DATA_DOC = Forms![NUOVA RICEVUTA FISCALE]![DATA RICEVUTA]
Me.IMPORTO = Forms![NUOVA RICEVUTA FISCALE]![TOTALE RICEVUTA]
Me.RAGIONE_SOCIALE = Forms![NUOVA RICEVUTA FISCALE]![CONTO CLIENTE]
Me.SCADENZA = Forms![NUOVA RICEVUTA FISCALE]![SCADENZA]
Me.MOD_PAGAMENTO = Forms![NUOVA RICEVUTA FISCALE]![MODALITA' PAGAMENTO]
Else
    MsgBox "Non esiste una form aperta da cui prendere i dati"
End If
End Sub
Mi piace scrivere....lo so lo so 

 ha scritto nel messaggio 
news:j0lspl$f1n$1...@speranza.aioe.org...

In particolare non riesco a capire perchè il record venga effettivamente 
aggiunto, anche se rateizzato o modificato ma non vengono valorizzati i 
campi [PROTOCOLLO] E [PROTOCOLLO NUMERICO]  e di conseguenza non possono 
essere associati alla fattura corrispondente relazionata tramite relazione 
tra i campi PROTOCOLLO delle tabelle...
Non appena vado a provare a inserire un nuovo valore per l'importo, mi 
compare "è possibile che si stia inserendo un valore non valido per il 
campo", ma poi me lo accetta...
Buch
Giorgia


ho sistemato anche questa questione dei Set non chiusi, ho provato a
ricontrollare le relazioni tra le form e le tabelle, i formati
dei campi IMPORTO e PROTOCOLLO ma non ne vengo a capo...qualcuno ha avuto
voglia di dare uno sguardo alla mia stringa logorroica ? =_=
Giorgia

 voglia di dare uno sguardo alla mia stringa logorroica ? =_=
Consiglio generale:
restringi il tuo post alla sola parte dove si genera l'errore, all'inizio � 
pi� leggibile
consiglio specifico:
se non citi che tipo di errore ti d� e dove e quando, sar� molto dura...
Antonio 


Per rateizzare qualcosa c'e' necessita' di modificare la data di 
scadenza in base a un numero che rappresenta la quantita' di rate o un 
importo che rappresenta la singola rateizzazione e l'intervallo fra rate 
(sec,min,ore,gg,mesi,anni,eoni insomma un qualcosa). In quello che 
scrivi non vedo cicli che si occupano della cosa, questo per fare le 
cose in automatico.
Va bene riportare il codice ma scrivere quello che si vorrebbe, 
descrivendo prima ambiente e risorse, non sarebbe male.
Guardando quello che hai scritto la prima cosa che mi e' venuta in mente 
e' "e te credo" per il motivo scritto sul mio primo periodo.
Comunque meglio cosi' secondo la logica "tutti, maledetti e subito".
Ohhhh.....naturalmente questo secondo la "mia" logica se poi tu fai un 
click dopo aver cambiato scadenza e importo su form questa e' ben altra 
storia e il codice "potrebbe/dovrebbe" funzionare.
-- 
ac (x=y-1)

Il 27/07/2011 10.48, Alessandro Cara ha scritto:
P.S. Quel codice agisce contemporaneamente su Testata e Dettaglio, nella 
gestione con click susseguenti la testata dovrebbe risultare duplicata.
In finale non si capisce bene qual'e' la logica che stai usando (o 
vorresti usare)
Magari se ci metti qualche "iif" o "if....then....else..." va meglio 
;-{))))))))
-- 
ac (x=y-1)

 ha scritto nel messaggio 
news:LoQXp.56414$GZ3....@tornado.fastwebnet.it...

Giusto consiglio, non c'� che da dire, per� attenzione Giorgia, perch� la 
complessit� del tuo algoritmo di calcolo potrebbe crescere esponenzialmente 
e magari un ricalcolo ti passa da 0,23 secondi a 0,38, e non so se hai tutto 
quel tempo da perdere...
Antonio 

 ha scritto nel messaggio 
news:0jQXp.56412$GZ3....@tornado.fastwebnet.it...

Ciao Alessandro, le rate le inserirei io manualmente non chiedo che mi 
vengano calcolate ed inserite automaticamente.
Quello che mi capita per� � che se procedo a modificare un qualsiasi campo, 
prima si attiva l'error 3022 ma poi effettivamente se vado nella tbl 
SCADENZARIO_DETTAGLI, vedo le scadenze ma con i campi PROTOCOLLO  e 
PROTOCOLLO NUMERICO valorizzati a 0.
Inoltre, se vado a modificare il campo IMPORTO mi compare il messaggio 
errore (mi sembrava di averlo gi� postato ma in effetti non lo vedo) "� 
stato immesso un valore non valido per il campo" ma poi, sempre nella tbl 
SCADENZARIO DETTAGLI, gli importi sono stati inseriti correttamente.
Ho verificato che il campo IMPORTO abbia lo stesso formato in tutte le 
maschere da cui viene prelevato (per es.: Me.IMPORTO = Forms![NUOVA FATTURA 
ACQUISTO]![TOTALE FATTURA]) ed � tutto a posto.
A meno che, proprio perch� � un valore che viene prelevato da altra form, 
perda la propriet� "numerica" e diventi automaticamnete "testo"....??
Giorgia

 ha scritto nel messaggio 
news:j0ok94$180$1...@speranza.aioe.org...

Daaaaiiii, il tempo lo perderei volentieri sapessi come impiegarlo per�!
Uff!!
Giorgia 

 Giorgia
Te lo dico io
Cenetta insieme?
Antonio

 PROTOCOLLO NUMERICO valorizzati a 0.
Chi ti da la certezza che l'errore sia sul dettaglio e non sulla testata?
in questi casi si fa cosi':
on error resume next
.....blabla
if err.number <> 0 then
	msgbox "Orrore per questo motivo.....", vbcritical
	exit
endif
.....ariblabla
if err.number <> 0 then
	msgbox "Orrore per quest'altro  motivo....." ,vbcritical
	exit
endif
......ariariblabla......
Msgbox "Fiuuuuuuuuuuuu.....!? Stavolta mi sono salvato/a", vbinformation
end
P.S. A che ti servono quelle resume myexit, simili al mio personale UCAS?
P.P.S. Dovresti imparare a usare il Debug cosi' dove va in errore lo 
"pizzichi" subito e puoi anche fare variazioni o rieseguire "inline"
-- 
ac (x=y-1)


Biso, mi sa che hai passato l'infanzia sul mondo Duplex di NemboKid 
(Superman per i piu' giovani)
-- 
ac (x=y-1)

 (Superman per i piu' giovani)
Non tutti i frequentatori di questo NG sono tuoi coetanei...
Antonio 

 Antonio
uhauhauhauhauhauhauhauhauhauhauha
1-0 per Antonio... :D

 "pizzichi" subito e puoi anche fare variazioni o rieseguire "inline"
Lo vedi che gli IF non li sai usare?...
 if err.number <> 0 then lo devi mettere 1 volta, non 2... :D


In effetti s�, lo so usare solo se parte automaticamente.....
se uso f8, non mi segnala nulla....
Giorgia 

 Cenetta insieme?
Azzzzzzzz... altro che ICAA... qua ci manca solo Marta Flavi :D

   if err.number<>  0 then lo devi mettere 1 volta, non 2... :D
Era per la didattica.
Io ne metto sempre e solo 1 all'inizio, piu' o meno fatto cosi':
if 1=2 then
	quit
else
	quit
endif
Ti posso assicurate che funziona sempre tutto perfettamente.
-- 
ac (x=y-1)

 se uso f8, non mi segnala nulla....
Questo dice semplicemente "esegui la istruzione successiva" (se c'e')
-- 
ac (x=y-1)

 ac (x=y-1)
sei decisamente un ragazzo fortunato allora...
Antonio 

   if err.number<>  0 then lo devi mettere 1 volta, non 2... :D
Ci ho ripensato.
Ho risposta a celia con celia.
Ma se dicevi sul serio, bene, quella struttura e' corretta.
-- 
ac (x=y-1)

 ha scritto nel messaggio 
news:B4TXp.56513$GZ3....@tornado.fastwebnet.it...

Quando gli faremo la lezione sul select switch?
Mi sembra sufficientemente skillata ora
e cos� posso fargli "ripetizioni" nella cenetta...
Antonio 

 Ma se dicevi sul serio, bene, quella struttura e' corretta.
ehmmmm... no che non lo e'...
if err.number<>  0 then
....
e' uguale all'altro
if err.number<>  0 then
...
;)...


Se intendi la select case, li non va bene.
Ma forse non si e' capito proprio il senso vero?
on error resume next
.....qui puo' essere generato un errore che deve essere "trappato"
if err.number <> 0 then
     msgbox "Orrore per questo motivo.....", vbcritical
     exit
endif
.....qui puo' essere generato un errore che deve essere "chewable"
if err.number <> 0 then
     msgbox "Orrore per quest'altro  motivo.....ma -the show must go 
on-" ,vbexclamation
endif
err.clear
.....qui puo' essere generato un errore inaspettato
if err.number=0 then
	Msgbox "Fiuuuuuuuuuuuu.....!? Per stavolta l'ho " & chr(34) & " 
sfangata" & chr(34), vbinformation
else
	Msgbox "E dire che ce l'avevo quasi fatta." & vbcrlf & 
"Porc...pupazza", vbexclamation
endif
end
P.S. E tu all'altro sesso "on a date" fai lezioni di programmazione?
Capisco.
-- 
ac (x=y-1)

 Capisco
Non capisci! (senilit�?)
ognuno ha la propria tipologia di stampe cinesi o collezioni di farfalle no?
Antonio 


Direi proprio di no. Il tempo, lo spazio, e i puntini (...), sono una 
cosa seria (anche le "," ehhhh). ;-{)
-- 
ac (x=y-1)

 cosa seria (anche le "," ehhhh). ;-{)
No no, e' proprio uguale... puntini, ehhhhhh, blablabla  e ","
inclusi ;);)

"Antonio Biso"  ha scritto nel messaggio 
news:j0olho$4l3$1...@speranza.aioe.org...


Antonio
_____________Risposta:
;-)
Meraviglioso Anto', gli anni passano, ma l'istinto rapace resta
MA

 ha scritto nel messaggio 
news:j0p8tb$31j$1...@tdi.cu.mi.it...

ora e sempre
;-P
A


Ohhh....my gosh. Allora dici sul serio!
Guarda la mia ultima risposta a Biso e poi confermami che sono uguali o, 
meglio, che con un solo test si ottiene lo stesso risultato.
Anche solo i primi due test, l'altro e l'Err.Clear li ho aggiunti per 
buon peso
-- 
ac (x=y-1)

 ha scritto nel messaggio 
news:j0oure$s8d$1...@speranza.aioe.org...

s�, cenetta virtuale come le lezioni vba....siam distanti Anto'!;-)
Giorgia 

 Giorgia
Quando c'� un motivo pi� che valido le distanze si azzerano...
a che ora ci vediamo e dove?
A 

 meglio, che con un solo test si ottiene lo stesso risultato.
Guardata... ma o che deve essere "trappato", o "chewable", premesso che
err.number sia diverso da 0, l'IF sarebbe soddisfatta per entrambi i casi, se
non fosse per quel "EXIT" che alla prima tornata ti manda fuori pista, per cui
che senso ha il secondo IF?
-- 
--------------------------------
Pablitomf
Napoli sempre nel "Q"uore!

 che senso ha il secondo IF?
Un IF ha sempre senso, � il principio del DUBITO di cartesiana memoria che � 
alla base di qualunque speculazione scientifica
Antonio 

 alla base di qualunque speculazione scientifica
ah ecco... praticamente stiamo trasformamdo la gestione dell'errore nel "gioco
del perchï¿œ"... ora ï¿œ tutto piï¿œ chiaro! :D


 ha scritto nel messaggio 
news:j0oqaj$gqr$1...@speranza.aioe.org...

forse pu� esserti utile questo tutorial di Alex
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=298
ciao
Daniele 


Ammettendo che tutti vadano per exit, ammettendo che ce ne sia una 
batteria tendente a infinito, poniti questa domanda: come faccio a 
sapere in quale parte della routine si e' verificato l'errore?
Oppure, ammettendo che emetta il messaggio e proseguo, in questo caso 
c'e' bisogno del clear dopo ogni eventuale msg, domanda: come faccio a 
sapere come dove e quando ha preso un errore?
Se, senza fare come ho scritto, c'e' una soluzione piu' "consona" ben 
venga. Come vedi non ci sono if annidate.
Per riferirmi al senso della if: e' chiaro che if err.number <> 0 e' lo 
stesso test in entrambi i casi ma, come dicevo nell'altro post, il tempo 
e lo spazio sono differenti. La prima esamina il segmento A->B (primi 
...) la seconda il segmento B+->C (non A->B, altrimenti sarebbe stato 
catturato dalla 1' if, mentre l'evento di errore e' avvenuto *dopo* il 
primo test, secondi ....) mentre la 3' esamina il segmento C+->D con 
.... precedenti all'esame annessi)
-- 
ac (x=y-1)

 
Io faccio cosï¿œ :
MODULO : GESTIONE ERRORI
Public Sub GestErr(Xform As String, Xriga As Integer, Xerrore As String)
    MsgBox "Da : " & xFrm & vbCrLf & "Riga : " & Xriga & vbCrLf & "Tipo errore :
" & vbCrLf & Xerrore
End Sub
Private Sub QuelCheTiPare_Click()
On Error GoTo err
1 ....
2 ....
3 ....
4 ....
Exit Sub
err:
Call GestErr("FORM: " & 
Me.Form.Name
, Erl(), "QuelCheTiPare_Click : (" &
err.Number & ") " & err.Description)
End Sub



D'accordo. Ma questa e' un'altra cosa. Hai accentrato la emissione 
dell'errore su una funzione. Va bene se tutti gli errori provocano la 
exit di sub/funzione e comunque il messaggio e' generalizzato. Laddove 
hai bisogno di differenziare i messaggi hai poi bisogno di sapere in 
quale *spazio* si e' verificato l'errore e questo, immagino, te lo puo' 
dire la funzione erl() ma per differenziare (il "QuelCheTiPare_Click:", 
per capirci) avresti sempre e comunque bisogno di una batteria di if che 
servono per scegliere il messaggio giusto .
Certamente e' una gestione errori *organizzata* ma messa cosi' non fa 
quello che io sostengo, tra l'altro questa tipo di gestione, che uso, 
non ha bisogno di alcuna if.    ;-{)
P.S. Cosa fa erl()? o meglio, dove sta?
-- 
ac (x=y-1)

> P.S. Cosa fa erl()? o meglio, dove sta?
erl() ï¿œ una funzione nativa di vb vba... ti restituisce il numero di riga nel
quale si ï¿œ  verificato l'errore... per questo io le righe le numero... ;)


 quale si ï¿œ  verificato l'errore... per questo io le righe le numero... ;)
senti a me, scaricati MZ-Tools, cosï¿œ la numerazione te la fa lui in automatico... ;)
da quel tipo di gestione, ti indica "da dove" "in che riga" "da quale comando" e
"che tipo" di errore hai avuto in maniera "GENERALIZZATA"... quindi richiamabile
da qualsiasi cosa



ti aggiungo questa... se proprio vuoi rendere automatico anche il richiamo alla
SUB in cui l'inghippo ï¿œ avvenuto, ti basta sostituire a "QuelCheTiPare_Clik" un bel:
Module.ProcOfLine(Module.CountOfLines, 1)
;)
che dici, ti piace?


 che dici, ti piace?
ma invece di debuggare in maniera cos� spinta, scrivere dei programmi che 
funzionano?
*evil grin*
Antonio 

 funzionano?
eh, magari...



Si. Anche se *non* risolve logicamente il problema legato a : 
"QuelCheTiPare_Click". Ai fini dello sviluppatore e' decisamente di 
ausilio. Ai fini dell'eventuale "UTENTE", quello se ne strasbatte il 
famoso beneamato.
D'altra parte e' anche vero che gli errori derivanti da err.number<>0, 
in genere, non c'entrano nulla con la logica di, come dicono i colti, 
"bisinessss" dell'applicativo.
-- 
ac (x=y-1)

 ausilio. 
dici?... sapere "dove e precisamente accade cosa" dici che allo sviluppatore non
importa? mha'... io non concordo... anche perche' a cosa serve la gestione degli
errori se non a questo?... saro' che sono tardo ma io non l'ho ancora capito il
tuo punto di vista a riguardo... spiegati meglio


 ac (x=y-1)
uhmmm, pare che venga eseguita la stringa fino al primo End with che passa 
subito a My error e quindi a my exit, la seconda parte non viene proprio 
eseguita....per� parte dei dati vengono inseriti nella tbl SCADENZARIO 
DETTAGLI....buch
Giorgia 

 DETTAGLI....buch
Come pensavo. L'errore lo prendi per duplicazione della testata non del 
dettaglio. E lo dovrebbe prendere esattamente sulla istruzione ".Update"
-- 
ac (x=y-1)


Veramente dicevo il contrario, interessa allo sviluppatore. E' 
all'Utente che in genere importa meno di nulla ("nun gne ne po' frega de 
meno", come dicono dalle mie pari) e dicevo anche che, obiettivamente, 
quel tipo di errore e' di sistema e quindi e' importante sapere il dove 
(preciso).
-- 
ac (x=y-1)

Si ma e' proprio quel "dove preciso" che io non colgo in quei 2 if anche a 
endo letto la tua risposta



Uffi.
"dove (preciso)" intendeva che e' necessario sapere *esattamente* dove 
si e' verificato il guaio. Cosa che la *tua* gestione ottiene!
E nei 2 if da me indicati non c'era un "dove (preciso)" ma un "dove (serve)"
Mi sembrava di aver gia' detto che nel caso di attivazione della "goto 
errorlabel" di if non ve ne e' bisogno, neanche di una modestissima.
Ritornando al problema iniziale di Giorgia, da quanto ho capito, e come 
volevasi dimostrare, la *cattiva* gestione dell'errore ha fatto si che 
il messaggio fosse fuorviante visto che l'errore con molta probabilita' 
(99,99%) lo ha sulla testata e non sul dettaglio.
Probabilmente se avesse avuto la *tua* gestione dell'errore non staremmo 
ancora qui a pettinare i calvi, e il mio suggerimento iniziale per 
*comuni mortali* era, appunto, per *comuni mortali*.E ancora sostengo 
che per mandare due messaggi diversificati (che non siano 
Err.description)  hai (tu generico) necessita' di 2 (dicasi due) if (o 1 
if....else...,nel migliore dei casi). E comunque, mi ripeto, qualora il 
messaggio e' solo informativo e l'elaborazione prosegue la "error goto 
errorlabel" non mi sembra possa servire, precisa o non precisa che sia.
Per un momento tralascia la erl()(*)  e fammi comprendere come faresti a 
imputare lo stesso errore ("Chiave Duplicata") alla ".Update" giusta 
(caso di Giorgia)
(*) che tra l'altro con lo stato del mio software non funziona 
(restitusce sempre 0),probabilmente per la questione della numerazione 
delle righe di codice. Stesso dicasi per la ProcOfLine,cosi' come la hai 
suggerita,ovviamente, restituisce il nome dell'ultima funzione del 
modulo. Immagino che la cosa giusta dovrebbe essere +/- :
Debug.print ProcOfLine(erl(),1) & ":" & Lines(erl(),1)
-- 
ac (x=y-1)

 Debug.print ProcOfLine(erl(),1) & ":" & Lines(erl(),1)
l'ho scritta a braccio... ma quello dovrebbe essere piï¿œ o meno..


 con Erl()... stop.
M'hai fatto ride. Mi hai ricordato i javellottisti (coloro che usano 
java) che se non hanno un package che gli fa le cose allora "nun se po 
fa'" (non tutti, ovviamente)
-- 
ac (x=y-1)

 ed elementare, ma io mi districo meglio con gli erl() che con altro :D
vediamo se ho capito io
� la famosa programmazione stile nuvola di fantozzi
gestisce il caso in cui sei cos� sfigato che mentre ti trovi nella routine 
intercettata dal primo errore, te se ne genera un altro
Antonio 

 ...... ad libitum..........
si vabbï¿œ ma questa non ï¿œ una gestione errori, questa ï¿œ una gestione di righe... :D
tu ad ogni riga dovresti avere un "ho fatto un errore?", "sicuro sicuro?",
"allora l'errore ï¿œ questo"...
on error resume next
label.caption = 1/0
if err.number<>0 then msgbox "divisione per zero non consentita1"
label.caption = 1/0
if err.number<>0 then msgbox "azz n'ata vot? ma allora si scem? non si divide un
numero per zeroooooooooooo!!!!"
ogni passo lo devi monitorare cosï¿œ.
;)



Nein.
Sei in una routine in cui puoi avere un "tot" di errori successivi.
chiamiamoli "warning", che forse si capisce meglio, ed hai solo un flag 
che lo puo' segnalare.
flag off-->errore-->segnalazione->flag off-->errore--> 
segnalazione->flag off.....e via a correre. Finche' lo stato e' flag off 
significa che non c'e' stato alcun "warning"
-- 
ac (x=y-1)

 c'e' stato alcun "warning"
non so se � quello che intendi tu
io per una cosa del genere avevo usato una variabile globale che settavo 
all'inizio di ogni routine e se poi finivo in gestione errore facevo cose 
diverse secondo il valore della variabile e quindi da dove venivo...
Antonio 

 ac (x=y-1)
In effetti avevo questa istruzione in Beforeupdate
Forms![INSERISCI SCADENZA]![SCADENZARIO DETTAGLI]![IMPORTO].DefaultValue = 
Parent![TOT FT] - Forms![INSERISCI SCADENZA]![SCADENZARIO 
DETTAGLI]![SUBTOTALE]
 ora provo a eliminare e vedere se � questa davvero la causa dei miei mali, 
in caso come posso reinserirla senza che mi causi errore?
Giorgia 

 Giorgia 
Giorgina ma perche' non usi la mia gestione Errori? coi' finalmente
saprai dove
"precisamente" e' l'inghippo!... 


 ha scritto nel messaggio 
news:j15qi3$7qe$1...@speranza.aioe.org...

Niente, anche cos� quando vado a modificare il campo importa mi dice che sto 
immettendo un valore non valido per il campo.....aaarghh!
e solito problema nell'inserimento dei campi PROTOCOLLO e 
PROTOCOLLO_NUMERICO nella tbl SCADENZARIO_DETTAGLI
Giorgia 


Perch� mi sono persa in tutti i vostri post!
me misera!
Giorgia 

> Perchï¿œ mi sono persa in tutti i vostri post!
AGGIUNGI MODULO : GESTIONE ERRORI
Public Sub GestErr(Xform As String, Xriga As Integer, Xerrore As String)
    MsgBox "Da : " & xFrm & vbCrLf & "Riga : " & Xriga & vbCrLf & "Tipo errore :
" & vbCrLf & Xerrore
End Sub
NEL TUO FORM : 
Private Sub QuelCheTiPare_Click()
On Error GoTo err
1 ....
2 ....
NUMERA TUTTE LE RIGHE DI CODICE CHE HAI
3 ....
4 ....
Exit Sub
err:
Call GestErr("FORM: " & 
Me.Form.Name
, Erl(), "QuelCheTiPare_Click : (" &
err.Number & ") " & err.Description)
End Sub
-- 


 PROTOCOLLO_NUMERICO nella tbl SCADENZARIO_DETTAGLI
Giorgia riprendo il tuo post iniziale su cui tentero' di fare delle 
annotazioni di merito
0) Quali sono i tuoi indici univoci su SCADENZARIO INTESTAZIONE e 
SCADENZARIO DETTAGLI?
Private Sub SALVA_Click()
On Error GoTo myError
1) Al di la della mia diatriba con Maurizio (pablitomf) questa gestione 
di errore non dice in quale zona avviene (o avverra')
Me.Form.Requery
2) A cosa serve questa requery? Che tra l'altro fa la stessa cosa di 
quella al punto 5. Riporta il recordset di form sul primo record.
     Dim Db As DAO.Database
     Set Db = CurrentDb
     Dim Rs As DAO.Recordset
     Set Rs = Db.OpenRecordset("SCADENZARIO INTESTAZIONE")
     With Rs
         .AddNew
         ![ORIGINE] = Me.ORIGINE
         ![PROTOCOLLO NUMERICO] = Me.PROTOCOLLO
         ![PROTOCOLLO] = Format(Me.ORIGINE & "." & Me.PROTOCOLLO & "." &
Me.ANNO)
         ![NUMERO] = Me.DOC_NUMERO
         ![DATA EMISSIONE] = Me.DATA_DOC
         !IMPORTO = Me.IMPORTO
         ![RAGIONE SOCIALE] = Me.RAGIONE_SOCIALE
         .Update
         .Close
     End With
3) Ammettendo che tu stia scrivendo il 2ï¿œ dettaglio,con quale PROTOCOLLO 
  e ORIGINE hai scritto il 1ï¿œ? e quindi, ne consegue, con quale 
PROTOCOLLO  e ORIGINE hai scritto la 1ï¿œ testata?
     Set Rs = Nothing
     Set Db = Nothing
4) Perche' chiudi Db se lo userai ancora?
Me.Form.Requery
5) Questa requery, di cui forse capisco il senso, puo' provocare un gran 
"mess" (casino, per i colti). Questa requery ti fa riposizionare il 
recordset di form sul 1ï¿œ record e immagino la tua form sia associata 
onde da cui chissa' che valori di PROTOCOLLO e ORIGINE va a pescare
     Set Db = CurrentDb
6) cfr punto 4
     Set Rs = Db.OpenRecordset("SCADENZARIO DETTAGLI")
     With Rs
         .AddNew
         !ORIGINE = Forms![INSERISCI SCADENZA]![SCADENZARIO
DETTAGLI]![ORIGINE]
         !ID = Forms![INSERISCI SCADENZA]![SCADENZARIO DETTAGLI]![ID]
         ![PROTOCOLLO NUMERICO] = Me.PROTOCOLLO
         ![PROTOCOLLO] = Format(Me.ORIGINE & "." & Me.PROTOCOLLO & "." &
Me.ANNO)
         !IMPORTO = Forms![INSERISCI SCADENZA]![SCADENZARIO
DETTAGLI]![IMPORTO]
         !SCADENZA = Forms![INSERISCI SCADENZA]![SCADENZARIO
DETTAGLI]![SCADENZA]
         ![MODALITA' PAGAMENTO] = Forms![INSERISCI SCADENZA]![MOD PAGAMENTO]
         .Update
         .Close
     End With
    DoCmd.Close
7) Questa parte non dovrebbe creare problemi sempre verificando punto 5.
myExit:
   Exit Sub
myError:
     Select Case Err.Number
         Case 3022
             MsgBox "SCADENZA GIA' INSERITA PER QUESTA FATTURA!"
8) Se 3022 e' "chiave duplicata" ed hai indici univoci sia su TESTATA 
che DETTAGLI questo messaggio e' altamente impreciso.
             Resume myExit
9) Sta resume "nun" serve
         Case Else
             MsgBox "Piccola eccezione " & vbCrLf & _
                 Err.Number & " " & Err.Description
10) Ci vuole del coraggio a chiamarla "Piccola eccezione"
          Resume myExit
11) Sta resume "nun" serve
     End Select
End Sub
-- 
ac (x=y-1)


Buongiorno a tutti,
grazie mille per aver postato così vivamente ma io mi sono persa già agli 
inizi delle vostre discussioni.
Ho provato ad usare il debug e dico banalmente e semplicemente:
- dove posso verificare le condizioni che avevo deciso per far scattare o 
meno My error? perchè secondo me l'inghippo sta qui, tutto il resto corre 
bene e lo dimostra il fatto che infatti non vengono compilati solo i campi 
PROTOCOLLO  e PROTOCOLLO NUMERICO nella tabella SCADENZARIO_DETTAGLI
Giorgia