Più tabelle collegate per una form

  • Creatore Discussione Creatore Discussione disa
  • Data di inizio Data di inizio

disa

Nuovo Utente
25 Gen 2011
4
0
0
Buongiorno a tutti.
Ho un problema che mi piacerebbe risolvere con qualche aiutino, visto che ho speso troppe ore per venirne fuori da solo.

Situazione dell'applicativo:
- Applicativo per raccolta ed analisi dati in VB.NET 2008 e DB MS SQL
- Già alcuni Forms perfettamente funzionanti per alcuni articoli. Ogni form ha la sua tabella
- La stessa architettura dei form funzionanti è stata utilizzata per una nuova serie di articoli. Il problema è che per varie esigenze di successivi trattamenti dei dati si è utilizzato 1 tabella per articolo e su questo si dovrà continuare.

Nell'ultima situazione i campi della tabella superano gli 800 (il limite di SQL è 1024), quindi pensavo di non avere problemi. Tranquilli nel form non ci sono 800 textbox, ma circa un terzo. I campi rimanenti servono per altre cose memorizzate automaticamente. Quando sembrava tutto finito mi sono accorto che il Me.TableAdapterManager.UpdateAll(Me.DsPSCollaudi) funzionava correttamente per l'inserimento mentre per l'update non succedeva nulla.
Dopo alcune indagini mi sono accorto che se riducevo il numero di campi e lo riportavo sotto i 600 il tutto riprendeva a funzionare.

Allora ho pensato di splittare la mega tabella in 4. Ovviamente collegate con una FK. Se utilizzo i datagridview la cosa funziona, ma in questa situazione (che sembra una master-detail) ho bisogno di una form con solo textboxes con le 4 tabelle collegate.

C'è qualche anima buona che non mi cazzi per l'architettura delle tabelle (mi spiace ma a meno che di qualche genialata dovrebbe rimanere così) e mi suggerisce il modo migliore di salvare i dati collegati delle 4 tabelle.

Ho creato una form semplificata giusto per capire come approcciare che inizia in questo modo

Me.TblPS_CollaudiTableAdapter.Fill(Me.DsPSCollaudi.tblPS_Collaudi)
Me.TblPS_Collaudi_DFTableAdapter.Fill(Me.DsPSCollaudi.tblPS_Collaudi_DF)
Me.TblPS_Collaudi_MBTableAdapter.Fill(Me.DsPSCollaudi.tblPS_Collaudi_MB)
Me.TblPS_Collaudi_PFTableAdapter.Fill(Me.DsPSCollaudi.tblPS_Collaudi_PF)

La fase di salvataggio dovrebbe essere (infatti funziona per i DataGridView)

Me.Validate()
Me.TblPS_CollaudiBindingSource.EndEdit()
Me.TblPS_Collaudi_DFBindingSource.EndEdit()
Me.TblPS_Collaudi_MBBindingSource.EndEdit()
Me.TblPS_Collaudi_PFBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.DsPSCollaudi)

Ho cercato di elaborarla aggiungendo
Dim rowCurr As DataRowView = Me.TblPS_CollaudiBindingSource.Current()

Dim rowNewDF As DataRowView = Me.TblPS_Collaudi_DFBindingSource.Current()
rowNewDF("IDPSCollaudo") = rowCurr("IDPSCollaudo")
rowNewDF.EndEdit()

Dim rowNewMB As DataRowView = Me.TblPS_Collaudi_MBBindingSource.Current()
rowNewMB("IDPSCollaudo") = rowCurr("IDPSCollaudo")
rowNewMB.EndEdit()

Dim rowNewPF As DataRowView = Me.TblPS_Collaudi_PFBindingSource.Current()
rowNewPF("IDPSCollaudo") = rowCurr("IDPSCollaudo")
rowNewPF.EndEdit()

Me.TableAdapterManager.UpdateAll(Me.DsPSCollaudi)

Ma comunque mi manca la gestione del FK [IDPSCollaudo] e facendo così salvo solo il primo DataSet [DsPSCollaudi] mentre gli altri no.

Quello che dovrei fare è:
- salvare il primo DataSet
- Ricavare l'ultimo ID generato e memorizzarlo nei vari Dataset
- Quindi salvare i rimanenti Dataset.

Qualcuno ha qualche dritta o soluzione migliore?

Ringrazio e rimango in attesa speranzoso.
Disa
 
Ciao,

nelle opzioni delle relazioni tra le tue tabelle hai selezionato l'opzione

Update Rule: Cascade?
 
Naturalmente.
Tra le mille prove sicuramente ho impostato sopratutto quella.

Ciao
Disa
 

Discussioni simili