Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

problema nell'utilizzo della formattazione condizionale

93 views
Skip to first unread message

francodel...@gmail.com

unread,
Dec 21, 2014, 2:42:37 AM12/21/14
to
ciao a tutti
volevo utilizzare questo codice nella formattazione condizionale

If Not IsNull(Dlookup("MioCampo", "MiaTabella", _
"MioCampo = " & Chr$(34) & Me!MioControllo & Chr$(34))) _
And Me!MioControllo <> nz(Me!MioControllo.OldValue) Then

MsgBox Me!MioControllo & " Già esiste.", vbOKOnly, "Duplicato!"
Cancel = True

End If

ho provato con:
Not IsNull(Dlookup("MioCampo"; "MiaTabella";"MioCampo = " & Chr$(34) & Me!MioControllo & Chr$(34))) And Me!MioControllo <> nz(Me!MioControllo.OldValue)

grazie.

Karl Donaubauer

unread,
Dec 21, 2014, 7:43:33 AM12/21/14
to
Salve,

Francodellavalle28 ha scritto:
Se capisco bene hai provato quest'espressione nel dialogo della FC.
Non è una buona idea perché il codice è inteso per il momento dopo un
aggiornamento in un controllo di un solo record. La FC funziona molto
diversamente.

Se assolutamente vuoi farlo sarebbe al massimo sensato per una maschera
singola con 1 solo record perché la FC sempre coinvolge tutti record di
una maschera e tanti DLookup inutili quanti record ci sono -1 non siano
buono per la prestazione.

In riguardo alla sintassi devi cancellare "Me!" perché è qc. che solo
esiste nel codice VBA.

Per il prossimo messaggio sarebbe meglio di scrivere la tua vera
espressione (per vedere problemi con nomi di oggetti ecc.) e cosa succede.

--
Ciao
Karl
*********
Access FAQ: http://www.donkarl.com/it
Access Lobby: http://www.AccessDevelopers.org

francodel...@gmail.com

unread,
Dec 21, 2014, 8:51:46 AM12/21/14
to
ciao Karl

ho fatto in questo modo

in prima di aggiornare, del controllo "Email" ho inserito:

If Not IsNull(DLookup("Email", "TbEmail", _
"Email = " & Chr$(34) & Me!Email & Chr$(34))) _
And Me!Email <> Nz(Me!Email.OldValue) Then
MsgBox Me!Email & " Già esiste.", vbOKOnly, "Duplicato!"
End If

poi ho creato una query "TovaDuplicatiEmail":
SELECT TbEmail.Email
FROM TbEmail
GROUP BY TbEmail.Email
HAVING (((TbEmail.Email) In (SELECT [Email] FROM [TbEmail] As Tmp GROUP BY [Email] HAVING Count(*)>1) And (TbEmail.Email)=[Forms]![M_Gestione]![SM_Email].[Form]![Email]));

in espreaaione di FC:
Not IsNull(DLookUp("Email";"TovaDuplicatiEmail"))

Cosa ne pensi?
grazie




Karl Donaubauer

unread,
Dec 22, 2014, 4:05:22 AM12/22/14
to
Salve Franco,

Francodellavalle28 ha scritto:
> ...
> in prima di aggiornare, del controllo "Email" ho inserito:
>
> If Not IsNull(DLookup("Email", "TbEmail", _
> "Email = " & Chr$(34) & Me!Email & Chr$(34))) _
> And Me!Email <> Nz(Me!Email.OldValue) Then
> MsgBox Me!Email & " Già esiste.", vbOKOnly, "Duplicato!"
> End If
>
> poi ho creato una query "TovaDuplicatiEmail":
> SELECT TbEmail.Email
> FROM TbEmail
> GROUP BY TbEmail.Email
> HAVING (((TbEmail.Email) In (SELECT [Email] FROM [TbEmail] As Tmp GROUP BY [Email] HAVING Count(*)>1) And (TbEmail.Email)=[Forms]![M_Gestione]![SM_Email].[Form]![Email]));
>
> in espreaaione di FC:
> Not IsNull(DLookUp("Email";"TovaDuplicatiEmail"))
>
> Cosa ne pensi?

