none
Salvataggio Master/Details da TextBox RRS feed

  • Domanda

  • 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 progetto 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

                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

    lunedì 15 aprile 2019 10:53