Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET] merge di due dataset

Ciao,
nel mio database ho una tabella "scarico" e una tabella "scaricoTemp".
Nella tabella "scaricoTemp" ho alcuni record che voglio, in una procedura,
aggiungere alla tabella "scarico". Le due tabelle hanno colonne e tipi di
valori identici.
Allora ho progettato quanto segue:
        Dim dsdata2 As New DataSet()
        Dim dsdata3 As New DataSet()
        Dim strSQL = "SELECT * FROM tblScaricoTemp"
        Dim strSQL2 = "SELECT * FROM tblScarico"
        Dim dataAdapter1 As New OleDbDataAdapter(strSQL, objConnection)
        Dim dataAdapter2 As New OleDbDataAdapter(strSQL2, objConnection)
        dataAdapter1.Fill(dsdata2, "tblScarico")
        dataAdapter2.Fill(dsdata3, "tblScarico")
        Dim custCB As OleDbCommandBuilder = New
OleDbCommandBuilder(dataAdapter2)
        dsdata3.Merge(dsdata2, False)
        dataAdapter2.Update(dsdata3, "tblScarico")
        DataGrid2.DataSource = dsdata3.Tables("tblScarico")
Nel datagrid2 vedo il merge che è riuscito perfettamente, però non viene
fatto l'upload nel database! Forse non basta la riga:
Dim custCB As OleDbCommandBuilder = New OleDbCommandBuilder(dataAdapter2)
per la generazione automatica delle stringhe? Devo per forza farle a mano?
Grazie in anticipo.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 per la generazione automatica delle stringhe? Devo per forza farle a mano?
Il sorgente del datagrid è un dataset mappato da una tabella,
presumo che l'update viene eseguita solo per i dati apparteneti a quella
tabella.
Il codice dovrebbe proseguire:
dataAdapter2.updatecommand=custCB.getupdatecommand
dataAdapter2.continueupdateonerror=false o true
dataAdapter2.update(dsdata3)
la modifica avviene per i dati di dsdata3,
se provi a modificare i dati forniti da dsdata2,
dovresti ricevere un errore.
Ave
giuseppeD
---
CCR


L'upload funziona solo per (ovviamente) le righe *non* marcate come
Unchanged.
Non ho mai controllato cosa viene fuori dal merge, ma probabilmente ti copia
le righe dall'altra parte senza modificarne gli attributi.
Non ricordo se c'è un parametro per fare questo in automatico nel metodo
Merge e non sono sicuro che sia questo il problema, ma a occhio succede
questo: controlla lo stato delle righe aggiunte.
Ciao

 dovresti ricevere un errore.
Scusami ma non credo di aver capito molto bene, anche perché l'ultima
riga del tuo codice mi risulta errata (non hai specificato la tabella,
quindi va in errore). Il codice che proponi tu deve essere aggiunto?
Mi sembra la stessa cosa, più o meno, di quello che ho già scritto io!
C'è modo in sostanza di aggiungere i dati della tabella "scaricoTemp"
alla tabella "scarico" nel database?

 questo: controlla lo stato delle righe aggiunte.
In effetti la tua mi sembra un'analisi corretta, hai idea di come posso
fare per controllare lo stato delle righe? O come impostarle a "changed"
eventualmente.....
grazie infinite


 eventualmente.....
Per impostarle a Modified è sufficiente prendere un campo e riassegnargli lo
stesso valore, ma queste non vengono aggiunte: vengono modificate sul DB.
Per impostarle come Added non ne ho idea :) anche perchè dovresti riuscire a
individuare le linee che appartenevano all'altro DataSet, però forse
parliamo per niente perchè il problema è un altro.
Ciao

Ho risolto il problema senza utilizzare il merge, ma semplicemente
aggiornado il database con il dataadapter della tabella temporanea:
        Dim dsdata2 As New DataSet()
        Dim strSQL = "SELECT * FROM tblScaricoTemp"
        Dim strSQL2 = "SELECT * FROM tblScarico"
        Dim dataAdapter1 As New OleDbDataAdapter(strSQL, objConnection)
        Dim dataAdapter2 As New OleDbDataAdapter(strSQL2, objConnection)
        dataAdapter1.AcceptChangesDuringFill = False
        dataAdapter1.Fill(dsdata2, "tblScaricoTemp")
        Dim custCB As OleDbCommandBuilder = New
OleDbCommandBuilder(dataAdapter2)
        dataAdapter2.Update(dsdata2, "tblScaricoTemp")
grazie a tutti
