Newsgroup: it.comp.appl.access
Titolo: come faccio ad effeture un controllo su tre campi

Ciao ragazzi qualcuno mi puo aiutare?
Inserendo  dati n una maschera ho la necessita d sapere se il record esiste 
già una sorta di DLookUp di -- la verifica va fatta sul nome cognome e data 
di nascita insieme ---qualcuno mi puo aiutare?? 

 ha scritto nel messaggio
news:DcOMe.60433$2U1.3...@news3.tin.it...

Ciao Marco,
se hai a disposizione il codice fiscale, potresti utilizzare il CF come Pk
della tua tabella e verificare su eventp prima di aggiornare la presenza di
quella chiave ... che ovviamente non può essere duplicata.
Comunque supponendo che la tabella si chiami anagrafica, il campo nome,
nome, il campo cognome, cognome, e il campo data di nascita si chiami
data_nascita la dkllokup diventa :
= DLookup("nome", "Anagrafica", "nome=" & Me!TuoControlloNome & " and
cognome=" & Me!TuoControlloCognome & " and data_nascita=" &
format(TuoControlloDataNascita,"yyyy/mm/dd"))
se i dati in "anagrafica" sono tantini la DlookUp potrebbe risultare lenta,
la soluzione potrebbe utilizzare la faq del Sito comune di @Alex per la
ricerca dei duplicati 3.107 sez. forms ricerca duplicati.
Ps. facci un pensierino sul discorso del codice fiscale !
Ciao, notte.
Sandro


Non sono un esperto come tanti in questo ng.
Io ho risolto casi di questo genere solo impostando come chiave primaria
tutti e tre i campi. Naturalmente indicizzata e senza duplicati.
Credete che sia sbagliata questa prassi?
Ciao.
Franco

 Franco
No, è la prova che ad ogni problema è possibile trovare almeno 2 soluzioni. Poi ognuno utilizza quella che ritiene adatta...
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:DcOMe.60433$2U1.3...@news3.tin.it...


 ha scritto nel messaggio 
news:P8ZMe.20217$F23.2...@twister2.libero.it...


 ha scritto nel messaggio 
news:lVQMe.79436$fm.53...@news4.tin.it...


 inserisco ?
[cut]
Ciao Marco,
ti raccomando il quoting !!!
Allora ti posto questa soluzione un po' diversa dalla prima che sfrutta
quella function di @Alex, leggermente modificata.
Un domanda : la maschera in questione ti serve proprio per popolare la
tabella anagrafica, oppure è una maschera dove per esempio attribuisci a
ciascun nominativo una mansione ?
es. Pinco Palla  impiegato
      Peppe Poppo Dirigente???
Aldilà della precedente domanda, crei un pulsante sulla tua bella maschera
che ti servirà per controllare il
duplicato.
Nel pulsante ci metti :
Private Sub MioComando_Click()
Dim rst As DAO.Recordset
Dim strSql As String
If checkFields(True, 1) Then
    strSql = "select nome,cognome,data_nascita from articolo_unione"
    strSql = strSql & " where id_articolo=" & Me!controlloNome & " and
cognome=" & Me!controlloCognome & " and data_nascita=" &
Me!controlloDataNascita
    Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
   If rst.RecordCount > 0 Then
        Call checkFields(True, 2)
        MsgBox vbCrLf & _
                "Attenzione Duplicato !!!", vbExclamation, "AVVISO"
        Call checkFields(True, 3)
    End If
End If
Set rst = Nothing
end sub
----------------------------------
e poi di seguito questa function :
----------------------------------
Private Function checkFields(check As Boolean, checkType As Integer)
Dim ctl As Control
Select Case checkType
    Case 1
    For Each ctl In Me.Controls
       If ctl.Tag = "OBBLIGATORIO" Then
            With ctl
                  If .Visible And (.ControlType = acTextBox) Then
                        .BackColor = vbWhite
                           If IsNull(.Value) Or .Value = "" Then
                                 .BackColor = vbRed
                                 MsgBox UCase(ctl.Controls(0).Caption) &
vbCrLf & _
                                          "@Inserire i dati mancanti nel
Campo@", vbExclamation, "AVVISO"
                                 .SetFocus
                                 Set ctl = Nothing
                                 check = False
                                 'exit function
                           End If
                  End If
            End With
      End If
    Next
    Set ctl = Nothing
    checkFields = check
    Case 2
        For Each ctl In Me.Controls
            With ctl
                If .Tag = "OBBLIGATORIO" Then
                    .BackColor = vbRed
                End If
                End With
        Next
    Case 3
        For Each ctl In Me.Controls
            With ctl
                If .Tag = "OBBLIGATORIO" Then
                    .BackColor = vbWhite
                End If
            End With
        Next
