Newsgroup: it.comp.lang.visual-basic
Titolo: VB.Net aggiornamento database

collegamendomi ad un database access, risco a leggere ma non ad
aggornare
usando OleDbCommand, ExecuteReader()
mi da errore (sono in locale su IIS 6)
"Per l'operazione e' necessaria una query aggiornabile" ????????
.. strina di connessione
ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
        ConnStr &= "Data Source="
        ConnStr &= Server.MapPath("database.mdb")
.... prova query
SQL = "INSERT INTO Tabella1 (Cognome,Nome) Values ('Prova', 'Test')"
Dim myOleDbComm As New OleDbCommand(SQL, myOleDbConn)
myOleDbComm.ExecuteNonQuery() 







 "Per l'operazione e' necessaria una query aggiornabile" ????????
Il file mdb o la cartella è in sola lettura, oppure non hai i diritti di
scrittura.
Ciao

collegamendomi ad un database access, risco a leggere ma non ad
aggornare
usando OleDbCommand, ExecuteReader()
mi da errore (sono in locale su IIS 6)
"Per l'operazione e' necessaria una query aggiornabile" ????????


 aggornare
mmm... credo di aver capito la domanda.
Ora però basta.
Ciao

> Ora però basta.
scusate .... si era inceppato, iil server !!!!
ho creato un nuovo db su Access 2003 , aggiunto qualche dato
e riprovo a fare la query di Inserimento
prova a riaprire con Access ed il db non e' in sola lettura
sempre stesso errore
Per l'operazione è necessaria una query aggiornabile.
Riga 80:         Dim myOleDbComm As New OleDbCommand(SQL, myOleDbConn)
Riga 81:         myOleDbComm.ExecuteNonQuery()     <<= qui genera l'errore
Riga 82:
Riga 83:         myOleDbConn.Close() 

 sempre stesso errore


Devi anche aprire e poi richiudere la connessione
devi forse anche specificare il tipo di query su myOleDbComm 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Zanna ha scritto:




Potrebbe anche essere che:
- la tabella non ha una chiave primaria
- il comando sql che si è costruito, contenendo dei join o dei group è una
query che non può operare aggiornamenti


> devi forse anche specificare il tipo di query su myOleDbComm
qui non ti seguo, su OleDbCommand c'e' la possibilita' di specificare
CommandType.Text , ma riguarda il caso di una StoredProcedure e
non e' il caso di Access
ciao 

 ciao
Se si tratta di una query presente su access oppure di una stored
procedure devi impostare proprio quello sul CommandType
CommandType.StoredProcedure
Se invece è il nome di una tabella devi mettere CommandType.TableDirect
altrimenti CommandType.Text


ho seguito le tue indicazioni e applicato TableDirect ....:
Tabella1 e' una Tabella di Access
Dim myOleDbConn As New OleDbConnection(ConnStr)
 SQL = "INSERT INTO Tabella1 (Cognome, Nome) Values ('Prova', 'Test')"
 Dim myOleDbComm As New OleDbCommand(SQL, myOleDbConn)
' redirigo su Tabella e imposto Tabella1 su cui devo scriviere
 myOleDbComm.CommandType = CommandType.TableDirect
 myOleDbComm.CommandText = "Tabella1"
If myOleDbConn.State = 0 Then
   myOleDbConn.Open()
End If
myOleDbComm.ExecuteNonQuery()
myOleDbConn.Close()
non  da errore , ma i dati non ci sono !!! (un vero tormento)
serve qualche altro controllo per forzare la scrittura ?
(come si fa con Commit per i RDBMS in Win32)

Maurizio ha scritto:









Con quel comando lě devi scrivere:
myOleDbComm.CommandText = SQL 'Altrimenti che c...o serve?
myOleDbComm.CommandType = CommandType.Text
myOleDbComm.Connection = myOleDbConn
If myOleDbConn.State <> ConnectionState.Open Then myOleDbConn.Open
myOleDbComm.ExecuteNonQuery()


> myOleDbComm.ExecuteNonQuery()
ma con myOleDbComm.CammandText=SQL
da' errore .... necessaria una Query Aggiornabile
forse la prima soluzione che hai proposto
myOleDbComm.CommandType = CommandType.TableDirect
era corretta , solo che aggiorna il database in memoria e non la
sorgente dati, almeno mi pare sia cosi' anche se in questo esempio
hanno usato una strada diversa.
Dim myDataSetChanges As New DataSet()
' Gets all changes.
myDataSetChanges = myCustomerDataSet.GetChanges()
' Get records that have been modified only.
myDataSetChanges = myCustomerDataSet.GetChanges(DataRowState.Modified)
' Get records that have been deleted only.
myDataSetChanges = myCustomerDataSet.GetChanges(DataRowState.Deleted)
' Get records that have been added only.
myDataSetChanges = myCustomerDataSet.GetChanges(DataRowState.Inserted)
' Update changes back to actual database.
myDataAdapter.Update(myDataSetChanges)
scusa la mia ignoranza in merito , ma programmo in Delphi su Db Firebird e
ADO.Net ancora non lo conosco.
ciao

 ADO.Net ancora non lo conosco.
Scusa ma cosa stai facendo? il gioco delle tre carte? prima mostri un
comando "diretto" con oledbcommand poi quando ti fa comodo tiri fuori il
datataset / dataadapter.
Fatti un pò di idee chiare delle due l'una: o era falso il comando "insert
into" che avevi fatto vedere oppure quando chiedi una cosa devi spiegare
la tua situazione fino in fondo.
Adesso mi hai fatto passare la voglia di darti retta: arrangiati!.



nessuno ti ha puntato un'arma alla tempia !
hai prima scritto questo
Se invece è il nome di una tabella devi mettere CommandType.TableDirect
poi hai cambiato
myOleDbComm.CommandText = SQL 'Altrimenti che c...o serve?
myOleDbComm.CommandType = CommandType.Text
Insert Into e' reale , ma non va , neppure con quanto hai scritto;
quindi e' ovvio che cerchi strade diverse. 

 quindi e' ovvio che cerchi strade diverse.
Allora hai commesso qualche altro errore nella configurazione, nella
sintassi nell'apertura perchè il seguente funziona se hai impostato tutti
i parametri giusti:
Dim myCn As New OleDbConnection 
myCn.ConnectionString = ....
Dim myCm As New OleDbCommand("INSERT INTO ...",myCn)
myCn.Open()
myCm.ExecuteNonQuery
myCn.Close()



Ma vuoi dar retta a un cretino o no?
Non hai i diritti di scrittura sul file/cartella, il che non si limita al
flag di readonly dell'mdb!
L'itente di IIS deve avere i permessi i modificare il file, e poi
probabilmente devi anche creare una condivisione web della cartella (su
questa seconda cosa non so darti maggiori info perchè nemmeno io ci capisco
molto).
Ciao
--
Reporting tool: 
http://www.neodatatype.net

> molto).
per IIS , che ssara' come dici tu
ma sul server Web reale , i diritti read e write sulla cartella del dominio
ci sono.
comincio a pensare che il problema sia piu' a monte (installazione/rimozione
di varie rel).
ho fatto una prova installando MSDE , ma non riesco ad accedere con nessuno
strumento di 
amm.ne
 (nonostante i servizio MsSqlServer sia attivo).
e tempo fa prima delle varie prove con Visual Studio MSDE andava.
mi sa che la soluzione sara' riformattare e reinstallare.
grazie della disponibilita'.
ciao Maurizio