Inserire record su access

mercoledì 02 gennaio 2008 - 23.06

cavarei Profilo | Newbie

Ho un problema banale che però ... non riesco a risolvere:
db access con una tabella (import) così strutturata:
Id - contatore, chiave primaria
file - testo
data_c - data

sto scrivendo un applicazione in visual basic 2005 e quando provo a inserire una riga con questa istruzione:
.....
comm.CommandText = "INSERT into import (file, data_c) values (appo, dt_forn)"
nrec = comm.ExecuteNonQuery()
.....

viene generato un errore di mancanza parametro necessario.
Penso il problema sia legato al campo Id autoincrementante, ho provato a scrivere il comando in vari modi e il + corretto mi pare questo .... ma non funziona.

Grazie se potete darmi un suggerimento

Franco

alx_81 Profilo | Guru

>Ho un problema banale che però ... non riesco a risolvere:
>db access con una tabella (import) così strutturata:
>Id - contatore, chiave primaria
>file - testo
>data_c - data
>
>sto scrivendo un applicazione in visual basic 2005 e quando provo
>a inserire una riga con questa istruzione:
>.....
>comm.CommandText = "INSERT into import (file, data_c) values
>(appo, dt_forn)"
>nrec = comm.ExecuteNonQuery()
>.....
>
>viene generato un errore di mancanza parametro necessario.
>Penso il problema sia legato al campo Id autoincrementante, ho
>provato a scrivere il comando in vari modi e il + corretto mi
>pare questo .... ma non funziona.
Ciao!
Il comando è errato, perchè quella istruzione SQL non ha definito alcun parametro da inserire nella tabella, inoltre tu non dichiari i parametri da passare all'istruzione. Per capirci, appo e dt_forn cosa sono? Scritti così non sono parametri e quindi l'istruzione non è valida.
Se c'è un campo autoincrementante, non indicandolo non hai alcun problema, fa tutto da solo .

Segui questi passi:
- Crea il comando con i parametri (metodo delle "query parametriche")
- Popola la collezione dei parametri del tuo command
- Esegui con l'ExecuteNonQuery (se vuoi fai try catch per "trappare" l'eventuale eccezione

Esempio:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


>
>Grazie se potete darmi un suggerimento
di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

totti240282 Profilo | Guru

ma access non supporta i parametri dichiarati per nome sicuro ??.
C'è solo un capitano !!!!!!

cavarei Profilo | Newbie

appo e dt_forn sono due variabili locali che contengono il dato da salvare, apparentemente provando con il generatore di query di vb 2005 funziona, però inserite nel form come dicevo non va...appena riesco provo come mi suggerisci tu.

Grazie a tutti dei suggerimenti.
Franco

cavarei Profilo | Newbie

Perfetto! ho provato così:

comm.Parameters.Add("@file", OleDb.OleDbType.VarChar, 50).Value = appo
comm.Parameters.Add("@dt_forn", OleDb.OleDbType.Date, 10).Value = Today
comm.CommandText = "INSERT into import (file, data_caricamento) values (@file, @dt_forn)"
nrec = comm.ExecuteNonQuery()

funziona tutto!
Grazie mille a tutti e buon 2008

Franco

alx_81 Profilo | Guru

>ma access non supporta i parametri dichiarati per nome sicuro??.
Funziona funziona.. il listato è stato provato

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

alx_81 Profilo | Guru

>Perfetto! ho provato così:
>
>comm.Parameters.Add("@file", OleDb.OleDbType.VarChar, 50).Value
>= appo
>comm.Parameters.Add("@dt_forn", OleDb.OleDbType.Date, 10).Value
>= Today
>comm.CommandText = "INSERT into import (file, data_caricamento)
>values (@file, @dt_forn)"
>nrec = comm.ExecuteNonQuery()
>
>funziona tutto!
>Grazie mille a tutti e buon 2008
Figurati! Se ritieni che il post ti sia stato di aiuto, accetta la risposta così chiudiamo il thread Grazie.

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

cavarei Profilo | Newbie

scusami Alx81, ma per ignoranza mia non capisco quando mi scrivi "ma access non supporta i parametri dichiarati per nome sicuro??. "
Hai mica tempo di scrivere due righe di spiegazione?

Ciao, grazie

alx_81 Profilo | Guru

>scusami Alx81, ma per ignoranza mia non capisco quando mi scrivi
>"ma access non supporta i parametri dichiarati per nome sicuro??.
>"
>Hai mica tempo di scrivere due righe di spiegazione?
Ciao, non ho dato io questa risposta quindi non ti posso garantire che sia quello che totti240282 intendesse dire. Però provo lo stesso a darti una definizione.
La frase sembra indicare il fatto che la query parametrica in access utilizza di solito la sintassi OLEDB, ovvero quella in cui i parametri sono segnati posizionalmente e con un carattere segnaposto, tipicamente il "?". Ad esempio, la tua query diventerebbe così:
INSERT INTO import (file, data_c) VALUES (?, ?)

Poi, quando assegni i parametri da codice devi considerare la posizione, ignorando il nome che utilizzi.
Questa è, diciamo, l'assegnazione "senza nomi dei parametri".

Quella che ti ho proposto (quella con @nomeparametro) è quella di cui totti240282 dubitava il funzionamento. Ed è quella "parametri dichiarati per nome".
Ma tu l'hai provata e funziona

>Ciao, grazie
di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

cavarei Profilo | Newbie

Grazie sei stato chiarissimo.
Saluti e ... buon anno 2008.
Franco
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5