Newsgroup: it.comp.lang.visual-basic
Titolo: update con TableAdapterManager.UpdateAll .net

ciao, all'interno di un datatset ho 3 datatables A B C
A padre B e B padre di C
Selezionato un record di A, vorrei eliminare tutte le sue figlie in B
e quindi tutti i riferimenti in C delle righe in B
Tramite binding navigator, eliminando i record da B , avendo impostato
la relazione su dataset automaticamente vengono cancellate i record su
C
Se faccio l'update su db tramite Tableadapter della rispettiva
datatable non ho problemi, se utilizzo tableadapetermanager non
succede nulla sul db: i dati vengono lasciati intatti...perchè?
Grazie
di seguito codice
 If Me.TrattamentiBindingSource.Count > 0 Then
            Me.TrattamentiBindingSource.MoveFirst()
            For i = 0 To TrattamentiBindingSource.Count
                Me.TrattamentiBindingSource.RemoveCurrent()
                Me.TrattamentiBindingSource.MoveNext()
                i += 1
            Next
           ' SOLUZIOE FUNZIONANTE
            '  Me.TrattamentiTableAdapter.Update
(Schedario_paziente.trattamenti)
            '  Me.ProdottiTableAdapter.Update
(Schedario_paziente.prodotti)
           'SOLUZIONE NON FUNZIONANTE
            Me.TableAdapterManager.UpdateAll(Schedario_paziente)
        End If

 Grazie
per caso nel db sono definite delle regole di integrit� che stabiliscono
che per ogni record della tabella c deve esistere un corrispondente record
della tabella b?
-- 
Salutoni
Sergio
C'� il giorno in cui nasci e quello in cui scegli di vivere
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 --
Su db access non ho messo relazioni. Queste sono soltanto sul dataset.
In A la chiave è id......In B i record fanno riferimento ai record in
A tramite il campo parent_id e hanno a loro volta un id
datatable A
id- nome-etc
1-enrico-dsdfdfdf
2-giovanni-tyyt
datatable B
id- parent_id- altro
1-1-dcdcdc
2-1-dcdcdcc
datatable C
id- parent_id- altro
1-1-dcdcdc
2-1-dcdcdcc
relazione 1: fra datatbleA.id e datatableB.parent_id
relazione 2: fra datatbleB.id e datatableC.parent_id

 Su db access non ho messo relazioni. Queste sono soltanto sul dataset.
zac
SIGH!
spero che tu sia novizio
http://msdn.microsoft.com/it-it/library/bb384426.aspx
Benedetto e santo uomo!
Cosa fa un generico "adapter qualcosa"??? ma te lo sei mai chiesto?
e cosa è un dataset?
e la differenza fra una Table di un dataset e quella di un generico
motore db?
se sai dare una risposta a queste domande....
mi sai dire come fa un aggiornamento gerarchico(tale è quello che
gestisce un adaptermanager) a riflettersi su un database che NON HA
impostato una stracazzo di straccio di relazione????
Ai posteri l'ardua sentenza!!!
eh eh eh

 eh eh eh
http://msdn.microsoft.com/it-it/library/bb384432.aspx
tiè và!

 eh eh eh
Ti ringrazio moltissimo per la spiegazione, per contraccambiare potrei
offrirti una camomilla? mi sembri un pò su di giri.... :D
Una vaga idea dell'adapter tabelle etc la ho, ma visto la tua
spiegazione così chiara, sarei tentato di chiederti una spiegazione
completa di tutti gli elementi citati e di come agiscono in sinergia
fra loro.....
ciao ;)

 ciao ;)- Nascondi testo citato
ZAC
2 frasi
un table adapter aggiorna una tabella
un "teibol maneger" aggiorna in maniera ieratica...tradotoo in maniera
gerarchica!
...da qui in poi sarei tentato di dirti...naviga con le tue vele!
Anche perchè il link è chiarissimo!
A spanne
crea il dateset a partire dal db...non collegando tabelle così al
volo...in questo modo lo "tipizzi"
Se non lo sapessi un "aggiornamento gerarchico" è un aggiornamento che
stabilisce COSA aggiornare prima e COSA dopo.... se leggi il link c'è
pure l'esempio!
DOve va in tilt questo componente?
Dove non riesce a stabilire cosa fare prima e cosa dopo!...e mi sà che
è proprio il tuo caso!
Io mi prenderò la camomilla...ma tu prendi un po di fosforo ed un
caffè!
Almeno lo sforzo di cercare di capire il link potresti farlo!
Ma lo hai letto???
No è!
Troppo  facile farsi dare il codice....vabbe prendo la camomilal!
E vado a cena....
bye man!


