Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] LUNGO! Webform e collegamento dataset datadapter...non aggiorno il database! Ma perchè?

 Allora spiego il mio problema...che a leggere doc e libri sembra
facile...ma che nel caso concreto non mi va!
Framework 1.0 Vs2002
Webform....test sul pc in locale.....XPpro Sp1
Devo postarvi un po di codice per farvi vedere che IMHO non ho sbagliato
nessun passaggio.....
per non saper ne legger ne scrivere istanzio subito li oggetti subito per
paura di dimentticare una istanziazione
quindi
Inherits 
System.Web.UI.Page
Dim tCon As New OleDb.OleDbConnection()
Dim tAdap As New OleDb.OleDbDataAdapter()
Dim tCmd As New OleDb.OleDbCommand()
Dim tTabella As New DataTable()
Dim tDset As New DataSet()
Dim DRow() As DataRow
Dim DCol() As DataColumn
Dim StringaConnessione As String
Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
Protected WithEvents Grid1 As System.Web.UI.WebControls.DataGrid
nel pageLoad
EseguiAccessoDB()
BindGriglia()
bind griglia lo tralascio...non fa che formattarmi ed agganciare una griglia
Private Function EseguiAccessoDB() As Boolean
'esegue l'accesso al database remoto
Dim Tsql As String
'stringa di connessione
StringaConnessione = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &
Server.MapPath("mdb-database/galleria.mdb")
tCon.ConnectionString = StringaConnessione
tCon.Open()
'imposta sql
Tsql = " SELECT Gallerie.IDgalleria, Gallerie.NomeGalleria,
Gallerie.Descrizione, Gallerie.TitoloPagina, Gallerie.DescrizionePagina,
Gallerie.FooterPagina, Gallerie.DataCreazione, Gallerie.righe,
Gallerie.colonne, Gallerie.Nomesfondo, Gallerie.ColoreSfondo,
Gallerie.ColoreTesto, Gallerie.ColoreLink, Gallerie.ColoreLinkVisitato,
Gallerie.NomeFontTitolo, Gallerie.dimensioneFontTitolo,
Gallerie.NomeFontDescrizionePagina,
Gallerie.dimensioneFontDescrizionePagina, Gallerie.NomeFontFooter,
Gallerie.dimensioneFontFooter, Gallerie.dimXThumb, Gallerie.dimYThumb"
Tsql += " FROM(Gallerie)"
Tsql += " ORDER BY Gallerie.NomeGalleria"
'DataAdapter c'è bisogno di un comando
tCmd.CommandText = Trim(Tsql)
tCmd.Connection = tCon
tCmd.CommandType = CommandType.Text
'Usa il dataAdapter per riempire il dataset
tAdap.SelectCommand = tCmd
tAdap.MissingSchemaAction = MissingSchemaAction.AddWithKey
tDset.Clear()
tAdap.Fill(tDset, "Gallerie")
End Function
ho messo la query chilometrica per fugare anche il dubbio che SELECT * FROM
Gallerie incasinasse NET
il classico
' Edita una riga...fa apparire i textbox e basta!
Public Sub Edita(ByVal source As Object, _
ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) _
Handles Grid1.EditCommand
Grid1.EditItemIndex = e.Item.ItemIndex
Grid1.DataBind()
End Sub
e poi quello che non mi torna
Sub Aggiorna(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
' For bound columns, the edited value is stored in a TextBox.
' The TextBox is the 0th element in the column's cell.
Dim tNomeGalleria As TextBox = CType(e.Item.Cells(1).Controls(0), TextBox)
Dim tDescrizione As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox)
Dim tRighePerPagina As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)
Dim tColonnePerPagina As TextBox = CType(e.Item.Cells(4).Controls(0),
TextBox)
Dim IDgal As Long = CLng(e.Item.Cells(5).Text)
Dim NomeGalleria As String = tNomeGalleria.Text
Dim Descrizione As String = tDescrizione.Text
Dim ColonnePerPagina As Long = CLng(tColonnePerPagina.Text)
Dim RighePerPagina As Long = CLng(tRighePerPagina.Text)
Dim tSQL As String
tSQL = "IDgalleria=" & CStr(IDgal)
tTabella = tDset.Tables("Gallerie")
DRow = tTabella.Select(tSQL)
DRow(0).BeginEdit()
DRow(0)("NomeGalleria") = NomeGalleria
DRow(0).EndEdit()
'adesso si deve rimettere nell'mdb la modifica
Dim custCB As New OleDb.OleDbCommandBuilder(tAdap)
Dim temp As New OleDb.OleDbCommand()
Dim tempSQL As String
' Generazione automatica dei comandi SQL.
' I comandi vengono generati sulla base di quanto contenuto nella
SelectCommand
' che in questo caso deve essere obbligatoria.
' E' necessario specificare il DataAdapter di cui generare i comandi SQL
Dim cmdBuild As New OleDb.OleDbCommandBuilder(tAdap)
' Assegniamo i comandi generati al nostro DataAdapter
tAdap.UpdateCommand = cmdBuild.GetUpdateCommand()
tAdap.DeleteCommand = cmdBuild.GetDeleteCommand()
Me.TextBox1.Text = "AGGIORNA: " & tAdap.UpdateCommand.CommandText &
ControlChars.CrLf
Me.TextBox1.Text +=
"*********************************************************" &
ControlChars.CrLf
Me.TextBox1.Text +=
"*********************************************************" &
ControlChars.CrLf
Me.TextBox1.Text +=
"*********************************************************" &
ControlChars.CrLf
Me.TextBox1.Text += "CANCELLA: " & tAdap.DeleteCommand.CommandText
'ritorna alla visualizzazione
Grid1.EditItemIndex = -1
BindGriglia()
End Sub ' END MyDataGrid_Update
cosa mi succede...succede che carica la pagina...mostra....i dati...clicco
su edit e appiono i textbox
....modifico il nome galleria
clicco su "Update" che scatena la sub Aggiorna...che non aggiorna
o messo un textbox per vedere che cosa genera
che genera una schifezza del genere
"UPDATE Gallerie SET NomeGalleria = ? , Descrizione = ? , TitoloPagina = ? ,
DescrizionePagina = ? , FooterPagina = ? , DataCreazione = ? , righe = ? ,
colonne = ? , Nomesfondo = ? , ColoreSfondo = ? , ColoreTesto = ? ,
ColoreLink ........<cut perchè è lunghissima>
Quindi io capisco che c'è qualcosa che non va nel DataAdapter...ma cosa..???
La connessione mi par sempre viva .....e i manuali recitano che con quei
comandi costruisce da se la query di aggiornamento!
La tabella è singola....non ha integrità referenziali settate.......
e io non so che pesci prendere!.....
son riuscito a far tutto....a prendere una tabella metterla nel
dataset...agganciarla alla griglia....editare il dataset.....
solo che non riesco ad aggiornare la base dati!
SIGH!
ma si stava tanto bene con il vecchio ado!!!!
SOB!
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
Demo classe vb.NET : WodkaThumb
www.villaceleste.it
  click su "spippolando e Programmando"
