Newsgroup: it.comp.appl.access
Titolo: Striga su recordset come fare?

Mi succede una cosa strana che non riesco più a sistemare....
Filtro un recordset tramite un campo denominato descrizione nel modo
seguente
Private Sub OK_Click()
 Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseClient
    rst.Open "qryIntMovimentiMagazzino", CurrentProject.Connection
If Me.idcausalemagazzino = 0 And Me.Sottocontocf = 0 And Me.CodartVal = 0
And Me.Descrizione > 0 Then
rst.Filter = rst.Filter = "descrizione like " & "'" & Me.Descrizione & "'" &
""
Else
Set Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.Recordset
= rst
Set  = Nothing
End Sub
Se digito sul campo descrizione una sola parola, mi trova tutti i record che
contengono nel campo descrizione quella parola...
Esempio : Parola di Giancarlo e Giancarlo è di parola
Se invece digito una frase, mi trova tutti i record che iniziano con quella
frase...
Esempio : Parola di Giancarlo
Io vorrei, e vi faccio un esempio, trovare i record in questo modo:
Se scrivo Rubinetto mi deve ritornare tutti i record che iniziano con
rubinetto
Esempio: Rubinetto per lavabo e non Lavabo per rubinetto
Ho provato a modificare il filtro, di seguito elencato, come da consiglio di
Roberto da casa , ma non succede niente anzi mi ritorna un errore.
rst.Filter = "descrizione like " & "'" & Me.Descrizione & "'" & "*"
Sono tre giorni che cerco di sistemare sta benedetta stringa ma non ci
riesco....... POSSIBILE?
Saluti Massimo


Ciao Max,
stai usando ADO, i caratteri jolly dell'operatore Like sono diversi da DAO.
Sostituisci il * con %
Cerca nel manuale la sezione [progetti di Access]-->[Utilizzo Di
Query]-->[Operazioni fondamentali]-->[Esempi di utilizzo dei caratteri
Jolly] troverai le informazioni del caso.
Ciao Giorgio

 news:GfBvc.89328$Qc.34...@twister1.libero.it...
dimenticavo, c'è anche un errore di sintassi, il simbolo % deve essere
incluso nel parametro
---------------------
rst.Filter = "descrizione like " & "'" & Me.Descrizione & "%'"
---------------------
in ogni caso trovi tutto negli esempi del manuale.
Ciao Giorgio

 Grazie giorgio
Comunque l'asterisco funzione nei campi con una sola parola tipo il codice
articolo......
rst.Filter = "descrizione like " & "'%" & Me.Descrizione & "%'"
Come vedi ho inserito il percentuale all'inizio per creare una routine per
la ricerca di una parola all'interno del campo descrizione e funziona
regolalmente...
L'unico endicap è ricercare una parola con l'apostrofo come fare? dove
inserisco Chr(34)?
Graie Max

 Graie Max
In Sql standard se devi passare una stringa che contiene un apice bisogna
raddoppiarlo
-------------
rst.Filter = "descrizione like " & "'%" & Replace(Me.Descrizione,"'","''") &
"%'"
-------------
se poi stai usando un database di access potresti anche racchiudere la
stringa tra doppi apici rinunciando alla compatibilità verso altri database
----------
rst.Filter = "descrizione like " & CHR(34) & "%" & Me.Descrizione & "%" &
CHR(34)
----------
Ciao Giorgio

 Pultroppo non succede niente con tutti e due gli esempi....
Non riesco a capire il motivo....
Se uso solamente i CHR(34) senza apici e segni di perc. mi trova la stringa
apostrofata perchè?
Può essere un problema di riferimenti?
Cia e grazie ancora Max

Esempio : Parola di Giancarlo
------------------------------
quindi dai per scontato che funziona, ho pensato che hai tralasciato
volutamente alcuni pezzi perchè non importanti o perchè scontati e per
questo ho spostato l'interesse sulla stringa del filtro che era sbagliata.
forse se ci mostri il codice completo .....
Ciao Giorgio

 Ciao Giorgio
