Newsgroup: it.comp.appl.access
Titolo: Ricerca per  parte di contenuto di un  campo

avevo un programma access su una penna usb che, la bastarda, � morta!
st� ricreando detto programma, ma  nella maschera dove ho una casella per
la ricerca record in base a parte di contenuto del campo, selezionando il
record non mi fa andare sul record selezionato, ma al massimo va sul primo
record.
precisamente ho:
campi: id, numero, oggetto
nella maschera ho una casella di testo"txtricerca" con il seguente codice
su modifica:
 
Private Sub txtricerca_Change()
Dim strR As String
Dim strSQL As String
strR = Me!txtricerca.Text
If Not IsNull(Me!txtricerca.Text) Then
    strSQL = "SELECT numero, oggetto " & _
    "FROM [sinistri] " & _
    "WHERE (oggetto Like " & Chr$(34) & "*" & _
    strR & "*" & Chr$(34) & ");"
    Me!elencooggetto.RowSource = strSQL
    Me!elencooggetto.Requery
    Me!txtricerca = strR
    Me!txtricerca.SetFocus
    Me!txtricerca.SelStart = 255
End If
End Sub
 
mentre su "click" della casella non associata "elencooggetto" ho il
seguente codice:
 
Private Sub elencooggetto_Click()
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.FindFirst "[numero] = " & Me![elencooggetto]
Me.Bookmark = rs.Bookmark
End Sub
 
quindi, inserendo parte dell'oggetto sulla casella "txtricerca", nella
casella "elencooggetto" mi compare la lista di tutti i record contenenti
oggeddi con parte di testo ricercato, mentre se poi vado a pigiare sul
record della casella "elencooggetto", non mi fa andare sul record scelto,
ma si posiziona sul primo record che esiste in archivio,
 
mi sapete indicare cosa aggiungere nel codice per raggiungere lo scopo?
grazie
l.
 
-- 
 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

> mentre su "click" della casella non associata "elencooggetto"
 
ma elencooggetto � una casella di riepilogo? Una listbox?
 
 

 ma elencooggetto � una casella di riepilogo? Una listbox?
 
listbox   ....?
 
per maggiore sicurezza, le sue propriet� sono:
FORMATO: numero colonne = 3
DATI: Tipo origine riga =  tabellaquery
.....origine riga = SELECT numero, oggetto FROM [sinistri] WHERE (oggetto
Like "*c*");
colonna associata = 1
evento su click = quello che ho scritto nel primo post.
 
mentre nell'evento Prima di Aggiornare ho il seguente codice
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not Me.NewRecord Then
End If
If MsgBox("Confermi le modifiche", vbYesNo) = vbNo Then
Me.Undo
Cancel = True
End If
End Sub
 
ma quest'ultimo non ci azzecca nulla!  vero? :-)


 End Sub
 
prova a sostituire la sub con questa :
 
Private Sub elencooggetto_Click()
 Dim rs As DAO.Recordset
 Set rs = Me.RecordsetClone
    strSearch = Str(Me!elencooggetto)
    rs.FindFirst "numero = " & strSearchName
        If rs.NoMatch Then
            MsgBox "Record not found"
        Else
            Me.Bookmark = rs.Bookmark
        End If
    rs.Close
End Sub 
 
 

vittorio ha scritto:

mi da errore di run-time 13
oggetto non corrispondente
 
sulla riga
strSearch = Str(Me!elencooggetto)


 strSearch = Str(Me!elencooggetto)
 
prova cstr:
 
strSearch = CStr(Me!elencooggetto)
 
 
 
 

 End Sub 
 
Su Clik di elenco oggetto metti un bel 
msgbox me.elencooggetto
 
e dimmi cosa ti da
 
-- 
------------
Pablitomf
Napoli sempre nel "Q"uore!
"mammasantissima" si nasce, non si diventa.
 
TheSpaceCowboy : 
Britos deve recuperare per arrivare in forma al prossimo
infortunio - 24/10/12
 

 e dimmi cosa ti da
mi da il valore del campo "numero" 
nessun errore!


 l.
 
il numero e' un intero?... allora :
 
rs.FindFirst "[numero] = " & int(Me![elencooggetto])


vittorio ha scritto:

niente!
mi da errore di run-time 3077
errore di sintassi (operatore mancante) nell'espressione
 
alla riga successiva, e cio�:
rs.FindFirst "numero = " & strSearchName


 l.
 
non ho visto il codice, ma probabilmente non hai dichiarato la variabile strSearch 
 
quindi:
Dim strSearch As String 


 Dim strSearch As String 
 
o se e' un numero:
 
Dim strSearch As Integer


 nessun errore!
 
Invece di descriverlo in astratto:
Quale valore vedi nel Msgbox? 1, 2, abc, pippo?
 
Quale tipo di dati ha il campo "numero" nella tabella?
 
 
Peraltro puoi sostituire le 4 righe di sopra con 1 sola:
 
Me.Recordset.FindFirst "numero=" & Me!elencooggetto
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 
 

 Me.Recordset.FindFirst "numero=" & Me!elencooggetto
 
Prova anche cosa succede se usi il valore direttamente nel codice:
 
Me.Recordset.FindFirst "numero=" & QuiIlValoreDalMsgBox


 Me.Recordset.FindFirst "numero=" & QuiIlValoreDalMsgBox
 
Me.Recordset.FindFirst "numero=QuiIlValoreDalMsgBox"
 
;)


 rs.FindFirst "[numero] = " & int(Me![elencooggetto])
 
no! non � un intero, � un campo testo dato che il numero � memorizzato
come 12345/2012 (numero/anno)
spremete le meningi grazie!  :-)


 spremete le meningi grazie!  :-)
 
e allora ci vogliono le virgolette...
 
rs.FindFirst "[numero] = '" & Me![elencooggetto] & "'"


 rs.FindFirst "[numero] = '" & Me![elencooggetto] & "'"
 
assafà! 
ora si che funziona!
per due virgolette di cacca! la sintassi è una carogna! (o sono io che sò
scarso con access!)
alla fine il codice giusto è:
 
Private Sub elencooggetto_Click()
Dim rs As DAO.Recordset
Dim strSearch As String
Set rs = Me.RecordsetClone
rs.FindFirst "[numero] = '" & Me![elencooggetto] & "'"
Me.Bookmark = rs.Bookmark
End Sub
 
grazie! e buon anno a tutti voi!


 avevo un programma access su una penna usb che, la bastarda, è morta!
 
Non mettere i database sulle penne USB, schede SD o simili. Le celle di 
memoria hanno un numero limitato di cicli di scrittura, e l'elevato numero
di 
accessi in scrittura di un database le porta inevitabilmente a morte 
prematura.
Se proprio non hai alternativa almeno fai frequenti backup, prima o poi ti 
capiterà di nuovo.
Ciao.
-Marco-


 Me.Bookmark = rs.Bookmark
 
Come già scritto puoi sostituire tutto questo con 1 riga:
 
Me.Recordset.FindFirst "numero='" & Me!elencooggetto & "'"
 
Ha anche il vantaggio che non viene un errore se
il Bookmark fallisce.


 il Bookmark fallisce.
 
grazie Karl, proverò anche questa soluzione, anche per cercare di imparare
un qualcosa in più su access!
Buon anno!
luigi
