Access e query con parametro da vb

domenica 21 settembre 2008 - 16.37

volperubbia Profilo | Senior Member

Ciao a tutti,
sono abituato a usare SQL Server, dove ci sono le stored procedures ... mi chiedevo se su Microsoft Access ci sia la possibilità di ottenere qualcosa di simile.
Ad esempio, mi sono salvato su mdb alcune query:
- una query di selezione: SELECT * FROM Utenti WHERE IDUtente=[@IDUtente];
- una query di aggiornamento: UPDATE Utenti SET DataLogin = [@DataLogin] WHERE IDUtente=[@IDUtente];
- una query di cancellazione: DELETE * FROM Utenti WHERE IDUtente=[@IDUtente];

Potevo anche crearmi una stringa sql da vb e eseguirla. Ma vorrei richiamare le query con parametro, passargli i parametri ed eseguirle.
E' possibile fare una cosa del genere in Access? Se sì, con quale sintassi?
Per aggiornare un campo data, con quale formato deve essere passato il parametro?

Grazie per l'attenzione,
Davide

lbenaglia Profilo | Guru

>E' possibile fare una cosa del genere in Access? Se sì, con quale
>sintassi?

Ciao Davide,

Si, è possibile definendo delle query parametriche.
http://www.dotnethell.it/forum/messages.aspx?ThreadID=13913

>Per aggiornare un campo data, con quale formato deve essere passato
>il parametro?
Il parametro nella query deve essere DATETIME e lato client OleDbType.Date.

>Grazie per l'attenzione,
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

volperubbia Profilo | Senior Member

Ciao Lorenzo, grazie.
Ho fatto un po' di prove, ma probabilmente mi manca un passaggio ... non ottenngo errori, ma neanche l'aggiornamento sul campo della tabella che vorrei. Ecco quanto ho fatto ...

Sul mio mdb ho creato una query di aggiornamento "uspUpdUserLoginDate":
UPDATE Utenti SET DataLogin = [@DataLogin] WHERE IDUtente=[@IDUtente] ;

Se la lancio da Access, funziona e quindi la sua sintassi è corretta.
Da vb procedo invece così:

Dim strDatabase As String = "......\Prova.mdb"
Dim strConnection As String = String.Empty
strConnection &= "Provider=Microsoft.Jet.OLEDB.4.0;"
strConnection &= "Data Source=" & strDatabase & ";"c
strConnection &= "Persist Security Info=False;"
Dim objCon As New System.Data.OleDb.OleDbConnection(strConnection)
Dim objCmd As New System.Data.OleDb.OleDbCommand("uspUpdUserLoginDate", objCon)
objCmd.CommandType = CommandType.StoredProcedure
objCmd.Parameters.AddWithValue("@IDUtente", 1)
objCmd.Parameters.AddWithValue("@DataLogin", Now)
objCmd.Connection.Open()
objCmd.ExecuteNonQuery()
objCmd.Connection.Close()

Eseguendo questo codice, fila tutto liscio, non da errori, apre e chiude la connessione, ma l'ExecuteNonQuery non produce effetti sul db.
Cosa può essere? E' sbagliata la definizione di objCmd o gli manca qualche impostazione?
Grazie, Davide



Ciao Lorenzo, ti aggiorno ...
Su un forum mi hanno detto che dipendere dall'ordine in cui vengono aggiunti i parametri al comando.

>Da MSDN:
>When using parameters with an OleDbCommand or OdbcCommand, the order of the parameters added to the Parameters collection must match the order of the parameters defined in your stored >procedure. The .NET Framework Data Provider for OLE DB and .NET Framework Data Provider for ODBC treat parameters in a stored procedure as placeholders and applies parameter values in order. In >addition, return value parameters must be the first parameters added to the Parameters collection.

Mi sembra molto strano, comunque ho provato, effettivamente quando inverto lordine dei parametri, mi genera un errore o meno,
perciò l'ordine in qualche modo c'entra, ma ahimè non mi fa l'update della tabella, l'ExecuteNonQuery mi torna sempre zero.

Ho scoperto anche che, nel caso la query parametrizzata abbia un solo parametro, tutto funziona alla meraviglia. Quanta pazienza ...
Quindi mi resta da capire cosa sbaglio nella dichiarazione dei parametri ... in testa alla mia query ho aggiunto infatti
PARAMETERS [@IDUtente] Long, [@DataLogin] DateTime ;

Davide



Risolto. Con due o più parametri occorre:
- specificare il tipo di ogni parametro
- porre attenzione all'ordine in cui sono aggiunti all'OleDbCommand.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5