Buongiorno,
mi sono deciso a scrivere a questo forum sperando di poter risolvere questo problema che mi assilla da giorni senza trovare soluzione.
Il problema parte dal fatto che per un progetto devo gestire una form di inserimento dati con oltre 1500 variabili. Sapendo che il limite di una tabella SQL sono 1024 variabili, pensavo di dividere la tabella. Quindi la relazione non è proprio una One-To-Many ma più One-To-One.
Per semplificare il ragionamento e per chi volesse tentare, ho ridotto le variabili in 2 tabelle A1 (con i campi IDParent, T1 come testo), e A2 (IDChild, IDParent, T2). Per la visualizzazione una semplice form con 2 textbox e un BindingNavigator.
Questo è il codice per caricare i dati e per la navigazione e vi posso dire che il tutto funziona correttamente.
Quello che non riesco a capire come fare è l'inserimento e salvataggio di un nuovo record.
Il salvataggio della tabella A1 è OK ma non riesco a gestire le info da salvare per la tabella A2.
Vi chiedo gentilmente una mano perchè sto sbattendo la testa senza trovare soluzione.
Saluti
codice:
ds = New DataSet()
'DataAdapter
sbSql.Clear()
sbSql.AppendLine("SELECT * FROM A1 ")
daCollaudi = New SqlDataAdapter(sbSql.ToString, con)
'daCollaudi.FillSchema(ds, SchemaType.Mapped, "Collaudi")
daCollaudi.MissingSchemaAction = MissingSchemaAction.AddWithKey
daCollaudi.Fill(ds, "Collaudi")
'DataAdapter
sbSql.Clear()
sbSql.AppendLine("SELECT * FROM A2 ")
daMB = New SqlDataAdapter(sbSql.ToString, con)
'daMB.FillSchema(ds, SchemaType.Mapped, "MB")
daMB.MissingSchemaAction = MissingSchemaAction.AddWithKey
daMB.Fill(ds, "MB")
'BindingSource
bs = New BindingSource()
bs.DataSource = ds
bs.DataMember = "Collaudi"
A1BindingNavigator.BindingSource = bs
'Relazione
ds.Relations.Add("CollaudiMB", ds.Tables("Collaudi").Columns("IDParent"), ds.Tables("MB").Columns("IDParent"), False)
bsMB = New BindingSource()
bsMB.DataSource = bs
bsMB.DataMember = "CollaudiMB"
txt1.DataBindings.Clear() : txt1.DataBindings.Add(New Binding("editvalue", bs, "T1", True))
txt2.DataBindings.Clear() : txt2.DataBindings.Add(New Binding("editvalue", bsMB, "T2", True))
Questo è il codice che uso per il salvataggio
Private Sub SaveRec()
Try
con.ConnectionString = GetConnectionString()
con.Open()
Me.Validate()
'Avviso che ho finito di apportare modifiche
bs.EndEdit()
bsMB.EndEdit()
Dim cb1 As New SqlCommandBuilder(daCollaudi)
Dim cb2 As New SqlCommandBuilder(daMB)
If con.State <> ConnectionState.Open Then con.Open()
daCollaudi.Update(ds, "Collaudi")
daMB.Update(ds, "MB")
ds.Tables("Collaudi").AcceptChanges()
ds.Tables("MB").AcceptChanges()
Catch ex As Exception
Finally
If con.State <> ConnectionState.Closed Then con.Close()
End Try
End Sub