Scusami infatti lo avevo trascritto male... Il codice completo è il seguente
Private Sub OK_Click()
 Dim rstSuppliers As ADODB.Recordset
    Set rstSuppliers = New ADODB.Recordset
    rstSuppliers.CursorLocation = adUseClient
    rstSuppliers.Open "qryIntMovimentiMagazzino", CurrentProject.Connection
If Me.idcausalemagazzino = 0 And Me.Sottocontocf = 0 And Me.CodartVal = 0
And Me.Descrizione > 0 Then
rstSuppliers.Filter = "descrizione like" & " '" & Me.Descrizione & "%'"
Else
If Me.idcausalemagazzino > 0 And Me.Sottocontocf > 0 And Me.CodartVal > 0
Then
rstSuppliers.Filter = "idcausalimovimentimagazzino = " &
Me.idcausalemagazzino & " and SottocontoCliFor = " & Me.Sottocontocf & " and
codart like """ & Me.CodArt & "*"" and descrizione like " & Chr(34) &
Me.Descrizione & Chr(34) & " And Contocfn =   " & Chr(34) & Me.CF & Chr(34)
& " "
Else
If Me.idcausalemagazzino = 0 And Me.Sottocontocf > 0 And Me.CodartVal > 0
Then
rstSuppliers.Filter = "SottocontoCliFor = " & Me.Sottocontocf & "  And
Contocfn =   " & Chr(34) & Me.CF & Chr(34) & " and codart like """ &
Me.CodArt & "*"" and descrizione like " & Chr(34) & Me.Descrizione & Chr(34)
& " "
Else
If Me.idcausalemagazzino = 0 And Me.Sottocontocf = 0 And Me.CodartVal > 0
Then
rstSuppliers.Filter = "codart like """ & Me.CodArt & "*"" and descrizione
like " & Chr(34) & Me.Descrizione & Chr(34) & " "
Else
If Me.idcausalemagazzino > 0 And Me.Sottocontocf = 0 And Me.CodartVal > 0
Then
rstSuppliers.Filter = "idcausalimovimentimagazzino = " &
Me.idcausalemagazzino & " and codart like """ & Me.CodArt & "*"" and
descrizione like " & Chr(34) & Me.Descrizione & Chr(34) & " "
Else
If Me.idcausalemagazzino > 0 And Me.Sottocontocf > 0 And Me.CodartVal = 0
Then
rstSuppliers.Filter = "idcausalimovimentimagazzino = " &
Me.idcausalemagazzino & " and SottocontoCliFor = " & Me.Sottocontocf & " And
Contocfn =   " & Chr(34) & Me.CF & Chr(34) & " and descrizione like " &
Chr(34) & Me.Descrizione & Chr(34) & " "
Else
If Me.idcausalemagazzino = 0 And Me.Sottocontocf > 0 And Me.CodartVal = 0
Then
rstSuppliers.Filter = "SottocontoCliFor = " & Me.Sottocontocf & " And
Contocfn =   " & Chr(34) & Me.CF & Chr(34) & " and descrizione like " &
Chr(34) & Me.Descrizione & Chr(34) & " "
Else
If Me.idcausalemagazzino > 0 And Me.Sottocontocf = 0 And Me.CodartVal = 0
Then
rstSuppliers.Filter = "idcausalimovimentimagazzino = " &
Me.idcausalemagazzino & " and descrizione like " & Chr(34) & Me.Descrizione
& Chr(34) & " "
Else
End If
End If
End If
End If
End If
End If
End If
End If
Set Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.Recordset
= rstSuppliers
Set rstSuppliers = Nothing
End Sub
Tutto il suddetto codice mi funziona alla perfezione, il problema era che
sul campo descrizione non riuscivo a ricercare la descrizione che iniziasse
solamente con alcune lettere iniziali.......
Adesso con la modifica fatta grazie a te tutto va bene.....il problrema
rimane se la parola che voglio cercare è apostrofata...
ES: D'africa mi ritorna errore 3001
Ciao Max

 Ciao Max