wrote:
LUNGO LUNGO
e siccome can che abbaia non morde....
e siccome io credo nel NG come veicolo di conoscenza....
e siccome quando avevo bisogno io...GbC ed altri mi aiutarono...
e siccome potrebbe essere di aiuto per altri
Prendete access e fatevi tre tabelle
ANAGRAFICA:
IDREC Testo (chiave primaria)
Nome Cognome indirizzo tutti testo
AUTO:
IDrecord2 Testo(chiave primaria)
IDproprietario testo (stessa lunghezza di IDrec di anagrafica)
Modello testo
Targa testo
INTERVENTI:
IDrecord3 testo(chiave primaria)
IDauto testo (stessa lunghezza di IDrecord2 di auto)
Intervento
Data
Prezzo
Ora impostate le relazioni
Anagrafica IDrec  (uno a molti) -> Auto IDproprietario
Auto IDRecord2 (uno a molti) Interventi IDauto
Bene ...divertitevi ad inserire un po di dati...oppure passate
oltre...salvate il vostro mdb!
Nuovo progetto VB 2008/5 (meglio 2008 no? Tanto è gratis!)
Inserite una form nel progetto
Ora andate in "Origini dati" e fate una nuova connessione...collegate
il vostro database (è una procedura guidata...se avete problemi anche
qui...considerate di darvi al giardinaggio!)
vi chiedrà di salvare il database nella cartelal bin o lascirlo dove
è...fate come vi pare...io l'ho lasciato dove è...almeno non mi
cambia!
A questo punto genererà il dataset!
Bene osservate bene i 3 oggetti
Anagrafica
Auto
Interventi
MA
se esplodete ANAGRAFICA
troverete li dentro anche AUTO
e se esplodete AUTO
troverete anche INTERVENTI
il dataset ha capito in base alle relazioni le gerarchie! siamo al 70%
della fatica
Non so se sapete ma se cliccate in origine dati sulla casellina a
discesa della tabella...vi fà vedere cosa usare per mostrare i
dati...se una serie di textbox...o una griglia...o altro che avete
scelto!
Io ho preso un panel e c'ho schiaffato dentro i campi di anagrafica!
AZAMMMMMMMPAGLIONNNNN
che caz mi fa VS???
Niente panico...ha crewato un bel po di oggetti e classi per gestire
quello che non c'è più (i recordset) e un po di roba accessoria per
gestire le tabelle!
Tra queste cose c'è anche il tableadaptermanager
BON!
provate a lanciare l'applicazione
modificate un record e cliccate sul floppy...alias SALVA
vi salva i dati dal dataset al database!
fin qui...nulla di nuovo!
Ora cari miei
sempre in origini dati click su Auto DENTRO anagrafica...selezionate
datagridview (è il default non sarebbe necessario)
e ora...oplà..trasportate auto dentro la vostra form
vi crea una griglia CORRELATA al vostro record
non ci credete?
lanciate l'applicazione
click sulle frecce per andare avanti e indietro nell'anagrafica...e la
griglia delle auto sia ggiorna di conseguenza
e se adesso inserisco anche la tabelle interventi prendendola da
DENTRO Anagrafica -> auto ?
oplà mi mette la griglia relativa all'auto selezionata (mi chiederà di
fare una latro adapter...prendete nota del nome che gli date!)
Quindio ora ho la form completa
con le frecec in alto seleziona la persona
nella griglia sotto vedo le auto che ha....l'auto selezionata...nella
griglia più in basso mostra gliinterventi che ha avuto!
GANZO...direte...modifico la griglia auto...ne inserisco una
poi modifico la griglia interventi...ne inserisco 2 per quell'auto
click su salve e....
ppppppoooooofffffffff
sul dataset salva...ma sul db no!!!!!!!
ARRRRGGGGHHHHHH!!!!
Calma e gesso
prima di tutto
nell'evento click del tasto save aggiungete una cosa del tipo
    Private Sub AnagraficaBindingNavigatorSaveItem_Click(ByVal sender
As System.Object, ByVal e As System.EventArgs) Handles
AnagraficaBindingNavigatorSaveItem.Click
        Me.Validate()
        Me.AnagraficaBindingSource.EndEdit()
        Me.AutoBindingSource.EndEdit()
        Me.AutoBindingSource1.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.TestHieraDBDataSet)
    End Sub
