Newsgroup: it.comp.appl.access
Titolo: FindFirst con due criteri. Sintassi errata

Salve, 
ho un problema di sintassi errata nella seguente routine.
dove sto sbagliando?
 
.....
.....
Set rsAgenda = dbs.OpenRecordset("Agenda2", dbOpenDynaset)
 
Dim Filtro As String
Dim VarPratica as Integer
 
Filtro = "[Me!NuovaDataScadenza]= #" & Format$(rsAgenda!Data2.Value, "mm/dd/yyyy") & "#"
 
varPratica = Forms!Pratiche!pratica_N
 
rsAgenda.FindFirst "IdPratica = " & varPratica & " And  Filtro 
 
Qual è la sintassi corretta? cosa manca?

 rsAgenda.FindFirst "IdPratica = " & varPratica & " And  Filtro
 
Se capisco bene cosa intendi:
 
Dim lngPratica As Long
 
rsAgenda.FindFirst "IdPratica = " & lngPratica & _
   " And Data2 = " & Format(Me!NuovaDataScadenza, "\#yyyy\-mm\-dd\#")
 
Siccome ami leggere vedi anche:
 
Passare una data ad una stringa SQL
http://www.donkarl.com/it?FAQ6.8
 
 
-- 
Ciao
Karl
*********
http://www.AccessDevCon.com
 
Access FAQ: 
http://www.donkarl.com/it
 


Karl... copiata pari pari dalla tua stringa:
 
rsAgenda.FindFirst "IdPratica = " & lngPratica & " And Data2 = " & Format(Me!NuovaDataScadenza, "\#yyyy\-mm\-dd\#")
Mi da un "errore di sintassi (Operatore Mancante) "


(Anche se in realtà non ho capito come fa ad interpretare il campo Data2 senza specificare il recordset rsAgenda!Data2...)

 Mi da un "errore di sintassi (Operatore Mancante) "
 
Mostra l'intero codice della procedura.



Intera Procedura:
Dim dbs As Dao.Database
Dim rsAgenda As Dao.Recordset
Set dbs = CurrentDb
Set rsAgenda = dbs.OpenRecordset("Agenda2", dbOpenDynaset)
 
Dim VarData as Date
Dim IngPratica As Long
 
varData = Me.NuovaDataScadenza 'In realtà qui andrà il parametro: 
                                'Forms!Pratiche!Data_Scadenza ma non credo che questo possa complicare le cose
 
IngPratica = Forms!Pratiche!pratica_N
 
rsAgenda.FindFirst "IdPratica = " & lngPratica & " And rsAgenda!Data2 = " & Format(Me!NuovaDataScadenza, "\#yyyy\-mm\-dd\#")
 
If rsAgenda.NoMatch Then
MsgBox "non trovato"
Else
MsgBox "Trovato"
End If

Credo sia composto in modo errato il 2° criterio nella parte del NOMECAMPO.
 
Se il campo si chiama [Data2] puoi privare così:
 
rsAgenda.FindFirst "IdPratica = " & lngPratica & " And Data2 = " & Format(Me!NuovaDataScadenza, "\#yyyy\-mm\-dd\#")
 
Ora fai attenzione anche a come hai valorizzato quel campo ... se lo hai fatto usando NOW() rischi di non trovare nulla... in quanto conterrebbe hh:mm:ss
 
Vedi tu...
@Alex

 Ora fai attenzione anche a come hai valorizzato quel campo ... se lo hai fatto usando NOW() rischi di non trovare nulla... in quanto conterrebbe hh:mm:ss
 
Beh, ha di sicuro letto il mio articolo breve, chiaro ed indispensabile 
su come passare data/ora segnalato nella prima risposta.


Ecco allora anche senza saperlo ho detto la stessa cosa...meno male allora siamo a cavallo.
 
@Alex 
 


 Posso spiegare l'equivoco:
ho copiato Pari Pari la routine di Karl e mi ha dato l'errore di sintassi (operatore mancante).
Mi è sembrato strano quel riferimento a campo Data2 ed ho aggiunto 
rsAgenda!Data2 per provare la routine.
 Quando mi è stato chiesto di postare tutta la procedura ho dimenticato di togliere quella mia modifica visto che intanto avevo fatto altre mille prove.
In ogni caso... la routine dava lo stesso errore. 
Alex/Karl la proprietà del campo Data2 è Data in cifre senza orario.     

La data è data e la formattazione non agisce sul contenuto ma sul visualizzato.
 
Ne consegue che se tu lo popoli con NOW() non visualizzi hh:mm:ss ma ci sono... quindi il criterio che non agisce sul visualizzato ma sul contenuto ovviamente non restituisce quanto atteso.
In questi casi se puoi usi Date() instead of Now() oppure togli i decimali al valore ...
 
@Alex


Alex, io Non popolo il campo con Date() ne con Now(), nel senso che non vi è alcuna routine 
Date2 = Date()  
Date2 = Now(). (intendevi questo?)
 Il valore del campo è digitato dall'utente e il formato è dd\mm\yyyy  

 End If
 
Il messaggio p.e. viene se Me!NuovaDataScadenza è Null. Se non hai una 
data per paragonare dovresti decidere cosa fare. p.e. evitare il 
paragone con If...Then ecc.
 
Nel tuo codice si trova un altro errore:
IngPratica (con i maiuscola) non è identico con lngPratica (L 
minuscola). "lng" vuol dire Long e l'ho proposto perché Integer spesso 
non è sufficiente.



Posso dire una cosa?....  Posso parlare francamente?...
...Fanculo alla L piccola e alla I Grande !!!!!!!!!
:-) :-)
Grazie. Ora funziona! Era quello il parametro mancante.
(p.s. io sapevo che lng stava per LONG ma leggevo I e scrivevo I)
Sorry !
