Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-01-2007, 13:27   #1
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
[VB6-ADO-ACCESS]-Problema Stored Query E Operatore LIKE...

Il problema è semplicissimo all'apparenza... All'atto pratico invece...

Devo eseguire una query parametrica da VB, passando un parametro stringa ad una Stored Query di Access 2003 che utilizza l'operatore LIKE.
In pratica il RecordSet risultante deve contenere tutti i prodotti della tabella Prodotti, che cominciano con un numero imprecisato di caratteri stabiliti dall'utente...

Qui il codice del Criterio di Access su Nome_Prodotto :
Like [Input Iniziali Nome_Prodotto] & "*"

Faccio notare che ovviamente la query, lanciata da Access funziona perfettamente, e funziona allo stesso modo se il Criterio è :
Like [Input Iniziali Nome_Prodotto] + "*"
Oppure
Like [Input Iniziali Nome_Prodotto] & '*'
Oppure
Like [Input Iniziali Nome_Prodotto] + '*'

Qui invece il codice VB che chiama ed esegue la Stored Query :


...
...
Dim CMD As ADODB.Command
Set CMD = New ADODB.Command
With CMD
Set .ActiveConnection = dbConnection
.CommandText = nomeQuery
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter(nomeCriterio, adVarChar, adParamInput, Len(valoreCriterio), valoreCriterio)
End With

Set RS = New ADODB.Recordset
RS.CursorType = adOpenKeyset
RS.LockType = adLockOptimistic
RS.CursorLocation = adUseClient
RS.Open CMD

MsgBox RS.RecordCount


Dopo l'operazione il Recordcount mi ritorna sempre '0' e ovviamente ogni successivo tentativo di leggere il Recordset produce un errore...

Faccio notare che il codice VB riguardo all'uso del Command è lo stesso medesimo di un'altra procedura che NON usa l'operatore LIKE di Access, ma cerca direttamente il Nome_Prodotto, e che FUNZIONA.

E' proprio l'operatore LIKE di Access che crea problemi ? Come risolvere ?
So benissimo che ci sono molti altri modi, come passare tutta la stringa della Select da VB6 ecc..., ma voglio cmq usare la query già costruita in Access, passandole un parametro.

Spero di essere stato abbastanza chiaro, e perdonate la lunghezza della domanda...

GRAZIE a chiunque abbia un idea !
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2007, 13:36   #2
akyra
Senior Member
 
L'Avatar di akyra
 
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
se hai estrema necessità di usare quel sistema provo ad analizzare come mai il tuo codice sbaglia, altrimenti se è il risultato che ti interessa la soluzione ce l'ho già, fatta con query "già costruita" ma senza usare i parametri...ora vedo
__________________
akyra è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2007, 13:44   #3
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da akyra
se hai estrema necessità di usare quel sistema provo ad analizzare come mai il tuo codice sbaglia, altrimenti se è il risultato che ti interessa la soluzione ce l'ho già, fatta con query "già costruita" ma senza usare i parametri...ora vedo
Ti ringrazio.
In effetti vorrei proprio usare questo metodo. Da VB6 avevo già risolto.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2007, 15:00   #4
akyra
Senior Member
 
L'Avatar di akyra
 
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
allora, il codice corretto è il seguente:
Codice:
Dim Cmd As ADODB.Command
Dim Param As ADODB.Parameter
Dim Rs As ADODB.Recordset

Set Cmd = New ADODB.Command
Cmd.ActiveConnection = CurrentProject.Connection
Cmd.CommandType = adCmdStoredProc
Cmd.CommandText = "Query1"

Set Param = Cmd.CreateParameter("cercaNome", adVarChar, adParamInput, Len("pippo"))
Param.Value = "pippo"
Cmd.Parameters.Append Param
Set Rs = Cmd.Execute()

