[VB .NET] Problema update query su db access

mercoledì 28 novembre 2012 - 15.11
Tag Elenco Tags  VB.NET

rothia Profilo | Newbie

buon giorno, da un paio di giorni ho un problema con l'update su un database access.
ho creato una classe che come costruttore si connette al database e ha come metodi
- add
- find
- update

per le prime due non ho problemi e funzionano, mentre per l'ultima mi da la seguente eccezione:

Impossibile convertire l'argomento 'Prompt' nel tipo 'String'.

Qui posto il codice con il costruttore della classe
Public Class Interazione_db Dim objconn As OleDbConnection Dim stringaconn As String Dim stringasql As String Dim objcomm As OleDbCommand Sub New() stringaconn = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" stringaconn = stringaconn & Application.StartupPath & "\db.mdb" objconn = New OleDbConnection(stringaconn) Try objconn.Open() Catch ex As Exception End Try End Sub

Mentre questo è il metodo update che nn funziona. da problemi sul metodo executeNonQuery
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Se provo la query con gli stessi valori su access funziona e l'update lo fa giusto!
Grazie in anticipo!

algraps Profilo | Junior Member

Ciao,
>

>Mentre questo è il metodo update che nn funziona. da problemi
>sul metodo executeNonQuery
>Sub update(ByVal data As DateTime, ByVal Cassa As Double, ByVal
>userid As String)
> Dim stringasql As String
>stringasql = "UPDATE Account SET cassa=" & Cassa.ToString & "
>WHERE data='" & data.ToShortDateString & "' AND user_id=" & userid.ToString
> Dim risputente As Integer
>
> Try
>objcomm = New OleDbCommand(stringasql.ToString, objconn)
> risputente = objcomm.ExecuteNonQuery()
>
> Catch es As Exception
> MsgBox(es)
> End Try
> End Sub
>
Sembra un problema di conversione di qualche valore: quello che puo' dare problemi e' la data non valida oppure hai qualche valore sporco nelle variabili Cassa o idUser. Hai eseguito la query nel ricreandola da access oppure hai preso quello che generava la il codice (quella dentro stringasql) e hai eseguito questa dentro access? Ricordati che access molte volte riesce a correggere errori che il codice non riesce...

>Se provo la query con gli stessi valori su access funziona e
>l'update lo fa giusto!
>Grazie in anticipo!
Di nulla. speriamo di riuscire a risolverlo..
Fammi sapere.
Grazie a te.
A.G.
http://nothingnessit.wordpress.com/

rothia Profilo | Newbie

Allora la query l'ho scritta io a mano e per risolvere la data ho impostato che sia string anche perché non devo fare nessuna operazione con essa, in teoria potrebbe esser considerata anche come chiave primaria... nel db di access cassa è numerico come user_id e anche nel scrivere la query (l'ho fatto sempre tramite sql) ho sostituito i parametri da variabili a nomi... quindi nn saprei.. cosa posso fare?

algraps Profilo | Junior Member

>Allora la query l'ho scritta io a mano e per risolvere la data
>ho impostato che sia string anche perché non devo fare nessuna
>operazione con essa, in teoria potrebbe esser considerata anche
>come chiave primaria... nel db di access cassa è numerico come
>user_id e anche nel scrivere la query (l'ho fatto sempre tramite
>sql) ho sostituito i parametri da variabili a nomi... quindi
>nn saprei.. cosa posso fare?

Prova a prendere la query che ti ha creato il codice e lanciarla in access senza modificarla... oppure prova a postare il constenuto della variable stringa che contiene la quey...


A.G.
http://nothingnessit.wordpress.com/

rothia Profilo | Newbie


917x357 36Kb


questa con il debug è la stringa che mi si crea... che è la stessa che uso in access

algraps Profilo | Junior Member

Grazie per la query. Ho trovato questo post che parla proprio del tuo problema:
http://stackoverflow.com/questions/8526494/access-sql-date-format

prova a inviare la query con la data scritta non tra apici '

Oppure se vuoi prova ad allegare il codice cosi possiamo debuggurlo e provarlo...


Ciao
A.G.
http://nothingnessit.wordpress.com/

rothia Profilo | Newbie

allora senza apici nn funziona comunque....anche perché è una stringa la data e non un Date

ora posto il codice:

questa è la classe calcolatore:

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

e viene richiamata da:

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

se serve qualche chiarimento sono qui

dimenticavo il db ha:
id--> contatore
cassa-->numerico
data-->string
user_id--> numerico

algraps Profilo | Junior Member

ciao
ho provato a fare un piccolo esempio che ti allego. prova a vedere se cosi funziona. Devi cambiare la path del db. Dimmi se la tabella creata nel db e' simile alla tua. Io ho provato ad eseguirla e non ho avuto problemi.

Fammi sapere
A.G.
http://nothingnessit.wordpress.com/

rothia Profilo | Newbie

Ho risolto togliendo al costruttore il comando
objconn.Open()

e aprendolo e chiudendolo ad ogni metodo della classe

quindi risolto facendo:

Dim stringasql As String
stringasql = "UPDATE Account SET cassa=" & Cassa.ToString & " WHERE data='" & data.ToShortDateString & "' AND user_id=" & userid.ToString
Dim risputente As Integer

Try
objconn.Open()
objcomm = New OleDbCommand(stringasql.ToString, objconn)
risputente = objcomm.ExecuteNonQuery()

Catch es As Exception
MsgBox(es)
End Try
objconn.Close()


chissà perché mi ha fatto questo scherzo?? negli altri metodi da me implementati anche senza l'open andava...

algraps Profilo | Junior Member

Dovresti creare un singleton per la connessione. in questo modo hai sempre un'unica connessione attiva. e non ne apre diverse.

Magari e' solo andato in timeout la connessione... e quindi non funzionava piu'.
A.G.
http://nothingnessit.wordpress.com/

rothia Profilo | Newbie

cioè? scusa ma nn sono tanto pratico di vb

algraps Profilo | Junior Member

Ciao,
eccoti un esempio:

http://vbnotebookfor.net/2007/09/13/introduction-to-the-singleton-pattern-in-vbnet/

Ciao e buonanotte...

A.G.
http://nothingnessit.wordpress.com/
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5