+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

TextBox da più tabelle tipo MasterDetails

  1. #1
    disa non è in linea Novello
    Buongiorno,

    in db MSSql ci sono 3 tabelle: Collaudo, Area1 e Area2 dove vengono salvate le informazioni relative all'anagrafica del collaudo nella tabella Collaudo, mentre nelle altre tabelle, Area1 e 2 le informazioni che vengono salvate dagli operatori in base al collaudo. Quindi per ogni collaudo generato gli operatori delle aree generano il loro test e quindi aggiungono 1 record per collaudo.

    Quindi avremo una specie di Master Details ma dove le tabelle Details avranno sempre solo 1 record per ogni parent (tipo tabelle 1-a-1).

    Concentrandoci sulla situazione in essere (chiaramente vi sarebbero altri modi per impostare la cosa), ci sarebbe il modo di rappresentare e gestire i dati in un unica form formata di solo textbox?

    Utilizzando dataset collegati la navigazione riesce senza problemi, per quando riguarda Insert/Update/Delete non sono riuscito a risolvere in alcun modo.

    Spero di aver chiarito i dati di base
    Grazie

  2. #2
    Il problema che hai non è chiaro.
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    disa non è in linea Novello
    Le 3 tabelle le possiamo progettare cosi

    tbl_Collaudo tbl_Area1 tbl_Area2
    ------------------------------------------------------------
    IDCollaudo ID ID
    NomeCollaudo IDCollaudo IDCollaudo
    NomeTest1 NomeTest2


    Esempio valori di partenza
    --------------------------------------------------------
    1 001 001
    Nome 1 1
    Test1 Test2



    Ora immaginiamo di visualizzare in una winform i campi:
    NomeCollaudo NomeTest1 NomeTest2

    Oltre alla loro visualizzazione e navigazione, si vuole effettuare un operazione tipo: Insert/Update/Delete che coinvolga tutte 3 tabelle.

    Quindi se immaginiamo Insert, nelle tabelle dovremmo trovare i valori
    --------------------------------------------------------
    2.........002.........002
    Nome...2............2
    ...........Test21.... Test22


    Con i comandi
    INSERT INTO tbl_Collaudo (NomeCollaudo) VALUES ('Nome'); SELECT SCOPE.......
    INSERT INTO tbl_Area1 (IDCollaudo,NomeTest1) VALUES (2,'Test21')
    INSERT INTO tbl_Area2 (IDCollaudo,NomeTest2) VALUES (2,'Test22')


    Ora può sembrare più chiaro?
    Mi spiace ma non ho trovato il modo di incolonnare le tabelle
    Grazie
    Ultima modifica di disa; 17-05-2021 09:05 

  4. #4
    Scusa ma non si riesce a capire quale sia la domanda. Fra l'altro nel titolo "Textbox ..." cosa c'entrano le Textbox?

    Non sai fare le INSERT? Non sai ottenere i campi chiave?
    Ovviamente dovresti eseguire tutto in una Transazione (con relativo Commit/Rollback). Lo fai?
    ℹ️ Leggi di più su AntonioG ...

  5. #5
    disa non è in linea Novello
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Scusa ma non si riesce a capire quale sia la domanda. Fra l'altro nel titolo "Textbox ..." cosa c'entrano le Textbox?

    Non sai fare le INSERT? Non sai ottenere i campi chiave?
    Ovviamente dovresti eseguire tutto in una Transazione (con relativo Commit/Rollback). Lo fai?
    Capisco che avete a che fare con situazioni e domande più disparate, ma pensavo fosse intuibile.

    Qui non si tratta di connettere una textbox o un griglia, si tratta di gestire una form collegata a 3 tabelle. Quindi supponiamo di aver già gestito tutta la parte di connessioneDB-databinding-datanavigator per una form come se fosse normale. Cosa che si fa senza alcun problema. La textbox è per indicare che, visto che siamo in presenza di una classica Master-Details il suggerimento più ovvio sarebbe quello di rappresentare i Details con una DataGrid, mentre nel mio caso vorrei solo textbox. Già questa limitazione dovrebbe far intuire la domanda.

    I comandi che ho descritto "Insert" era per far comprendere le operazioni che stanno dietro ad una normale operazione di Insert e che mostrano che oltre a gestire la tabella master debbano poter gestire anche i Details

    Questo è un piccolo esempio che sto' usando e che gestisce correttamente la tabella Master ma, anche se relazionate, non gestisce le tabelle childs. Devo in qualche modo intervenire sui comandi del dataset o gestire le tabelle dei dataset?

       
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.ParentTableAdapter.Fill(Me.DsParent.Parent)
            Me.Parent_Child2TableAdapter.Fill(Me.DsParent.Parent_Child2)
            Me.Parent_Child1TableAdapter.Fill(Me.DsParent.Parent_Child1)
        End Sub
     Private Sub ParentBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
            Me.Validate()
            Me.ParentBindingSource.EndEdit()
            Me.Parent_Child1BindingSource.EndEdit()
            Me.Parent_Child1BindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.DsParent)
    
        End Sub
    
        Private Sub BindingNavigatorAddNewItem_Click(sender As Object, e As EventArgs) Handles btnAddNewCollaudo.Click
            Parent_Child1BindingSource.AddNew()
            Parent_Child2BindingSource.AddNew()
    
        End Sub
    

  6. #6
    Strano...

    Intanto ti segnalo che hai inserito erroneamente 2 volte il bindingsource del Child1, all'interno del metodo di salvataggio.

    Ho fatto al volo una prova creando 2 tabelle, denominate Customers ed Orders (evviva la fantasia ), ho creato il DataSet, TableAdapter e relativi BindingSource e BindingNavigation, quindi ho associato una DGV alla Tabella "padre" Customers e delle TextBoxes alla tabella "figlio" Orders. Il BindingNavigation è stato utilizzato per scorrere gli elementi della tabella Orders.


    Eseguendo le modifiche nelle varie TextBox o aggiungendo nuovi Ordini tramite BindingSource.AddNew, i dati sono stati correttamente consolidati sul DB, sia con l'utilizzo di TableAdapterManager che con il singolo TableAdapter.

    TableAdapterManager:
            Me.Validate()
            Me.FKOrdersCustomersBindingSource.EndEdit()
            If SampleDBDataSetTESTBindingTextBoxes.HasChanges Then
                Me.TableAdapterManager1.UpdateAll(Me.SampleDBDataSetTESTBindingTextBoxes)
            End If
    
    TableAdapter:
            Me.Validate()
            Me.FKOrdersCustomersBindingSource.EndEdit()
            If SampleDBDataSetTESTBindingTextBoxes.HasChanges Then
                Me.OrdersTableAdapter.Update(Me.SampleDBDataSetTESTBindingTextBoxes.Orders)
            End If
    
    Nella prova ho usato una semplice relazione senza vincoli.
    ℹ️ Leggi di più su Fix ...

  7. #7
    disa non è in linea Novello
    L'entusiasmo per avere risolto questo problema mi si è spento dopo aver provato a gestire il tuo esempio.

    Penso probabilmente di non aver gestito al meglio le info che mi hai condiviso.

    Gli step che ho rifatto sono:
    - Creazione del DS prendendo dal DB le tabelle (dsParent.Parent, dsParent.Child1, dsParent.Child2)
    - Editing del DS aggiungendo le relazioni con relativo "Cascade" per aggiornamento e cancellazione
    - Creazione della form con 3 Textboxes + BindingNavigator
    - Databinding delle 3 Textboxes:
    ----- 1 TextBox con ParentBindingSource - Name
    ----- 2 TextBox con Child1BindingSource - Child
    ----- 3 TextBox con Child2BindingSource - Child
    ----- BindingNavigator con ParentBindingSource

    Le TextBox sono agganciate al BindingSource perchè se fossero agganciate alla Table vedo solo il primo ma non naviga.

    Mi condividi qualche altra info, ti ringrazio

  8. #8
    Non riesco a riprodurre il problema, a me i dati vengono salvati nel DB.

    Hai provato sistemando questo codice, mettendo il BS corretto ?
    Private Sub ParentBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click
    Me.Validate()
    Me.ParentBindingSource.EndEdit()
    Me.Parent_Child1BindingSource.EndEdit()
    Me.Parent_Child2BindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.DsParent)

    End Sub
    Ricevi qualche errore a video ?
    Se modifichi un valore del Parent, la modifica viene salvata sul DB ?

    Potresti provare a fare l'update direttamente dai TableAdapter singolarmente ?

           Me.Parent_Child1BindingSource.EndEdit()
           Me.Parent_Child2BindingSource.EndEdit()
           Me.Parent_Child1TableAdapter.Update(Me.DsParent.Parent_Child2)
           Me.Parent_Child2TableAdapter.Update(Me.DsParent.Parent_Child1)
    
    ℹ️ Leggi di più su Fix ...

  9. #9
    disa non è in linea Novello
    Proverò anche le singole TableAdpter ma non credo funzionerà. Nessun Errore
    Con SQL Profiler vedo che viene eseguita solo l'operazione sulla tabella Master.

    Pensi di potermi condividere il tuo codice (che ovviamente adatterò alla mia situazione) per verificare se effettivamente riusciamo a risolvere.

    La prova sembra a posto solo che nelle textbox child anche se avviene una modifica questa non viene presa in considerazione dal DS e che quindi non scatena la richiesta di aggiornamento.

    Ci vorrebbe un bell'articolo che spieghi bene cosa succede e sopratutto quali sono le funzioni del DS che si possono usare per fare del debug su quello che succede.

    Intanto grazie del supporto.

  10. #10
    Ho modificato il progetto rendendolo più verosimile alle informazioni che hai fornito ed ho riscontrato lo stesso problema che hai segnalato tu.

    Ho fatto alcune prove ma con esito negativo.

    Al momento non so come aiutarti
    ℹ️ Leggi di più su Fix ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Risposte: 3
    Ultimo Post: 28-03-2017, 10:53
  2. [VB .NET - DataGridView] Cambiare tipo colonna da textbox a combobox
    Da winningatrox nel forum Visual Basic .Net
    Risposte: 13
    Ultimo Post: 18-01-2016, 08:45
  3. [c#] Tipo di dato in una textbox
    Da Zigo nel forum C#
    Risposte: 2
    Ultimo Post: 16-01-2006, 09:53
  4. controllo tipo di dato su textbox
    Da manupil nel forum Visual Basic 6
    Risposte: 9
    Ultimo Post: 13-03-2004, 10:39
  5. textbox e tipo di testo
    Da Massimiliano nel forum Visual Basic 6
    Risposte: 8
    Ultimo Post: 09-02-2004, 15:34