Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
La nuova Insta360 X6 introduce sensori Sony da 1/1.1" e un SoC Triple AI a 4nm. Analizziamo le riprese 8K, il primo Dolby Vision nativo a 10-bit nel settore sferico e l'innovativo flusso di lavoro diretto sulla futura versione 22 di DaVinci Resolve.
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Dopo due settimane trascorse al volante della Dacia Spring 2026 possiamo raccontarvi tutto, dalle novità di motore e batteria, fino ai consumi in tutti le situazioni, compresa l'autonomia reale ad alta velocità
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


Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
AORUS GeForce RTX 5080 INFINITY WOOD 16G: una scheda video diversa dalle altre AORUS GeForce RTX 5080 INFINITY WOOD 16G: una sc...
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
LG e NVIDIA, robot umanoide bipede in ar...
Samsung prepara cuffie over-ear Galaxy p...
Le Fire TV Stick tornano in sconto e si ...
Il nuovo iPhone Ultra si farà attendere:...
POCO F9 Pro e F9 Ultra in arrivo in Euro...
Anthropic spiega come funziona il waterm...
Lutnick dice no alle memorie cinesi, ma ...
AGCOM ha introdotto un nuovo modo per id...
Oltre 2.000 robotaxi Pony.ai in Europa, ...
Continua la guerra silenziosa nello Spaz...
Blue Origin: inizia la costruzione del s...
Per Isaacman è stato giusto cance...
iPhone 18, un report conferma l'incremen...
Sonos ha in programma il lancio delle Ac...
Debutta Grok Bot, l'IA agentica diventa ...
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: 07:42.


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