'due righe per testarne il corretto funzionamento:
Rs.MoveFirst
MsgBox "Il valore ritornato dalla ricerca è: " & Rs![Nome]
non che il tuo non sia corretto, ma non ho avuto tempo di analizzarlo, per cui non so dire se hai scritto qualcosa di errato, anche se a prima vista mi sembra sia giusto (scusa l'eccesso di zelo ma sono al lavoro per cui preferisco risolverli i problemi invece che cercare di capirli ). Comunque, cambia la query che esegue la ricerca creando un NUOVO CAMPO , nella query stessa, che ha come dati la seguente dicitura (il codice sottostante lo devi inserire nella testata "Campo", non in "Criterio"):
Codice:
Verifica: InStr(Left([Nome];Len([cercaNome]));[cercaNome])
[Nome] = campo su cui eseguire la ricerca (stringa).
[cercaNome] = PARAMETRO passato alla query.
come "Criterio" per questo nuovo campo, scrivi soltanto >0
In questo modo verrà creato un nuovo campo calcolato, denominato "Verifica", che potrà assumere valori interi >=0 a seconda che la stringa passata come argomento corrisponda all'inizio del campo in cui si sta cercando.

puoi cambiare i nomi di questi campi con i nomi, rispettivamente, del campo su cui devi fare la ricerca, e del parametro che la query accetta.

Ti posto anche un database di esempio su cui è implementato tutto il discorso.
Se ci son problemi chiedi pure.
(cerco di essere dettagliato in maniera quasi maniacali così da non far sorgere dubbi...)
Allegati
File Type: zip db1.zip (17.8 KB, 3 visite)
__________________

Ultima modifica di akyra : 31-01-2007 alle 15:04.
akyra è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2007, 17:52   #5
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Sì, in effetti è un escamotage piuttosto macchinoso per aggirare l'operatore LIKE che a quanto pare è proprio la causa dell'intoppo.

Ho provato a snellire un po' la tua soluzione:

1. Il mio codice VB ha un suo perchè in effetti :
Set RS = New ADODB.Recordset
RS.CursorType = adOpenKeyset
RS.LockType = adLockOptimistic
RS.CursorLocation = adUseClient
RS.Open CMD

Mi permette di modificare a piacere i parametri di RS PRIMA che lo stesso venga aperto, mentre la procedura
Set Rs = Cmd.Execute()
istanzia ed apre in un colpo solo e i parametri di default di RS non mi vanno bene...

2. Non ho creato nessun campo aggiuntivo, ma mi sono limitato ad aggiungere in "Campo" la tua stringa, ossia :
InStr(Left([Nome];Len([cercaNome]));[cercaNome])

- Checkbox "Mostra" NON selezionata.
- Criterio : >0

3. L'istruzione SQL risultante è molto pulita :
SELECT *
FROM T_Prodotti
WHERE (((InStr(Left([Nome_Prodotto],Len([Iniziali_NomeProd])),[Iniziali_NomeProd]))>0));


Funziona perfettamente in Access, e anche con il mio codice VB !

Ti ringrazio ancora per l'utile suggerimento , anche se resto un po' di stucco davanti ad una limitazione del genere... In pratica il LIKE di Access è inutilizzabile per via parametrica !

Ovviamente chiunque fosse interessato all'argomento, se ce la fa con LIKE, sarei proprio curioso di sapere COME !
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 01-02-2007, 00:36   #6
akyra
Senior Member
 
L'Avatar di akyra
 
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
Quote:
Originariamente inviato da MarcoGG
2. Non ho creato nessun campo aggiuntivo, ma mi sono limitato ad aggiungere in "Campo" la tua stringa, ossia :
InStr(Left([Nome];Len([cercaNome]));[cercaNome])

- Checkbox "Mostra" NON selezionata.
- Criterio : >0
forse mi sono espresso male, ma era proprio quello che intendevo io, cioè che mettessi nell'espressione "Campo" l'istruzione che avevo fatto, in modo, appunto, di creare un nuovo campo calcolato nella query (non nella tabella di partenza, tanto per capirci).

Per quanto riguarda il resto, bisognerebbe un po' sbatterci su la testa per capire come mai il codice VB non riesce a far girare correttamente la query...in tutta sincerità, su due piedi, non lo saprei....ci dovrei ragionare...comunque se va bene lo stesso così, sono felice di esserti stato utile
__________________
akyra è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2007, 08:11   #7
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da akyra
forse mi sono espresso male, ma era proprio quello che intendevo io, cioè che mettessi nell'espressione "Campo" l'istruzione che avevo fatto, in modo, appunto, di creare un nuovo campo calcolato nella query (non nella tabella di partenza, tanto per capirci).
No no, ti eri espresso bene.
Intendevo "Aggiungere un campo" nel senso dell'uso della "AS", e quindi ritrovarsi poi un Field aggiuntivo e inutile anche nel RS...
- Il tuo codice SQL era :
PARAMETERS cercaNome Text ( 255 );
SELECT Tabella1.Codice, Tabella1.Nome, InStr(Left([Nome],Len ([cercaNome])),[cercaNome]) AS Verifica FROM Tabella1
WHERE (((InStr(Left([Nome],Len([cercaNome])),[cercaNome]))>0));


Nessuno che sappia come farcela con LIKE ?
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Axiom Space e Prada mostrano lo strato i...
Uno dei satelliti Rassvet-3 di Bureau 14...
Con il razzo spaziale Lunga Marcia 9, la...
Cavi sottomarini come sensori: la Finlan...
Exodus è il nuovo Mass Effect? Il...
Lockdown Mode cambia il volto di ChatGPT...
Guild Wars 3 è ufficiale: ArenaNe...
I giocatori voltano le spalle a Linux? L...
Instagram Plus arriva in Italia: cosa in...
XBOX: la nuova CEO non ha ancora le idee...
Intel non ha intenzione di abbandonare i...
La AI Mode sarà attiva di default...
Marvel's Wolverine non sarà un op...
Star Wars Zero Company esce ad agosto: n...
Bonus Decoder: fino al 70% di sconto con...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:13.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v