Questo vi garantirà di fare il "commit" delle righe modificate del
dataset!
Ma non vi salverà ancora!!!
PERCHE'
perchè il tableadaptermanager non saprà quale adapter chiamare delle
due tabelle correlate!
Click su tableadaptermanager e guardate le proprietà
ne troverete una simile a questa (se non avete cambiato i nomi)
AnagraficaTableAdapter valorizzata a AnagraficaTableAdapetr
QUELLA SOTTO
AUTOTABLEADAPTER sarà vuota...e non sapra come aggiornare...quella
deve essere valorizzata all'adapter della tabella auto ossia
AutoTableAdapter
e gli interventi? 'Ndò stanno????!!!!!
eh eh eh
o più sotto...alla lettera I...oppure se vi và di seguire lòa logica
gerarchica...espandete AutoTableAdapter...dentro trovate
InterventiTableAdapter..vuoto...da valorizzare anche lui con l'adapter
corrispondente!
che guarda caso sarà InterventiTableAdapter
Salvate compilate divertitevi
Salva
Aggiunge
Cancella
...non fà la camomilla però!!!
p.s.
Logicamente il db di access CONSENTE l'aggiornamento a catena e
l'eliminazione a catena
per esperienza l'eliminazione a catena è da evitare come la peste
(almeno per il normale utente)in quanto le segretarie hanno brutti
vizi e ci vuole poco a buttare via una lista di 2 3 mila nomi!


considerate che è venerdì....
che ore sono....
e la camomilla che fa effetto....
Ci sono un sacco di "orrori" di "itagliano" e di battitura!
Siate buoni...guardate alla sostanza più che alla forma!
...notte...notte

 ha scritto nel messaggio 
news:6ff118d8-6b5f-4e0c...@j39g2000yqh.googlegroups.com...
Thanks per la spiegazione...sei sicuro che con il vb2005 questo componente 
esista?
Leggendo il tuo link c'� scritto: "TableAdapterManager � un nuovo componente 
di Visual Studio 2008 "....
La domanda che pongo �: perch� mettere le relazioni sul db? Se il db in 
questione viene usato soltanto con il mio programma, non mi basta avere le 
relazioni sul dataset?
A suo tempo avevo avuto numerosi problemi settando sia il db che il 
dataset....un esempio stupido � il seguente: mettiamo un campo contatore sul 
db, facciamo l'importazione guidata, proviamo ad aggiungere/ rimuovere 
alcuni record e vediamo come nasco un disallineamento fra dataset e db...in 
un forum avevo letto che per aggirare l'ostacolo veniva fatta una query su 
db per ricavare il valore della chiave.....
Ciao

 Ciao
Miao!
Buono studio....
bah! ed io che ho perso tempo anche a farti l'esempio....non imparo
mai!
Saluti!


integro solo con una cosa....
in un ottica moderna e secondo microsoft il dataset ha un grande
pregio
Lo puoi riempire con dati provenienti da molte parti
Ad esempio
potresti avere la tabella Auto e interventi...caricata dal database
e la cartella pezzi di ricambio prelevata da internet dal sito web del
produttore
e la tabella pezziInmagazzino proveniente...dal database del magazzino
centrale
Da dove li prendi non importa una volta nel dataset son tabelle e le
puoi correlare fra loro se serve!
E' ovvio che la correlazione è soltanto fittizia...non puoi pensare
che aggiornando una griglia...si aggiornino dati così diversi...a meno
di non istruire i vari adapter...o invocare le tue classi di
aggiornamento (ad esempio richiamando i webservice corretti per
aggiornare il magazzino centrale!
In questo caso i dati sono eterogenei...non risiedono nel medesimo
"posto" ha senso correlarli nel dataset e aggiornare i dati originari
"manualmente" ....se possibile!
ri-saluti!