Mi sembra orribile. Non cambia niente in riguardo ai problemi con la FC,
DLookup, Timing ecc. che ho provato di descrivere.

È difficile consigliarti qc. se solo mostri cosa fai ma non descrivi la
situazione e cosa vuoi ottenere. p.e. quale tipo di maschera usi -
singola o continua, cosa vuoi che succede quando e per quale tempo ecc.
Poi si potrebbe discutere soluzioni.

francodel...@gmail.com

unread,
Dec 22, 2014, 11:09:21 AM12/22/14
to
ciao Karl

la sottomaschera è a Maschere continue
e vorrei oltre al messaggio:
MsgBox Me!Email & " Già esiste.", vbOKOnly, "Duplicato!"

segnalare in rosso con FC eventuali
email già esistenti

Karl Donaubauer

unread,
Dec 22, 2014, 12:04:02 PM12/22/14
to
Salve,

Francodellavalle28 ha scritto:
>>> ...
>>> in prima di aggiornare, del controllo "Email" ho inserito:
>>>
>>> If Not IsNull(DLookup("Email", "TbEmail", _
>>> "Email = " & Chr$(34) & Me!Email & Chr$(34))) _
>>> And Me!Email <> Nz(Me!Email.OldValue) Then
>>> MsgBox Me!Email & " Già esiste.", vbOKOnly, "Duplicato!"
>>> End If
>>>
>>> poi ho creato una query "TovaDuplicatiEmail":
>>> SELECT TbEmail.Email
>>> FROM TbEmail
>>> GROUP BY TbEmail.Email
>>> HAVING (((TbEmail.Email) In (SELECT [Email] FROM [TbEmail] As Tmp GROUP BY [Email] HAVING Count(*)>1) And (TbEmail.Email)=[Forms]![M_Gestione]![SM_Email].[Form]![Email]));
>>>
>>> in espreaaione di FC:
>>> Not IsNull(DLookUp("Email";"TovaDuplicatiEmail"))
>>> ...
>
> la sottomaschera è a Maschere continue
> e vorrei oltre al messaggio:
> MsgBox Me!Email & " Già esiste.", vbOKOnly, "Duplicato!"
>
> segnalare in rosso con FC eventuali
> email già esistenti

Funziona come lo descrivi sopra o no?

Se no prova di rendere la query più semplice e veloce:

SELECT Email
FROM TbEmail
GROUP BY Email
HAVING Count(Email)>1

Poi nel dialogo della FC prova con

Il valore del campo è uguale a

DLookUp("Email";"TovaDuplicatiEmail";"Email='" & [Email] & "'")

Speriamo che non è troppo lento.

francodel...@gmail.com

unread,
Dec 22, 2014, 1:50:59 PM12/22/14
to
Il giorno lunedì 22 dicembre 2014 18:04:02 UTC+1, Karl Donaubauer ha scritto:
> Salve,
>
> Francodellavalle28 ha scritto:
> >>> ...
> >>> in prima di aggiornare, del controllo "Email" ho inserito:
> >>>
> >>> If Not IsNull(DLookup("Email", "TbEmail", _
> >>> "Email = " & Chr$(34) & Me!Email & Chr$(34))) _
> >>> And Me!Email <> Nz(Me!Email.OldValue) Then
> >>> MsgBox Me!Email & " Già esiste.", vbOKOnly, "Duplicato!"
> >>> End If
> >>>
> >>> poi ho creato una query "TovaDuplicatiEmail":
> >>> SELECT TbEmail.Email
> >>> FROM TbEmail
> >>> GROUP BY TbEmail.Email
> >>> HAVING (((TbEmail.Email) In (SELECT [Email] FROM [TbEmail] As Tmp GROUP BY [Email] HAVING Count(*)>1) And (TbEmail.Email)=[Forms]![M_Gestione]![SM_Email].[Form]![Email]));
> >>>
> >>> in espreaaione di FC:
> >>> Not IsNull(DLookUp("Email";"TovaDuplicatiEmail"))
> >>> ...
> >
> > la sottomaschera è a Maschere continue
> > e vorrei oltre al messaggio:
> > MsgBox Me!Email & " Già esiste.", vbOKOnly, "Duplicato!"
> >
> > segnalare in rosso con FC eventuali
> > email già esistenti
>
> Funziona come lo descrivi sopra o no?

