Newsgroup: it.comp.appl.access
Titolo: Codice per maschera cliente

Stò tentando di realizzare una maschera di inserimento dati Cliente in
modo tale che anche sovrascrivendo il campo "RagioneSociale", da codice
verifichi se esiste già. Finora tutto ok, ma (ovviamente) se il campo
RagioneSociale è effettivamente un nuovo inserimento il codice
continua a propormi un nuovo inserimento. Posto il codice che ho
utilizzato:
Private Sub RagioneSociale_AfterUpdate()
    Dim Ricerca As String
    If DCount("[ContatoreCliente]", "Cliente", "[RagioneSociale]='" _
    & Me.RagioneSociale & "'") = 0 Then
'       Il cliente non esiste, annulla l'inserimento e si sposta in un
nuovo
'       record
        Me.Undo
        Me.RagioneSociale.SetFocus
        Recordset.AddNew
    Exit Sub
    Else
'       Il cliente esiste in anagrafica, annulla l'inserimento e si
posiziona su
'       quel cliente
        Ricerca = Me.RagioneSociale
        Me.Undo
        DoCmd.FindRecord Ricerca, , , acSearchAll, False, acCurrent
    Exit Sub
    End If
End Sub
Come faccio?


io controllerei anche il newRecord. Per newrecord e dcount=0 non 
dovrebbe fare la undo
NB:  "[RagioneSociale]='"  & Me.RagioneSociale & "'")
io la farei cosi'
"[RagioneSociale]='"  & replace(Me.RagioneSociale,"'","''") & "'")
--
ac

Alessandro Cara ha scritto:

Ho provato a sostituire e modificare così:
    If DCount("[ContatoreCliente]", "Cliente", "[RagioneSociale]='" & _
    Replace(Me.RagioneSociale, "'", "''") & "'") = 0 And _
    Form.NewRecord = False Then
Ma il risultato è il medesimo. Su un record nuovo mi fà sempre
l'undo. E se invece di far partire il codice di verifici AfterUpdate lo
faccio partire BeforeUpdate? mmmm... no... si pianta tutto..!

 ha scritto nel messaggio 
news:1150436930....@i40g2000cwc.googlegroups.com...


Come faccio?
Io ho usato la partita IVAper la gestione preventivi perchè con la ragione 
sociale basta una virgola che cambia e non riconosce l'errore, con la 
partita IVA questo non succede, ti posto il codice:
---------------------------------
Public Sub controllopartitaiva()
Dim datoinserito
Dim cboclienti  As ComboBox
If (Not IsNull(DLookup("[partitaiva]", "clienti", "partitaiva ='" & 
partitaiva & "'"))) Then
        MsgBox "ATTENZIONE!!! Il cliente INSERITO è già presente nel 
database."
        If MsgBox("Richiamo i dati del cliente?", vbQuestion + vbYesNo, 
"Cliente già inserito") = vbNo Then
            partitaiva = ""
            partitaiva.Undo
            cboclienti = ""
            Exit Sub
        Else
            'cboclienti = ""
            datoinserito = partitaiva
            Me.Undo
            partitaiva.Undo
            Me.FilterOn = False
            Me.Filter = "idcliente=" & DLookup("idcliente", "clienti", 
"partitaiva ='" & datoinserito & "'")
            Me.FilterOn = True
        End If
        End If
End Sub 

VedoTondo ha scritto:

In effetti potrei utilizzare la P.Iva, ma nel caso specifico non è un
dato sempre disponibile (e non voglio sapere il perchè). Anche la
soluzione della verifica del newrecord non ha dato il risultato voluto.
Penso che dovrò abbandonare... peccato.

 
Che si pianti tutto sulla beforeupdate potrebbe starci poiche' c'e' il 
rischio che entri in una situazione di chiamate ricorsive.
Il fatto che ti entri anche con il controllo sul newrecord mi sembra 
strano a meno di fallimento della dcount con restituzione di null 
(questo pero' mi sembra che possa avvenire solo con  tabella vuota).
Puoi provare cosi':
If nz(DCount("[ContatoreCliente]", "Cliente", "[RagioneSociale]='" & _
      Replace(Me.RagioneSociale, "'", "''") & "'"),0) = 0 And _
      Form.NewRecord = False Then
se poi hai dimestichezza con il debug potremmo controllare la cosa in 
modo piu' fine.
PS. : Mai abbandonare. Spesso quando qualcosa non funziona e' perche' 
l'errore e' da qualche altra parte.
--
ac

Alessandro Cara ha scritto:

Ho provato a copiare-incollare il codice postato: medesimo risultato.
Non vorrei che con l'impiego di eventi BeforeInsert sulla Form
(contatore cliente e data inserimento cliente), la verifica di newrecod
diventi inefficacie (con i o senza i?).
Private Sub Form_BeforeInsert(Cancel As Integer)
    Me!ContatoreCliente = Nz(DMax("[ContatoreCliente]", "[Cliente]"),
0) + 1
    Me!DataInserimentoCliente = Now()
 
End Sub
Debug... cos'è?

 ha scritto nel messaggio 
news:1150523971.5...@c74g2000cwc.googlegroups.com...
In effetti potrei utilizzare la P.Iva, ma nel caso specifico non è un
dato sempre disponibile (e non voglio sapere il perchè). Anche la
soluzione della verifica del newrecord non ha dato il risultato voluto.
Penso che dovrò abbandonare... peccato.
Fai tu, io ho avuto diverse registrazioni dello stesso cliente con nomi 
diversi nell'anagrafica fino a che non ho inserito il controllo P.iva.
Basta che tu scriva TIZIOCAIO srl o TIZIOCAIOsrl oppure TIZIOCAIO S.R.L. e 
subito il controllo nome và a ramengo mentre la partita IVA e univoco e non 
ci sono ditte in Italia che ne abbiano una uguale.
Saluti Andrea 

VedoTondo ha scritto:

Il tuo ragionamento non fà una grinza.
In effetti è un dubbio che mi assale. Parlerò oggi stesso con
l'interessato per avere questa conferma.
Grazie
Carlo