come già detto prima se non raddoppi il singolo apice non può funzionare.
---------------------
If Me.idcausalemagazzino = 0 And Me.Sottocontocf = 0 And Me.CodartVal = 0
And Me.Descrizione > 0 Then
rstSuppliers.Filter = "descrizione like" & " '" &
Replace(Me.Descrizione,"'","''") & "%'"
Else
-------------------
Ciao Giorgio

 come già detto prima se non raddoppi il singolo apice non può funzionare.
 ---------------------
 If Me.idcausalemagazzino = 0 And Me.Sottocontocf = 0 And Me.CodartVal = 0
 And Me.Descrizione > 0 Then
 rstSuppliers.Filter = "descrizione like" & " '" &
 Replace(Me.Descrizione,"'","''") & "%'"
 Else
 -------------------
 Ciao Giorgio
Ciao Giorgio scusami se ti stò assillanto........ ho sistemato il codice,
funziona benissimo, però appena voglio cercare una parola con l'apostrofo
non mi visualizza più l'errore, ma non mi ritorna nessuna riga....pultroppo
non riesco più a capire quale possa essere il motivo...
Ciao Max


Ciao Max,
metti un punto di interruzione, dopo l'istruzione *rstSuppliers.Filter =
"descrizione like ecc ecc" * stampa nella finestra immediata il contenuto di
:
-------------------
? rstSuppliers.Filter
? rstSuppliers.RecordCount
? rstSuppliers!Descrizione
-------------------
e postalo, cosě vediamo cosa non va
Ciao Giorgio

 ha scritto nel
messaggio news:c9pcg3$u88$1...@lacerta.tiscalinet.it...

Scusami ma non riesco piů a focalizzare.......
come faccio

 come faccio
Da VBA tramite il menu Debug-->Imposta punto di interruzione metti la manina
dopo l'istruzione *rstSuppliers.Filter = "descrizione like ecc ecc", esegui
e poi dalla finestra immediata stampi quello che ti ho postato sopra. Se non
hai la fionestra immediata puoi visualizzarla con Visualizza-->Finestra
immediata.
Per maggiori informazioni cerca sull'help DEBUG e poi vai a Barra degli
strumenti Debug
Ciao Giorgio


Ho provato ad eseguire le tue indicazioni non so in cosa sbaglio..
ho messo il punto di interruzione nella riga rstsuppliers.filter  ed ho
eseguito la riga nella finestra immediata...
mi ritorna "la variabile non è ancora stata creata in questo contesto".....
Cosa mi consigli di fare?...... ciao Max


solo quello che ti ho detto, il punto di interruzione lo metti DOPO!!!
rstSuppliers.Filter, poi esegui il programma o apri la maschera insomma lo
fai funzionare, quando il codice si ferma sulla riga con lo stop dalla
finestra di debug scrivi ...
? rstSuppliers.Filter
ne piů e ne meno.
Ciao Giorgio

 Ciao Giorgio
Sono riuscito ad eseguire il debug.... appena si blocca il codice sulla riga
ed eseguo ? rstSuppliers.Filter nella finestra immediata mi stampa 0
Che significa?
Ciao
Max

Dimenticavo
Se nella finestra immediata digito ? rstSuppliers.RecordCount, mi stampa il
numero totale dei record del recordset
Se nella finestra immediata digito ? rstSuppliers!Descrizione, mi stampa la
descrizione del primo record del recordset
Ciao

 ha scritto nel messaggio
news:zikwc.39481$Wc.12...@twister2.libero.it...

Ciao,
se hai messo il punto di interruzione nell'assegnazione del filtro premi il
tasto F8 in modo che il codice prosegue di un'istruzione e poi stampa nella
finestra di debug il filtro *? rstSuppliers.Filter*
Ciao Giorgio

 Ciao Giorgio
