Newsgroup: it.comp.appl.access
Titolo: Maledetto Dlookup

Ciao a tutti
Sto cercando di visualizzare un msgbox di avvertimento nel caso che
selezionando da una combo un cliente, questo nella tab anagrafica
abbia il pagamento alla consegna.
Ho provato in vari modi questo è l'ultimo:
nell'evento dopo aggiornamento del campo cliente
Private Sub Cliente_AfterUpdate()
Me![Destinazione].Requery
 Dim pagam As String
 pagam = DLookup("ModPagamento", "Anagrafica Clienti",
"RagioneSociale= " & "Forms!Ordini!Cliente")
     If pagam = "Alla Consegna" Then
    MsgBox "Il cliente ha il pagamento alla consegna", _
 vbInformation + vbOKOnly
 End If
End Sub
Ho senz'altro scritto una fesseria ma non riesco a trovare la formula
giusta dell'ultima parte della DLookup, mi dice: utilizzo non valido
di Null.
Tutti i campi in questione sono testo.
dove sta l'inghippo?
Grazie a tutti.
Mauro.

 ha scritto nel messaggio
news:728bb32c-2fcb-484c...@d50g2000hsf.googlegroups.com...

Ciao Mauro.
Prova questo:
pagam = DLookup("ModPagamento", "[Anagrafica Clienti]", "RagioneSociale=
Forms!Ordini!Cliente")
Sinceramente trovo un grosso difetto in questo, dovuto al fatto che di norma
la Ragione Sociale non è mai un campo
indicizzato in quanto Descrittivo, le Aziende si identificano con la
P.I.V.A. o il C.F. che è Univoco e da usare come Indice o addirittura PK.
Questo comporta di certo un'inefficienza non indifferente nell'estrazione
del dato....
La stessa cosa varrebbe per la modalità di Pagamento, in cui di norma si
identifica una tabella con Codice Corrispondente e descrizione in chiaro...
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

 dove sta l'inghippo?
Soluzione alternativa: prevedere una colonna in più (magari nascosta)
nell'origine dati della combo.
Questo ti eviterebbe il DLookup che, comunque, esegui ogni volta che
selezioni un valore dalla combo.
Per continuare invece sulla riga della tua soluzione, io la scriverei come
segue (aggiustando veramente poco):
Private Sub Cliente_AfterUpdate()
  Me.controlloDestinazione.Requery
  Dim pagam As String
  pagam = DLookup("ModPagamento", "Anagrafica Clienti", _
                  "RagioneSociale= " & Me.Cliente)
  If pagam = "Alla Consegna" Then
    MsgBox "Il cliente ha il pagamento alla consegna", _
           vbInformation + vbOKOnly
  End If
End Sub
Osservazioni:
 1) il Requery è un metodo da applicare ad un controllo, non ad un campo;
 2) nella WhereCondition della DLookup avevi specificato troppe virgolette;
 3) nella WhereCondition della DLookup ti conviene fare riferimento al
    campo piuttosto che al controllo;
 4) per controllare da dove salta fuori il Null in questione, ti consiglio
    di mettere un breakpoint nel codice ed eseguire le istruzioni passo
    passo, magari facendo buon uso della "Finestra variabili locali" o
    della "Finestra immediata".
-- 
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution

 dove sta l'inghippo?
-- 
Ciao
Geppo 

Ho seguito il consiglio di Gabriele ed ho eliminato la Dlookup.
Però non riesco a fare uscire il msgbox.
Nell'evento in uscita ho scritto:
Private Sub Cliente_Exit(Cancel As Integer)
If (Me!Cliente.Column(2) = "01") Then
    MsgBox "Il cliente ha il pagamento alla consegna", _
  vbInformation + vbOKOnly
  End If
End Sub
Perchè mai?
sia il campo cliente che il "01" sono testo.
Grazie a tutti.

Rettifico!
era solo un banale errore.
Così come sta funziona benissimo.
Grazie per i preziosi aiuti.
Mauro.