si!!!

> Se no prova di rendere la query più semplice e veloce:
>
> SELECT Email
> FROM TbEmail
> GROUP BY Email
> HAVING Count(Email)>1
>
> Poi nel dialogo della FC prova con
>
> Il valore del campo è uguale a
>
> DLookUp("Email";"TovaDuplicatiEmail";"Email='" & [Email] & "'")
>
> Speriamo che non è troppo lento.

ma il tuo è molto piu' veloce
grazie Karl

francodel...@gmail.com

unread,
Dec 23, 2014, 3:27:42 AM12/23/14
to
ciao Karl
ora però ho il problema che per colorare anche l'email duplicata,
devo inserire in dopo aggiornamento un me.recalc
e cosi' facendo, mi si aggiorna anche l'ordinamento dell'email;
che io vorrei che avvenisse in una secondo momento.

Karl Donaubauer

unread,
Dec 23, 2014, 6:25:57 AM12/23/14
to
Salve Franco,

Francodellavalle28 ha scritto:
> ...
> ora però ho il problema che per colorare anche l'email duplicata,
> devo inserire in dopo aggiornamento un me.recalc
> e cosi' facendo, mi si aggiorna anche l'ordinamento dell'email;
> che io vorrei che avvenisse in una secondo momento.
>

"dopo aggiornamento" del controllo o del record?
Dove hai impostato l'ordinamento?

Ho provato di riprodurrlo ma qui un recalc non cambia l'ordinamento dei
record.

Hai già provato altri metodi come Me.Refresh?

francodel...@gmail.com

unread,
Dec 23, 2014, 1:16:09 PM12/23/14
to
Il giorno martedì 23 dicembre 2014 12:25:57 UTC+1, Karl Donaubauer ha scritto:
> Salve Franco,
>
> Francodellavalle28 ha scritto:
> > ...
> > ora però ho il problema che per colorare anche l'email duplicata,
> > devo inserire in dopo aggiornamento un me.recalc
> > e cosi' facendo, mi si aggiorna anche l'ordinamento dell'email;
> > che io vorrei che avvenisse in una secondo momento.
> >
>
> "dopo aggiornamento" del controllo o del record?
nel record (della sottomaschera)

> Dove hai impostato l'ordinamento?
nella query origine record (della sottomaschera)


> Ho provato di riprodurrlo ma qui un recalc non cambia l'ordinamento dei
> record.
>
> Hai già provato altri metodi come Me.Refresh?

ho provato con refresh,
ma si colora solo se l'email è visibile altrimenti no!
cioè se l'email e' sopra la barra di scorrimento verticale
il refresh non ha effetto





Message has been deleted

francodel...@gmail.com

unread,
Dec 24, 2014, 6:15:35 AM12/24/14
to
Ciao Karl
di male in peggio
dopo aver provato refresh in dopo aggiornamento
e dopo conferma eliminazione del record
ho avuto quest'errore:

AppName: msaccess.exe AppVer: 11.0.8321.0 AppStamp:4b4f9cfd
ModName: msjtes40.dll ModVer: 4.0.9502.0 ModStamp:44859905
fDebug: 0 Offset: 000073d9

francodel...@gmail.com

unread,
Dec 25, 2014, 1:36:00 PM12/25/14
to
è il recalc che crea quest'errore
0 new messages