Ciao
Ho cambiato il filtro con il seguente
rstSuppliers.Filter = "descrizione like" & " '" & Replace(Me.Descrizione,
"'", "''") & "%'"
Ho eseguito tutte le tue istruzioni (scusami se non capivo bene il
debug...adesso credo di saperlo usare )....
descrizione like 'lavabo%'
La suddetta riga viene stampata nella finestra immediata dopo aver digitato
? rstsuppliers.Filter
Le ricerche funzionano alla perfezione.....se ricerco il seguente articolo
L'avabo
non mi da piů errore, ma non mi filtra niente, il recordset rimane vuoto
anche se esistono due record con la suddetta descrizione.
Pensi che sia risolvibile la cosa?


Giorgio scusami la stringa che stampa la finestra immediata è la seguente e
non quella di prima
descrizione like 'l''avabo%'

 ha scritto nel messaggio
news:D20xc.96959$Qc.37...@twister1.libero.it...

Ciao,
l'istruzione è corretta, sei sicuro di avere due record con il campo
descrizione che inizia con L'avabo ? Non è che prima c'è qualche spazio ?
Ciao Giorgio

 ha scritto nel messaggio
news:D20xc.96959$Qc.37...@twister1.libero.it...

Ciao,


 Ciao Giorgio
Ho controllato il campo descrizione....non ci sono spazi
descrizione like 'l''avabo%'
E corretto descrizione like 'l''avabo%'  con doppio apice dopo la L?
Non so piů cosa pensare
Ciao Max

 ha scritto nel messaggio
news:eQdxc.44238$Wc.14...@twister2.libero.it...

