Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 31-01-2007, 14: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, 14: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, 14: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, 16: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 16:04.
akyra è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2007, 18: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, 01: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, 09: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


Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
HONOR MagicPad 4 porta OpenClaw su Andro...
Android Automotive diventa open source e...
Offerte Amazon di oggi: il meglio tra te...
Xbox Game Pass verso una rivoluzione: ab...
Nuovo DualSense dedicato a Marathon: des...
Lo smartphone XIAOMI 17 12/512GB con ott...
iPhone, iPad e Mac si aggiornano: le nov...
MOUSE: P.I. For Hire si prepara al debut...
Razer Viper V4 Pro: più leggero, ...
Windows 95 e l'anarchia degli installer:...
Gli smartphone sotto i 260€ in offerta s...
BAIC accelera sul futuro delle auto elet...
Wine 11 porta NTSYNC nel kernel mainline...
Huawei XMAGE Awards 2026: al via la deci...
Ayaneo non ce la fa: la crisi di RAM e S...
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: 13:13.


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