Newsgroup: it.comp.lang.visual-basic
Titolo: [ADO] Query con parametri che non recupera dati

Ciao a tutti
sto cercando di realizzare un recordset con ADO basato su una query con
parametri... ma non ci riesco.
il codice che uso è il seguente :
    Dim conn        As ADODB.Connection
    Dim rs          As ADODB.Recordset
    Dim command1    As ADODB.Command
    Dim p1          As ADODB.Parameter
    'Creo la connessione
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
                "Data Source=" & App.Path & "\Test.mdb;"
    'Creo il command
    Set command1 = New ADODB.Command
    command1.CommandText = "PARAMETERS SelectSR String;" & _
                            "SELECT * From Rinnovi WHERE SRName LIKE
[SelectSR];"
    command1.CommandType = adCmdText
    'Creo il parametro
    Set p1 = command1.CreateParameter("SelectSR", adVarChar, adParamInput,
255)
    command1.Parameters.Append p1
    p1.Value = "'*'"
    'Eseguo la connessione
    command1.ActiveConnection = conn
    Set rs = command1.Execute
La query finale sarà più complessa ma ... visto che non mi riesce di far
funzionare neanche questa :-(
Utilizzando il visualizzatore delle espressioni di controllo, quando eseguo
l'ultima riga, il recordset viene generato
con tutti i campi estratti dalla query ma come record ... nada niente nix
Il codice, dopo essermi rotto la testa con codice mio (banale tra l'altro),
l'ho adattato dall'esempio di microsoft
ma proprio non va.
Grazie per l'aiuto.
--
----------------------------------------------------------------
Biasiutti Riccardo
rbias...@tin.it
ICQ : 26888458

     p1.Value = "'*'"
ADO (Standard SQL, credo 92) vuole "%" per indicare un numero qualsiasi di
caratteri qualsiasi, non "*"

     command1.ActiveConnection = conn
Non è da questo che dipende il tuo problema (credo effettivamente che il
problema sia nella sintassi del Like, come ha detto Lupo), ma questa riga
non è stilisticamente molto bella:
- Sfrutti una proprietà predefinita, senza esplicitarla, dell'oggetto
AdoDb.Connection (ossia la ConnectionString), riducendo la leggibilità del
codice. Se è questo che vuoi, sarebbe meglio command1.ActiveConnection =
conn.ConnectionString
- Apri una nuova connessione gemella, con spreco di risorse, e difficoltà,
in futuri ritocchi del software, a gestire transaction o conteggio delle
licenze se passi ad un DB server (tipo Sql-Server). Per evitare questo, ti
consiglio di usare SET command1.ActiveConnection = conn (che risolve anche
l'imperfezione che ti ho detto sopra).
Comunque si tratta di piccolezze, il mio è solo un consiglio.
Ciao
Alberto

 ha scritto nel messaggio
news:V5%c9.142902$n04.3...@twister2.libero.it...

Grazie per i suggerimenti ... provvedo


Ho modificato il codice in questo modo
    Dim conn        As ADODB.Connection
    Dim rs          As ADODB.Recordset
    Dim command1    As ADODB.Command
    Dim p1          As ADODB.Parameter
    'Creo la connessione
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
                "Data Source=" & App.Path & "\Test.mdb;"
    'Creo il command
    Set command1 = New ADODB.Command
    command1.CommandText = "PARAMETERS SelectSR String;" & _
                            "SELECT * From Rinnovi WHERE SRName LIKE
[SelectSR];"
    command1.CommandType = adCmdText
    'Creo il parametro
    Set p1 = command1.CreateParameter("SelectSR", adVarChar, adParamInput,
255)
    command1.Parameters.Append p1
    p1.Value = "'%'"
    'Eseguo la connessione
    Set command1.ActiveConnection = conn
    Set rs = command1.Execute
prendendo spunto anche dalle indicazioni di Albe V° per impostare la
proprietà Activeconnection.
utilizzando, per p1.Value, i valori
"'%'"  ... (doppi apici, apice, percento, apice, doppi apici)
e
"%" ... (doppi apice, percento, doppi apici)
il recordset rimane sempre vuoto ... certo i campi ci sono ma i dati ... boh


Se il problema è quello, ritengo che tu debba fare, molto semplicemente,
p1.Value = "%"
La sintassi della LIKE è chiara:
.... Where Campo Like 'abc%' ...