Newsgroup: it.comp.appl.access
Titolo: Sintassi .FindFirst

Buongiorno a tutti,
mi potreste aiutare a scrivere correttamente questa ricerca?
 
 rstT.FindFirst "[IdDoc]=" & Cerca
 
Sia l'IdDoc che "Cerca" sono numerici, eppure non riesco a combinarla ho sempre l'errore sintassi scorretta o valori non omogenei...
 
Grazie
 
Alfio

>>>>  
http://www.bb2002.it
 :)  <<<<<
........... [ al lavoro ] ...........

 
 
Ciao,
in effetti...
ho creato un nuovo database e importato tutto nel nuovo, stavolta l'errore che ottengo è diverso: "Oggetto non valido o non impostato", sempre alla stessa riga di prima... riporto tutto quello che c'è prima dell'errore, se puoi indicarmi dove è l'errore e perchè te ne sarei grato.
 
Dim rstQ, rstT As Recordset
Dim dbs As Database
Dim Conta, Cerca As Long
Dim MyImp As Currency
Dim MyData As String
Set dbs = CurrentDb
Set rstQ = dbs.OpenRecordset("Q_Scadenze_Clienti", dbOpenDynaset)
Set rstT = dbs.OpenRecordset("T_Ec_Clienti", dbOpenDynaset)
rstQ.MoveFirst
Do Until rstQ.EOF
    rstQ.MoveFirst
    Cerca = rstQ.Fields("[idbolla]")
    MyImp = rstQ.Fields("[IMPORTO]")
    MyData = rstQ.Fields("[DATASCADENZA]")
    rstT.FindFirst "[IdDocumento] = " & Cerca '(qui ho l'errore du cui sopra)
 
 
Grazie
 
Alfio
 


Trovi Quì la nota tecnica:
https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao
 
 
Devi usare la gestione errori... 
 
Private Function Blabla(vValue)
On Error Goto Err_Handler
 
If IsMissing(vValue) then Goto ExitHEre
rstT.FindFirst "[IdDoc]=" & clng(vValue)
 
If rstT.NoMatch Then
   MsgBox "Record not found."
   Goto ExitHEre
Else
   MsgBox "Trovato, quì fai le tue cose."
End If
 
Exit_Here:
   On Error Resume Next
   If not rstT Is nothing Then rs.Close:Set rstT=Nothing
Exit Function
 
Err_Handler:
   Select Case Err.Number
     Case Else: MsgBox Err.Number & vbNewLine & Err.Description
   End Select
End Function
 
@Alex

 
 
Ok Alex@, ma....
il recordset rstQ non contiene campi, in cui effettuo la ricerca, vuoti ha già fatto la sua selezione quindi non può trovare valori nulli...
 
Alfio

 
 
valori nulli no, ok, ma è possibile che NON ci sia nemmeno un record, o no?
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [  da casa  ] ...........

 ........... [  da casa  ] ...........
 
Ciao,
in effetti la query aveva iniziato nuovamente a non popolarsi più. 
Dopo il suggerimento di Karl (lunga vita a Karl, lunghissima....) ho usato la funzione eval nella query, tutto funzionava bene ma poi ha iniziato nuovamente a non popolarsi, di qui di nuovo l'errore. Ho dovuto eliminare le righe di codice relative alla creazione del recordset e a richiamare una sub alla fine dell'evento su dopo aggiornamento per la creazione del rstQ che, a questo punto, si popola sempre....
 
Alfio

Devesti anche imparare a scrivere codice più robusto... ragionando sulla funzionalità... Non basta che funzioni ma ovviamente farai come credi.
 
@Alex

 @Alex
 
Ciao Alex,
no, non è così, o meglio, che devo imparare a scrivere codice più robusto su questo non ci piove, il link che mi hai indicato l'ho letto e compreso ma, il mio punto di vista è questo; se so per certo (al 100%) che la query deve popolarsi in quanto non può non contenere record e neanche valori nulli, perché ciò non avviene sul dopo aggiornamento della combo e invece si popola al di fuori della sub? Se ci fosse la possibilità di avere query vuote o con valori nulli sarebbe stato opportuno seguire le indicazioni di quel link e  intercettare le varie situazioni...o no? Mi puoi aiutare a comprendere meglio?
 
Alfio

Il codice va scritto in modo da poter essere riutilizzabile, a prova di errore ed in caso avvenga in grado di lasciarne traccia.
 
Le funzioni dovrebbero avere la VALIDAZIONE dei parametri prima di processarli.
Deve esserci una gestione errori
Si deve sempre accertarsi dell'esito delle chiamate soprattutto se non operano sul VBA diretto ma tramite JET in modo indiretto... come nel tuo caso.
 
Ci sono sostenitori che la gestione errori non serve... beati loro io aggiungo... a cosa serve basta non ci siano errori...
Se scrivi 3 righe di codice debuggabile e ad uso personale è una risposta su cui nemmeno perderei tempo.
Se invece le tue applicazioni iniziano ad avere oltre 10000 righe di codice... distribuito in compilato... ad utilizzatori poi magari ci ripensi a come una strutturazione seria cambia le cose.
 
In ogni caso come dicevo... ognuno prende la strada che meglio crede.
 
@Alex

 
 
un esempio estratto dal codice:
 
Set MYSQL = DBS2.OpenRecordset(SQL1, dbOpenDynaset)
If MYSQL.RecordCount = 0 Then GoTo NoRecords2
 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-


 -- 
 
RecordCount sarà valorizzato correttamente in quel modo...?
 
https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb243791(v=office.12)
 
 
@Alex
 

 
 
 404 - Page not found
 
Hmm, we couldn't find this link
 
 
 
la pagina fa riferimento a 2007 e 2010
 
per il 2010 funziona, anche 2013 e 2016 (runtime entrambi)



Attacca il LINK dai, è semplice...!
 
https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/bb243791(v=office.12)
 
 
Non funziona, o meglio il problema esiste da sempre anche con A2016.
 
@Alex

Aggiungo per essere più esplicativo:
 
https://www.techrepublic.com/blog/10-things/10-plus-mistakes-to-avoid-when-using-vba-recordset-objects/
 
 
Ovviamente RecordCount funziona, basta sapere come è opportuno gestirlo, e, come è stato indicato sopra potenzialmente espone a rischio... come dice MS.
 
 
@Alex

 
 
non era un problema di "a capo", lo vedevo e lo vedo su una sola riga
è che il doppioclick si perde la parentesi chiusa in fondo :(


 ........... [ al lavoro ] ...........
 
L'importante che tu abbia compreso il mio appunto, poi il resto è cosa da poco.
 
@Alex