Relazione tra due tabelle

di Jan il
14 risposte
Public Class Relazioni
   Private Sub Relazioni_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       ' Carico i dati nelle tabelle
       Me.OrdiniTableAdapter.Fill(Me.TestDataSet.Ordini)
       Me.ClientiTableAdapter.Fill(Me.TestDataSet.Clienti)
       
       ' Creo la relazione tra le tabelle
       Dim relazione As New DataRelation("ClientiOrdini", TestDataSet.Tables("Clienti").Columns("ClienteID"), TestDataSet.Tables("Ordini").Columns("ClienteID"))
       TestDataSet.Relations.Add(relazione)
       
       ' Pulisco i DataBindings
       TextBoxClienteID.DataBindings.Clear()
       TextBoxNome.DataBindings.Clear()
       TextBoxOrdineID.DataBindings.Clear()
       TextBoxDataOrdine.DataBindings.Clear()
       
       ' Associo i BindingSource ai controlli del form
       TextBoxClienteID.DataBindings.Add("Text", BSclienti, "ClienteID")
       TextBoxNome.DataBindings.Add("Text", BSclienti, "Nome")
       TextBoxOrdineID.DataBindings.Add("Text", BSordini, "clienteID")
       TextBoxDataOrdine.DataBindings.Add("Text", BSordini, "DataOrdine")
       
       ' Imposto la relazione tra i BindingSource
       BSordini.DataSource = BSclienti
       BSordini.DataMember = "ClientiOrdini"
       
       ' Associo il BindingNavigator al BindingS.
       BindingNavigator2.BindingSource = BSordini
   End Sub
End Class