si č corretto, puoi verificarlo anche con una Dlookup, vai nella finestra di
debug e scrivi
-------------------------
? Dlookup("Descrizione","qryIntMovimentiMagazzino","Descrizione LIKE
'l''avabo*' ")
-------------------------
(qui ho usato l'asterisco perchč Dlookup usa DAO e non ADO)
Che versione di ADO stai usando ?
Ciao Giorgio

 Ciao Giorgio
Ho verificato la riga di comando e stampa .....NULLO
Ti elenco tutti i riferimenti presenti:
Visual Basic For Applications
Microsoft Access 11.0 Object Library
Ole Automation
Microsoft Activex Data Objects 2.1 Library
Microsoft DAO 3.6 Objects Library
Microsoft Data Access Components Installed Version
Pensi sia un problema di librerie?
Ciao Max
Grazie per la pazienza...


Ciao,
per quanto riguarda le librerie Microsoft Activex Data Objects 2.1 Library è
un po' vecchia, l'ultima versione è la 2.8, puoi scaricarla da questo link,
cerca MDAC 2.8
http://msdn.microsoft.com/data/downloads/updates/default.aspx
per quanto riguarda la ricerca il mistero è svelato, se con questo comando
---------------
? Dlookup("Descrizione","qryIntMovimentiMagazzino","Descrizione LIKE
'l''avabo*' ")
---------------
 hai ricevuto NULLO vuol dire che in qryIntMovimentiMagazzino non c'è
nessuna riga con il campo descrizione che inizia con l'avabo.
Ciao Giorgio

 Ciao Giorgio
Infatti, nel controllare la query effettivamente gli mancava la descizione
con la riga, perchč per fare le prove
modificavo il campo descrizione di un'altra tabella articoli....
Adesso nella finestra immediata mi stampa tutta la descrizione esatta.
Il problema rimane nel fatto, che non mi visualizza la riga nella
sottomaschera con origine record, il recordset assegnatogli con
Set Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.Recordset
= rstSuppliers
Se invece cerco la descrizione senza l'apostrofo nella sottomaschera mi
visualizza la riga trovata...
Perchč non mi assegna alla sottomaschera i record trovati con l'apostrofo?
Ciao Max

 ha scritto nel messaggio
news:Zrjxc.44875$Wc.14...@twister2.libero.it...

Max,
deve trovarla, insisti nel capire cosa succede con l'aiuto della finestra di
debug inserendo i punti di interruzione nel tuo codice.
Ciao Giorgio

 Ciao Giorgio
Credimi č un mistero, ho fatto mille prove sulla finestra immediata ed con i
punti di interruzione....
Mi assegna il recordset nella sottomaschera solamente se la descrizione č
senza apostrofo....
Cosa posso provare ancora?

 Ciao Giorgio
Dimenticavo.... ho persino creato un campo nella maschera principale dove
assegno il valore, tramite un pulsante, della descrizione ricercata con
l'apostrofo
? rstsuppliers!descrizione
e funziona regolarmente

 ha scritto nel messaggio
news:EPjxc.98625$Qc.38...@twister1.libero.it...

Max, che posso dirti Bo!!. Piu che ricreare la tua situazione e testarla non
posso fare, a me funziona bene.
Ciao Giorgio

 Ciao Giorgio
Ti elenco tutto il codice che ho assegnato al pulsante della maschera per
popolare la sottomaschera:
Private Sub OK_Click()
 Dim rstSuppliers As ADODB.Recordset
    Set rstSuppliers = New ADODB.Recordset
    rstSuppliers.CursorLocation = adUseClient
    rstSuppliers.Open "qryIntMovimentiMagazzino", CurrentProject.Connection
If Me.idcausalemagazzino = 0 And Me.Sottocontocf = 0 And Me.CodartVal = 0And
Me.Descrizione > 0 Then
rstSuppliers.Filter = "descrizione like" & " '" &
Replace(Me.Descrizione,"'", "''") & "%'"
Else
End If
Set Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.Recordset=
rstSuppliers
Set rstSuppliers = Nothing
End Sub
Pensi che possa aver sbagliato a compilare il codice?
Adesso funziona tutto alla perfezione, l'unico problema rimane che non mi
popola la sottomaschera ...
Boooooooo
Che succede?
Ciao Max


Ciao Max,
il codice va benissimo,  infatti ti trova il record con l'avabo. Il problema
è quando assegni il recordset alla maschera, non si capisce il perchè ma non
visualizza nulla.
Evidentemente la compatibilità tra i form e  ADO non è ancora ben definita,
peccato ci tocca usare una sintassi non standard.
per risolvere fai così
-------------------
 Private Sub OK_Click()
  Dim rstSuppliers As ADODB.Recordset
     Set rstSuppliers = New ADODB.Recordset
     rstSuppliers.CursorLocation = adUseClient
     rstSuppliers.Open "qryIntMovimentiMagazzino", CurrentProject.Connection
 If Me.idcausalemagazzino = 0 And Me.Sottocontocf = 0 And Me.CodartVal =
0And
 Me.Descrizione > 0 Then
 rstSuppliers.Filter = "descrizione like " & CHR(34) & Me.Descrizione & "%"
& CHR(34)
 Else
 End If
 Set
Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.Recordset=
rstSuppliers
 Set rstSuppliers = Nothing
 End Sub
-------------------
Ciao Giorgio


Effettivamente è strano.....comunque credo di abbandonare il tipo di ricerca
anche se ti confesso che sono molto cocciuto....
Il problema rimane se fai la ricerca con più parole...Es: L'avabo clio
Ritorna sempre l'errore...
Ti ringrazio nuovamente
Ciao Max

 ha scritto nel messaggio
news:niFxc.46976$Wc.15...@twister2.libero.it...

vero, ma ti rimane la strada del filter sulla subform
---------------------
 Private Sub OK_Click()
If Me.idcausalemagazzino = 0 And Me.Sottocontocf = 0 And Me.CodartVal =0 And
Me.Descrizione > 0 Then
     Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.Filter =
"descrizione like " & CHR(34) & Me.Descrizione & "*" & CHR(34)
Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.FilterOn=True
Else
    Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.Filter =
""
Forms!frmintmovimentimagazzino!sfrmIntMovimentiMagazzino.Form.FilterOn=True
End If
End Sub
---------------------
Ciao Giorgio