Newsgroup: it.comp.appl.access
Titolo: Problema su controllo di ricerca e funzione DMax

Buona sera a tutti,
premetto di avere un DB strutturato su due tabelle
collegate in relazione uno-a-molti, ovvero:
1) tabella: tblSpecialita
    IdAnno (chiave)
    Anno
2) tabella: tblCoord
    IdCoord (chiave)
    NumProt
    Coord
    Ufficio
    IdAnno
    ..........
Nell'evento DblClick del campo "Anno" apro la tabella collegata
filtrandola mediante:
DoCmd.OpenForm "Pratica", , , "IdAnno=" & Me!IdAnno
ed ottenengo quindi solo le pratiche connesse all'anno di riferimento.
I problemi che mi si pongono a questo punto sono duplici:
1) nella tabella "filtrata" ho inserito l'esempio sulla creazione di
"un controllo di ricerca" tratto dal "Sitocomune" la ricerca che viene
eseguita è sul complessivo dei record e non su quelli di pertinenza
dell'anno di interesse ... come potrei risolre l problema ? Per meglio
esemplificare posto di seguito il codice:
Dim strR As String
Dim strSQL As String
strR = Me!txtRicerca.Text
If Not IsNull(Me!txtRicerca.Text) Then
    strSQL = "SELECT IdAnno, IdCoord, NumCoord, Oggetto " & _
    "FROM tblCoord " & _
    "WHERE (Oggetto Like " & Chr$(34) & "*" & _
    strR & "*" & Chr$(34) & ");"
    Me!Elenconominativi.RowSource = strSQL
    Me!Elenconominativi.Requery
    Me!txtRicerca = strR
    Me!txtRicerca.SetFocus
    Me!txtRicerca.SelStart = 255
End If
2) Il campo "NumProt" è un numero di protocollo che incremento
automaticamente mediante
    NumProt = DMax("NumCoord", "tblCoord") + 1
e verifico che non sia duplica mediante l'evento "prima di aggiornare"
con codice:
    If Not IsNull(DLookup("NumCoord", "tblCoord", "NumCoord = " & Str
(Me!NumCoord))) And Me!NumCoord <> Nz(Me!NumCoord.OldValue) Then
    MsgBox "Progressivo " & Me!NumCoord & " già impegnato.", vbOKOnly,
"Duplicato ... !!!"
    Cancel = True
    End If
però ovviamente il valore massimo che mi restituisce è riferito al
complessivo dei recrd inseriti e non a quelli di pertinenza dell'anno
di riferimento. Anche in questa circostanza come posso far attribuire
il progressivo riferito al solo anno di interesse ??
Spero di essere stato abbastanza chiaro e ringrazio per l'aiuto che
vorrete offrirmi.
Francesco

 ha scritto nel messaggio 
news:4325bdcb-36ed-4887...@z27g2000prd.googlegroups.com...


 ha scritto nel messaggionews:4325bdcb-36ed-4887...@z27g2000prd.googlegroups.com...

Innanzi tutto ti ringrazio per la risposta ... comunque mi da un
errore di "utlizzo non valido del valore NULL" ritengo conseguente al
controllo che applico:
    If NumProt = Null Then
    Me.NumCoord = 1
    Else
    Me.NumCoord = NumProt
    End If
... poi non mi è chiaro il passaggio in cui di impostare il valore
predefinito del:
controllo NumProt: =nz(DMax("NumCoord",
"tblCoord"; "[IdAnno]=Year(Date())"))+1
In attesa di notizie ti ringrazio comunque per l'attenzione.
Francesco

 ha scritto nel messaggio 
news:66e2b712-a2f8-4d8c...@w1g2000prm.googlegroups.com...


 - Mostra testo citato -
Ciao Carlo, buon giorno e grazie per la risposta che purtroppo però
non ha risolto il problema ... il messaggio di errore è sempre lo
stesso:
- "utlizzo non valido del valore NULL"
non saprei come risolvere ... spero tu o gli altri compnenti del NG mi
possiate dare una mano ...
grazie di nuovo

 - "utlizzo non valido del valore NULL"
hai fatto cio' che ti ha detto Carlo su questa istruzione?
If NumProt = Null Then  -----> if isnull(Numprot)
Inoltre il sistema quando va in errore dovrebbe dare una msgbox con il 
tasto di debug. Hai provato a farci click per sapere "esattamente" quale 
riga di codice e' interessata?
--
ac


si si seguito tutto alla lettera ed il problema si presenta
comunque ... di fatto il sistema non va in errore ma mostra soltanto
quel messaggio e dopo aver premuto l'OK permette di continuare
l'inserimento ...approfitto della tua attenzione e cortesia per avere
anche un eventuale riferimento al secondo problema che ho
evidenziato ... grazie

hoyt ha scritto:

Se e' un messaggio di errore "deve" essere presente il bottone di debug.
Altrimenti e' un messaggio gestito e dovresti sapere dove lo emetti.
Per filtrare su anno si fa cosi'
NumProt = nz(DMax("NumCoord", "tblCoord", "idAnno=" & me!idAnno),0) + 1
E poi, se non sono 2000 righe, posta la routine completa in cui pensi si 
verifica l'errore
--
ac

hoyt ha scritto:
If Not IsNull(Me!txtRicerca.Text) Then
 >     strSQL = "SELECT IdAnno, IdCoord, NumCoord, Oggetto " & _
 >     "FROM tblCoord " & _
 >     "WHERE (Oggetto Like " & Chr$(34) & "*" & _
 >     strR & "*" & Chr$(34) & ");"
 >     Me!Elenconominativi.RowSource = strSQL
 >     Me!Elenconominativi.Requery
 >     Me!txtRicerca = strR
 >     Me!txtRicerca.SetFocus
 >     Me!txtRicerca.SelStart = 255
 > End If
 >
strAnno = iif ("" & me!IdAnno  = ""),""," and idAnno = " & me!IdAnno
strSQL = "SELECT IdAnno, IdCoord, NumCoord, Oggetto " & _
      "FROM tblCoord " & _
      "WHERE (Oggetto Like '*" & strR & "*') " & strAnno;
questo per ricercare anche con anno
--
ac

      "WHERE (Oggetto Like '*" & strR & "*') " & strAnno;
    "WHERE (Oggetto Like '*" & strR & "*') " & strAnno
--
ac


Perfetto funziona tutto alla perfezione ... come al solito senza il
Vs. non sarei riuscito a risolvere ...
Grazie nuovo a tutti ...e con l'ccasione ...
Buon Natale e Sereno Nuovo Anno a tutti i partecipanti al NG ... !!!


... ops ho bisogno di disturbarvi solo un attimo ancora per concludere
in bellezza ...
in una casella di testo ho inserito come origine controllo:
=DMax("NumCoord";"tblCoord";"idAnno=" & Me!IdAnno)
per ottenere e visualizzare il valore massimo dei record (NumCoord)
inseriti ovviamente in relazione all'anno di riferimento.
Però in fase di esecuzione la casella di testo evidenzia:
#Nome?
Grazie per la solita pazienza e cortesia ...