Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Access e query con parametro da vb
domenica 21 settembre 2008 - 16.37
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
dom 21 set 2008 - 16:37
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
5.625
messaggi | Data Invio:
dom 21 set 2008 - 17:04
>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
375
messaggi | Data Invio:
mer 24 set 2008 - 13:30
768_Prova.zip
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.
Torna su
Stanze Forum
Elenco Threads
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 !