Newsgroup: it.comp.lang.visual-basic
Titolo: aggiornamento database con dataset

Recentemente ho provato ad aggiornare un database sfruttando il dataset ma
riesco solo ad aggiornare il dataset senza database....sapreste dirmi il
problema?
Il codice è il seguente:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim da As New OleDbDataAdapter
Dim cmd As New OleDbCommand("select * from Inserimento", cn)
Dim cmd2 As New OleDbCommand("insert into Inserimento (codice,fase
lavorazione,elemento1,elemento2,elemento3)values (@codice,@fase
lavorazione,@elemento1,@elemento2,@elemento3)", cn)
cn.Open()
da.SelectCommand = cmd
Dim ds As New DataSet
da.Fill(ds, "Inserimento")
cn.Close()
Dim myDataRow As DataRow
myDataRow = ds.Tables("Inserimento").NewRow()
myDataRow("codice") = Testo_codice_finale.Text
myDataRow("fase lavorazione") = Comb_fasi_lavorazione.Text
myDataRow("elemento1") = ComboBox1.Text
myDataRow("elemento2") = ComboBox2.Text
myDataRow("elemento3") = ComboBox3.Text
ds.Tables("Inserimento").Rows.Add(myDataRow)
Dim da1 As New OleDbDataAdapter
'Dim cmdBuild As New OleDbCommandBuilder(da1)
'da1.UpdateCommand = cmdBuild.GetUpdateCommand()
da1.InsertCommand = cmd2
'da1.InsertCommand.Parameters.Add("@codice", OleDbType.VarChar, 40,
"codice")
'da1.InsertCommand.Parameters.Add("@fase lavorazione", OleDbType.VarChar,
15, "fase lavorazione")
'da1.InsertCommand.Parameters.Add("@elemento1", OleDbType.VarChar, 24,
"elemento1")
'da1.InsertCommand.Parameters.Add("@elemento2", OleDbType.VarChar, 24,
"elemento2")
'da1.InsertCommand.Parameters.Add("@elemento3", OleDbType.VarChar, 24,
"elemento3")
da1.Update(ds, "Inserimento")
ds.AcceptChanges()
DataGrid1.DataSource = ds
End Sub


[snipped]
Facciamo le cose con ordine:
prima la connessione
Dim cnn as new OleDbConnection("Connectionstring") 
Poi il select command a cui assegnamo anche la connessione
Dim cmd as new OleDbCommand("select * from mytabe",cnn)
il dataadapter che inizializziamo con il select command
dim da as New OleDbDataAdapter(cmd)
generiamo tutti i comandi
dim cmb as new OleDbCommandBuilder(da)
(in alternativa a questo punto devi inserirti tutti i comandi
manualmente, insertcommand, updatecommand, deletecommand con i
relativi insertcommand.connection = cnn ecc e i parametri di ciascun
command, la gestione "manuale" diventa inevitabile se la select ha un
join oppure hai una chiave non univoca)
un nuovo dataset
dim ds as new DataSet("prova")
Riempi il dataset
da.fill(ds)
dai in pasto il dataset al datagrid
inserisci nuove righe
fai l'update
=======================================================================
Se mi vuoi scrivere togli le maiuscole
Sveltolampo 
cteniza...@hotmail.com
=======================================================================

 >Il codice č il seguente:


 ha scritto nel messaggio
news:92e2n0l0hph1tm0i0...@4ax.com...


myDataRow("fase lavorazione") = Comb_fasi_lavorazione.Text
Il tuo commandbuilder secondo me è sbagliato.
la sequenza esatta è:
crei la connessione
crei il command per la select 
assegni la connessione al command
crei il dataadapter a cui assegni il command
crei il commandbuilder a cui gli passi il dataadapter
riempi il dataset
Inoltre hai sicuramente dei problemi di "mapping" per la situazione
che hai di un nome campo spezzato.
Il mio consiglio è di sostituire lo spazio con un carattere di
sottolineatura oppure toglire lo spazio
La prova che ho fatto e che funziona:
			Dim cn As New
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\access\dbprova.mdb")
			Dim cmd As New OleDbCommand("select codice,
faselavorazione, elemento1, elemento2, elemento3 from Inserimento",
cn)			
			Dim da As New OleDbDataAdapter(cmd)
			Dim cmdBuild As New OleDbCommandBuilder(da)
			'MessageBox.Show(da.InsertCommand.CommandText)
			Dim myDataRow As DataRow
			da.Fill(ds, "Inserimento")
			myDataRow = ds.Tables("Inserimento").NewRow()
			myDataRow("codice") = textbox1.Text
			myDataRow("faselavorazione") = textbox2.Text
			myDataRow("elemento1") = textbox1.Text + "1"
			myDataRow("elemento2") = textbox1.Text + "2"
			myDataRow("elemento3") = textbox1.Text + "3"
			ds.Tables("Inserimento").Rows.Add(myDataRow)	
			da.Update(ds, "Inserimento")
			'dataGrid1.DataSource = ds 
			'ds.AcceptChanges()
(ds l'ho assegnato al datagrid sulla load, la connessione non serve
aprirla e chiuderla ci pensa già il dataadapter da solo a farlo)


 ha scritto nel messaggio
news:6po4n010qbmajkl44...@4ax.com...


mi sembra superfluo e con il controls non riesco a farglielo fare.
Potresti fare dei combobox un array e posizionarli da programma sulla
maschera (è più facile di quello che credi)
Private combo() As ComboBox = {Nothing, Nothing, Nothing, Nothing}
Dim k As Integer
For k = 0 To 3
   combo(k) = New ComboBox()
Next
a questo punto puoi manipolare tutte le combo insieme in un ciclo