---
Messaggio scannerizzato e certificato "Virus free" da AVG free edition.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.775 / Virus Database: 522 - Release Date: 08/10/2004

 End Sub ' END MyDataGrid_Update
cut
-- 
Il Wodkino Nazionale č a : 
www.martek.it


 -- 
Se vuoi un consiglio, non utilizzerei il CommandBuilder: genera codice SQL
"approssimativo" su cui non hai il pieno controllo. Inoltre non funziona con
stored procedure, ti fa risparmiare codice in fase di progettazione ma
risulta piů lento in esecuzione....  in piů non permette di specificare il
tipo di concorrenza ottimistica da utilizzare.
IMHO č meglio costruirsi un Command ex novo, impostandogli il CommandText,
la connection ecc. in modo da avere un controllo completo su come e cosa si
va a modificare.
Ciao
Zephiross

 non si incazza...ma non mi modifica nulla!
Controlla che
tDset.Tables("Gallerie").Rows(i).RowState <> Unchanged
L'Update riflette le modifiche sul DB in base a questa proprietà.
Se da nessuna parte tu hai fatto l'AcceptChanges() dovresti vedere le righe
modificate come Modified e così via per la aggiunte e/o cancellate.
Inoltre assicurati di avere l'AcceptChangesDuringFill per l'adapter, il che
corrisponde a un AccetpChanges() dopo la Fill(), altrimenti avresti tutti i
record Added
Inoltre credo che l'AcceptChanges sia fatto automaticamente dall'Update().
E se non hai necessità particolari i vari UpdateCommand sono creati
automaticamente dal SelectCommand, quindi non è necessario indicarli
esplicitamente.
Tieni presente che gli UpdateCommand costruiti con il CommandBuilder o
necessitano di una chiave univoca sul DB, altrimenti non sanno quali record
aggiornare.
Ciao

 ha scritto nel messaggio
news:2ucderF...@uni-berlin.de
fatto come mi hai detto....ora invece di andare tranquillo e non
aggiornare...mi compare l'errore
"necessaria una query aggiornabile"....che apre l'mdb in maniera esclusiva
quando aggiorna???
Che macello ...me sto a scoraggià!
-- 
Il Wodkino Nazionale è a : 
www.martek.it


 Che macello ...me sto a scoraggià!
ummm me sa che è il solito problema dei permessi di IUSR
po esse?


 po esse?
VABBE ORA VA.....
non è nemmeno IUSR....bisogna dare il controllo all'utente ASPNET
....... MAH!
grazie a tutti!
