Newsgroup: it.comp.lang.visual-basic
Titolo: Boia mondo... :-(( Non ci riesco.... HELP!!!

Ciao gente...
Ecco una bella stranezza...
Magari mi infamerete perche' e' una boiata,
pero' proprio non sono riuscito a scroprire l'inghippo...
Programma in VB5 Professional, database ACCESS 97...
Alura, ho creato il database, in pratica devo attribuire
delle caratteristiche a dei clienti, posso avere n clienti
ed n caratteristiche per ognuno.
Queste ultime hanno un identificativo ed una descrizione.
Giusto per normalizzare un attimino il database,
ho creato una tabella in cui mi tengo id del cliente
ed id della caratteristica. Entrambi i campi
formano la chiave, univoca, della tabella.
Quindi in teoria, se un utente mi aggiunge una caratteristica
gia' inserita per quel cliente, il jet va in errore e 
restituisce un codice per chiave duplicata.
A questo punto intercetto l'errore ed esco ripristinando
il recordset allo stato normale...
Ecco la routine:
Sub AggiungiCausale()
 
    On Error GoTo LocError
 
    ' Aggiunta della causale selezionata all'elenco delle motivazioni
    ' Il recordset e' un data control nel form sottostante,
    SItuazione.Data4.Recordset.AddNew
SItuazione.Data4.Recordset!idcliente=SItuazione.Data1.Recordset!idcliente
    SItuazione.Data4.Recordset!idcausale = Data1.Recordset!idcausale
    ' Questa istruzione restituisce un errore nel caso di duplicazione
    ' della chiave (id cliente + id causale)
    SItuazione.Data4.Recordset.Update
 
    Exit Sub
 
LocError:
    If Err.Number = 3022 Then
        MsgBox "Impossibile aggiungere una causale già presente.",
vbExclamation, "Attenzione: Duplicazione valori."
 
        ' Questa operazione serve per annullare l'operazione
        ' di addnew e rilasciare il buffer di transito...
        ' O almeno cosi' credo...
        SItuazione.Data4.Recordset.CancelUpdate
        ' Adesso l'ho messa in questa posizione, ma in pratica
        ' l'errore (QUELLO NON VOLUTO) esce dopo un refresh...
        SItuazione.Data4.Refresh
 
    End If
 
    On Error GoTo 0
 
    Exit Sub
 
End Sub
Appena uscito, qualsiasi operazione eseguo sullo stesso
recordset mi restituisce l'errore 
METHOD NOT APPLICABLE IN THIS CONTEXT....
???????????????   CHE E'  ??????
Boh.... Ho lasciato sporco qualche cosa???
Mi sfugge qualche cosa???
E' meglio se torno a programmare in clipper?
E' meglio  se non programmo piu'????
Magari e' meglio se vado in vacanza???  :-))) 
Beh... ehm... a parte l'ultima....
Grazie a tutti, scusate, e buone vacanze a tutti
quelli che partono!!!
(SE PRIMA DI PARTIRE RISPONDONO)
ovviamente...   :-)
Tanti saluti da Cattolica...
Pantera

 
Guarda, continua pure ad utilizzare quelle schifezze di datacontrol cosě
fino a quando utilizzi vb avrai casini...
...mi stupisco di come un ex programmatore clipper voglia risparmiare
righe di codice utilizzando le "schifezze"...

End Sub
Ti consiglio di modificare il tutto con il seguente codice:
Sub AggiungiCausale()
    SItuazione.Data4.Recordset.AddNew
SItuazione.Data4.Recordset!idcliente=SItuazione.Data1.Recordset!idcliente
    SItuazione.Data4.Recordset!idcausale = Data1.Recordset!idcausale
    On Error Resume Next
    SItuazione.Data4.Recordset.Update
    If Err=3022 then
        On Error Goto 0
        SItuazione.Data4.Recordset.CancelUpdate
    end if
    On Error Goto 0
Exit Sub
in questo modo, pratyicamente uguale a quello usati nel C, si ottiene di
processare l'errore direttamente nella sub in cui è avvenuto, aggirando
tutti i problemi di visibilità delle variabili e degli oggetti..... Inoltre
è molto più facile ottenere dei loop 'Rtenta'..
non so se ti risolverà il problema, ma sicuramente renderà più leggibile
il tuo codice..ù
Flavio