End Select
End Function
Prova a inserire un duplicato, e prova a cliccare lasciando un controllo non
popolato. Vedi se ti piace e se funzia.
Ciao, Sandro.
PS.Fai sapere come va ;-))

 [cut]
ooops, nella strSql formatta la data secondo lo STD ISO per evitare
ambiguità. Te la ri-passo solo la strSql, adatta i nomi dei controlli a
quelli che stai utilizzando.
 strSql = "select nome,cognome,data_nascita from anagrafica"
 strSql = strSql & " where nome=" & Me!controlloNome & " and
cognome=" & Me!controlloCognome & " and data_nascita=" &
format(Me!controlloDataNascita,"yyyy/mm/dd")
Ciao. Sandro


Io, purtroppo no, per il momento.
Quanto ti ho suggerito è dovuta ad una situazione simile a cui ho dovuto
trovare la soluzione.
Per il resto, come ti dicevo, non sono un grosso esperto.
Credo che comunque qualcuno qui del ng ti potrà indicare il modo sicuramente
possibile.
Ciao,
Franco

Scusa sandro sono un neofita delle newsgroup
e non ho molta  pratica con vba
il mio problema è il seguente:
ho una maschera dove inserisco id_paziente (chiave primaria contatore) 
cognome nome e data di nascta del pazienete, a cui è la legata una 
sottomaschera con i campioni analzzati relativi al paziente.
dopo che creo l bottone con le tue indicazoni devo creare anche una query? o 
meglio dove inserico il strsql..... scusa ancora per il disturbo... 

 meglio dove inserico il strsql..... scusa ancora per il disturbo...
No, aspetta, questo te lo dico appena mi hai risposto.
Ciao. Sandro

 > pazente.....insomma un casino grazie ancora per l'eventuale soluzione
Eh, allora sulla maschera anagrafica ( quella basata sulla tabella che
contiente tutti i nominativi) crei un pulsante con il codice del precedente
post, e ci copi anche la funzione.Queste rountine non fanno altro che
controllare se nella tabella sottostante c'è già un nominativo con nome,
cognome, data_nascita uguale.
In piu se trascuri di compilare qualche controllo associato (---->>> mi sono
dimenticato di dirti che nei controlli devi impostare nella scheda altro il
tag OBBLIGATORIO ( cioè ci devi scrivere dove c'è tag OBBLIGATORIO se no non
finzia. )   . in più se dopo il click trova un duplicato te lo segnala e lo
evidenzia i campi in rosso.
E' chiaro che devi evitare di fare chiudere la maschera senza che questo
controllo sia stato effettuato !!!.
Ciao, Sandro.

 >
il codice che trovi sul bottone non fa altro che aprire un recordset
indicato nella strSql che conta se ci sono record con nome, cognome, data di
nascita nella tabella uguali a quello che stai inserendo.
ciao Sandro.

 son o una frana vero.....
Ciao Marco,
il controllo che contiente la data di nascita nella tua maschera si chiama
controlloDataNascita ? clicca con il mouse sul controllo con il tasto dx e
guarda cosa c'è scritto su nome elemento, cosi fai anche per gli altri
controlli nella maschera e correggi il nome nella routine che ti ho passato,
me li sono inventati !
per Dim rst As DAO.Recordset : aggiungi la libreria dao strumenti--->
riferimenti spunta Microsodr DAO 3.6 object library, aprendo il VBE  su una
maschera o su un modulo. Controlla che abbia la priorita rispetto alla ADO
oppure despunta la ADO se non la utilizzi.
Ciao, Sandro.

 ha scritto nel messaggio
news:S78Ne.62750$2U1.3...@news3.tin.it...

Ciao Marco,
te lo segnala in rosso perchè le istruzioni devono stare sulla stessa riga
cioè se scrivi strSq= " e o poi vai a capo te lo scrive in rosso : mettiti
con il cursore dopo le virgolette e digita canc !
la mail che vedo qui è la tua  ?
Sandro.

 > riprovo.....tragedia ma ti chiedo troppo se ti invio il file ????
vai : sandro punto peruz at tin punto it
ovviamente: punto =.
                    at =@
Ora però vado a nanna, ci darò un occhio domani pomerggio, prima non posso.
 Magari provaci ancora, magari ci riesci.
Notte, Sandro.