Newsgroup: it.comp.lang.visual-basic
Titolo: come diavolo di passano i parametri

Sto impazzendo per realizzare delle query parametriche in access, alle quali
accedere da VB.
Non riesco assolutamente ad uscirne...
La connessione funziona (ODBC). Poi ho provato a creare un oggetto command
ed appendere il parametro che voglio passare alla query. Quando però la
eseguo saltano fuori sempre errori incomprensibili (errore nel from della
query, errore nel numero di parametri, ecc).
La query è fatta come query parametrica (da access funziona perfettamente).
inoltre, dalle proprietà, ho impostato il parametro che uso per il filtro.
Mi aiutereste a capire come devo fare?
La mia esigenza è di avere delle query con parametri su tanti campi. Poi da
vb, quando le chiamo, specifico i filtri che voglio usare per quella
ricerca, e questa viene eseguita ignorando gli altri (ho visto che da access
funziona mettendo il filtro nel campo che voglio filtrare, e mettendo in
alternativa che il filtro stesso sia nullo).
Finora facevo "manualmente" le concatenazione di where, controllando per
ogni campo se era richiesto il filtro oppure no. Ovviamente è un lavoro
folle, ed assolutamente ingestibile per eventuali modifiche...
VB è nella versione 6.
Grazie!!
oly...@spm.it

Per passare un parametro alle query di Access, prova cosě:
dim qry as querydef
dim dbase as database
det dbase=opendatabase"nome_db.mdb")
set qry=dbase.openquerydefs("Nome_Query")
qry.parameters("campo")="parametro"
aaa=qry.executesql
dove campo č il campo su cui agisce il filtro e parametro č il parametro vero e proprio
Dovrebbe andare, anche se l'ho scritto di pugno.
Ciao,
Moreno
#sirri#@
tin.it
(togliete "#" dall'indirizzo)

appena torno a casa lo provo, perň cosě a occhio č fatto con dao, no? o cmq
entri nel db direttamente...
io ho bisogno di entrare con ado, e soprattutto, di aprire una connessione a
una fonte dati odbc per leggere il db...
o sbaglio impostazione?
ciao e grazie

La connessione funziona (ODBC)........................

difficoltà di operare modifiche seguendo tale procedimeno.
in parte me lo sono risolto crando un modulo di classe al quale passare le
coppie campo/parametro e la select di base e facendo fare a lui la
costruzione della query con le clausole necessarie...
però non è troppo potente...
voi come fate?
ciao ciao
oly...@spm.it

o sbaglio impostazione?
Questo è un esempio di Query parametrica in ADO. Io per i database Access
uso l'OLE-DB provider nativo per Jet, ma comunque anche usando quello per
ODBC non cambia niente, basta che cerchi la stringa di connessione giusta
nell'help in linea.
'Dichiarazione variabili
Dim cnAdo As ADODB.Connection
Dim cmdTemp As ADODB.Command
Dim prmTemp As ADODB.Parameter
Dim rsTemp As ADODB.Recordset
'Apertura della connessione al Database MDB
Set cnAdo = New ADODB.Connection
'Tutto quello che segue...
cnAdo.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security
Info=False;Data Source=IlTuoDatabase.mdb;Jet OLEDB:Database
Password=LaTuaPasswordEventuale"
'...è un'unica istruzione
cnAdo.CursorLocation = adUseServer
cnAdo.Open
'Definizione della Query parametrica (Command)
'e passaggio dei parametri
Set cmdTemp = New ADODB.Command
cmdTemp.ActiveConnection = cnAdo
cmdTemp.CommandText = "IlNomeDellaTuaQueryNelDatabase"
cmdTemp.CommandType = adCmdTable
'In ADO le query precompilate di Access sono viste come tabelle
'la prima volta per capirlo ci ho messo una vita!! :-)
Set prmTemp = New ADODB.Parameter
prmTemp.Name = "IlNomeDelParametroNellaQuery"
prmTemp.Type = adVarChar
'Bisogna dirgli il tipo di parametro
prmTemp.Size = 50
'Se è una stringa bisogna dirgli anche
'la lunghezza massima che può avere il parametro
prmTemp.Value = "IlValoreCheVuoiPassare"
'In questo caso è una stringa perchè
'è stato definito prima con adVarChar
cmdTemp.Parameters.Append prmTemp
'Apertura del recordset utilizzando la Query di cui sopra
Set rsTemp = New ADODB.Recordset
rsTemp.CursorLocation = adUseClient
rsTemp.Open cmdTemp, , adOpenStatic, adLockReadOnly
'Ovviamente le opzioni del Recordset te le metti a posto come vuoi
In questo modo dovrebbe essere tutto OK.
Ciao,
   <--< Nik >-->
Per rispondermi in E-Mail togliere "deleteme" dall'indirizzo.
To reply me by E-Mail remove "deleteme" from my address.

nell'help in linea.
quale garantisce le prestazioni migliori?
ciao e grazie

quale garantisce le prestazioni migliori?
Beh, usando il provider per ODBC si aggiunge un ulteriore filtro tra il
programma ed il database e quindi le prestazioni dovrebbero essere un poco
inferiori.
Ho notato perņ che in alcune condizioni il comportamento non č il medesimo e
ODBC funziona esattamente come mi sarei aspettato, il provider per Jet no.