Questo codice mi restituisce sempre il seguente errore (ogni verifica l'ho effettuata ripetutamente) :

Se lo stesso codice lo uso con due datatables , nessun errore si manifesta e la relazione funziona perfettamente!

Grazie a chiunque mi aiuti a risolvere il problema.

14 Risposte

  • Prova a commentare questa:

    TextBoxDataOrdine.DataBindings.Add("Text", BSordini, "DataOrdine")

    Da errore?

    Di solito le date richiedono maggiore attenzione.

    Controlla tutto ciò che riguarda dataordine.

  • 07/09/2024 - sihsandrea ha scritto:


    Prova a commentare questa:

    TextBoxDataOrdine.DataBindings.Add("Text", BSordini, "DataOrdine")

    Da errore?

    Di solito le date richiedono maggiore attenzione.

    Controlla tutto ciò che riguarda dataordine.

    sihsandrea.grazie anzitutto per il tuo intervento.

    Ho provato a sostituire text con value, ma il risultato è che non è impossibile stabilire una connessione con “value”.

    Le sto provando tutte, ma….

  • Si, ok, Prova ad eliminare quella riga di codice.

    Se non da problemi allora ad essere incriminato potrebbe essere il campo, il controllo, il tipo di dato… intanto vedi se eliminando quella.riga non da errori.

  • Sihsandrea, scusa se rispondo in ritardo. Il problema mi sta assillando e non ho pensato a tenere sotto controllo i posts.

    Rispondo affermativamente alla tua proposta di eliminare il campo DataOrdine.

    La relazione funziona perfettamnete. Infatti, l'IDOrdine cambia quando seleziono un diverso cliente.

    Ho provato allora a cambiare il campo :l'ho chiamato Merce ,di tipo text.

    Stesso errore: Impossibile stabilire l'associazione alla colonna merce!

    Ho fatto però altri tentativi : 

    Ho sostituito le text con due datagrid lasciando inalterato il codice relativo ai bindingsource e bindingnavitator : la relazione funziona perfettamente.

    Ho provato allora a inserire nella tabella Cliente un campo con il nome DataOrdine (lo stesso degli ordini, lo stesso che produce l'errore) : la relazione funziona perfettamente!

    Ho provato a mettere in relazione le due tabelle usando il wizard della finestre di progettazione : la relazione funziona perfettamente.

    Solo quando si scrive del codice per stabilire e sfruttare una relazione, si verificano degli errori. 

    Sono tentato dal mollare, ma sono curioso, voglio capire. Grazie per qualsiasi suggerimento che vorrai darmi.

  • 08/09/2024 - Jan ha scritto:


    Ho provato allora a inserire nella tabella Cliente un campo con il nome DataOrdine (lo stesso degli ordini, lo stesso che produce l'errore) : la relazione funziona perfettamente!

    Quindi devi controllare il campo data della tabella orini. Controlla o sostituisci ex novo anche il controllo magari si riporta un errore avuto in fase di creazione.

  • 09/09/2024 - sihsandrea ha scritto:


    08/09/2024 - Jan ha scritto:


    Ho provato allora a inserire nella tabella Cliente un campo con il nome DataOrdine (lo stesso degli ordini, lo stesso che produce l'errore) : la relazione funziona perfettamente!

    Quindi devi controllare il campo data della tabella orini. Controlla o sostituisci ex novo anche il controllo magari si riporta un errore avuto in fase di creazione.

    Ho fatto di più. Ho cancellato e riscritto il form. Non è cambiato nulla! 

    Come ho scritto sopra (Ho provato a mettere in relazione le due tabelle usando il wizard della finestre di progettazione : la relazione funziona perfettamente.), ho esaminato il codice prodotto da VS : non ho trovato differenze sostanziali.

  • Su WeTransfer ho scaricato le mie prove.

    Questo il link per scaricare la cartella e ….cercare l'errore su MyRelazione3: https://we.tl/t-mk1efYxTSt.

    Grazie.

  • Errore nome parametro datamenber

    Controlla

    BSordini.DataMember = “ClientiOrdini”

    Confronta il tuo codice col wiz… 

  • RISOLTO!

    Ti sarò sempre grato per l'aiuto che mi hai fornito, sihsandrea.

    Dopo aver effettuato,dopo il tuo sollecito ,l'ennesima verifica, ha riflettuto ed ho modificato il codice come segue (dopo aver settato a “nessuno” il databinding da proprietà delle textbox IdCliente e merce) :

            ' Carica i dati nelle tabelle
           Me.OrdiniTableAdapter.Fill(Me.TestDataSet.Ordini)
           Me.ClientiTableAdapter.Fill(Me.TestDataSet.Clienti)
           
           ' Crea la relazione tra le tabelle
           Dim relazione As New DataRelation("ClientiOrdini", TestDataSet.Tables("Clienti").Columns("ClienteID"), TestDataSet.Tables("Ordini").Columns("ClienteID"))
           TestDataSet.Relations.Add(relazione)
           
           ' Imposta la relazione tra i BindingSource
           BSordini.DataSource = BSclienti
           BSordini.DataMember = "ClientiOrdini"
           
           TextBoxOrdineID.DataBindings.Clear()
           Merce.DataBindings.Clear()
    
           TextBoxOrdineID.DataBindings.Add("Text", BSordini, "ClienteID")
           Merce.DataBindings.Add("Text", BSordini, "Merce")
           
           ' Associa il BindingNavigator al BindingS.
           BindingNavigator2.BindingSource = BSordini.
           
           Ora funziona come previsto!!! Grazie!! 
  • Grandioso!

  • Puoi usare il filtro del BindingSource

    Due tabelle in relazione

    FatturepagateT e FatturepagateR

    O così

                    FatturepagateRBindingSource.Filter = "Codice= '" & CodiceTextBox.Text & "'"
    

    o se ti da errore

             On Error Resume Next
            FatturepagateRBindingSource.Filter = "Codice= '" & CodiceTextBox.Text & "'"
    
    
  • 19/09/2024 - jekisi ha scritto:


    Puoi usare il filtro del BindingSource

    Due tabelle in relazione

    FatturepagateT e FatturepagateR

    O così

                    FatturepagateRBindingSource.Filter = "Codice= '" & CodiceTextBox.Text & "'"
    

    o se ti da errore

             On Error Resume Next
            FatturepagateRBindingSource.Filter = "Codice= '" & CodiceTextBox.Text & "'"
    
    

    Grazie jekisi per il tuop intervento, ma io non avevo bisogno di filtrare i dati di una tabella ma di mettere in relazione due tabelle.

  • Come ti dico io metti in relazione due tabelle, come ad esempio le fatture, testata e righe

  • 20/09/2024 - jekisi ha scritto:


    Come ti dico io metti in relazione due tabelle, come ad esempio le fatture, testata e righe

    Sì, certo. E' chiaro che il risultato è lo stesso. Grazie jekisi.

Devi accedere o registrarti per scrivere nel forum
14 risposte