Riempire tabpage da DB Mysql

di il
29 risposte

Riempire tabpage da DB Mysql

Buongiorno a tutti, sono nuovo del forum, avrei un problema:
io ho una TabContlol e un DB con 2 tabelle: 1 e 2 ; leggendo il db, mi deve creare nel tabcontrol le tab page per gli elementi presenti nella tabella 1 (fino a qua tutto bene, mi crea le tab page correttamente) e per ogni tabpage, mi deve creare un pulsante per ogni oggetto che sta nella tabella 2 nel reparto corrispondente.
tabella 1
id descrizione
--|------------
1 |reparto1
2 |reparto2
3 |reparto3

tabella 2
id | descrizione | reparto
---|----------------|---------------
1 |oggetto1 |reparto2
2 |oggetto2 |reparto3
3 |oggetto3 |reparto2
4 |oggetto4 |reparto1
5 |oggetto5 |reparto2

Sta tutto nel confrontare il nome della pagepage, se nella tabella 2, nella colonna descrizione, la stringa è uguale a quella del nome della tabpage, creami un bottone con il nome uguale alla stringa sotto la colonna descrizione.
Per creare le tab page ho fatto in qesto modo:

Private Sub 1 ()
        MysqlConn = New MySqlConnection
        MysqlConn.ConnectionString =
            "server=.......;userid=.......;password=......;database=db"
        Dim SDA As New MySqlDataAdapter
        Dim dbDataSet_2 As New DataTable
        Dim bSource As New BindingSource
        Try
            MysqlConn.Open()
            Dim Query As String
            Query = "Select id,descrizione from db.1"
            COMMAND = New MySqlCommand(Query, MysqlConn)
            READER = COMMAND.ExecuteReader
            While READER.Read
                Dim Descrizione = READER.GetString("descrizione")
                TabControl1.TabPages.Add(Descrizione)
            End While
            MysqlConn.Close()
        Catch ex As MySqlException
            MessageBox.Show(ex.Message)
        Finally
            MysqlConn.Dispose()
        End Try
        Prodotti()
    End Sub

ringrazio tutti in anticipo

29 Risposte

  • Re: Riempire tabpage da DB Mysql

    Il post è già presente in altro forum ma autorizzato visto che sono passati diversi giorni dalla creazione.
  • Re: Riempire tabpage da DB Mysql

    Grazie toki
  • Re: Riempire tabpage da DB Mysql

    Mi sembra che tu abbia fatto una spiegazione leggermente confusa nonché incompleta.
    Non si capisce infatti dove tu crei i BUTTON degli oggettiX...

    Pesonalmente farei una query in JOIN tra le due tabelle, ordinando per reparto e oggetto, ottenendo così:
    1 |reparto1 |oggetto4
    2 |reparto2 |oggetto1
    2 |reparto2 |oggetto3
    2 |reparto2 |oggetto5
    3 |reparto3 |oggetto2

    poi farei un unico ciclo che mi crea il TAB del reparto e contemporaneamente per ogni reparto crea il BUTTON dei rispettivi oggetti, quindi:
    TAB Reparto1 -> OGGETTO oggetto4
    ecc.
  • Re: Riempire tabpage da DB Mysql

    Ciao, grazie gibra della tua risposta, mi scuso di non essere stato abbastanza chiaro e soprattutto ho postato un codice vecchio, che non contiene le mie ultime modifiche.

    Io sono costretto a lasciare le due tabelle

    e inserisco le due sub nel form_Load :
    
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Private Sub 1()
    Private Sub 2()
     End Sub
    
    In cui con la sub 1 creo le tab page con la tabella 1 (reparto1, reparto2, reparto3), mentre la sub 2, legge la seconda tabella: La tabella due tra le sue colonne ha: ID, Descrizione; reparto. Dovrei cercare di fare il confronto tra due stringhe cioè il titolo della tabpage, e la colonna dei reparti; se sono uguali, allora mi crea il bottone che ha come testo descrizione, incrementa l'indice della tab page e continua cosi fino ad arrivare alla fine.
    Io le tab page le creo cosi:
    
    Private Sub 1 ()
            MysqlConn = New MySqlConnection
            MysqlConn.ConnectionString =
                "server=.......;userid=.......;password=......;database=db"
                 Try
                MysqlConn.Open()
                Dim Query As String
                Query = "Select id,descrizione from db.1"
                COMMAND = New MySqlCommand(Query, MysqlConn)
                READER = COMMAND.ExecuteReader
                While READER.Read
                    Dim Descrizione = READER.GetString("descrizione")
                    TabControl1.TabPages.Add(Descrizione)
                End While
                MysqlConn.Close()
            Catch ex As MySqlException
                MessageBox.Show(ex.Message)
            Finally
                MysqlConn.Dispose()
            End Try
        End Sub
    
    Ho provato a creare i bottoni come faccio per le tab page:
    
     Private Sub 2()
           MysqlConn = New MySqlConnection
            MysqlConn.ConnectionString =
                "server=.......;userid=.......;password=......;database=db"
                  Try
                MysqlConn.Open()
                Dim Query As String
                Query = "Select id,descrizione from db.2"
                COMMAND = New MySqlCommand(Query, MysqlConn)
                READER = COMMAND.ExecuteReader
                TabControl1.TabIndex =1
                
               While READER.Read       
                    Dim Descrizione = READER.GetString("descrizione")
                    TabControl1.SelectedTab.Controls.Add(New Button())
                    'TabControl1.TabIndex = +1
                End While
            
    
                MysqlConn.Close()
    
            Catch ex As MySqlException
                MessageBox.Show(ex.Message)
            Finally
                MysqlConn.Dispose()
            End Try
    
        End Sub
    
    Sicuramente prima del while devo effettuare un controllo con titolo della tabpage, e la colonna dei reparti, se sono uguali, allora mi crea il bottone; ammesso che il ragionamento sia giusto, non so come effettuare il controllo.

    Ovviamente se avete altre idee tenendo invariate le due tabelle sono ben accette
    Grazie mille a tutti
  • Re: Riempire tabpage da DB Mysql

    Onestamente, il tuo codice non lo capisco proprio, e per me è sbagliato.
    Probabilmente è quello il motivo per cui non riesci.

    Prova come ti ho indicato io, invece di continuare ad insistere sulla strada sbagliata.
  • Re: Riempire tabpage da DB Mysql

    In che senso? quando creo una tabpage, creare allo stesso tempo il bottone, e quindi usare una sub unica?
  • Re: Riempire tabpage da DB Mysql

    Ho cercato di creare la Query = "Select Tabella2.id, Tabella2.descrizione_oggetto, From tabella1 Join tabella2 On Tabella1.descrizione_reparto =Tabella2.reparto_Oggetto

    Ma quando faccio Dim Descrizione = READER.GetString("descrizione_reparto"), descrizione_reparto non l'ho trova
  • Re: Riempire tabpage da DB Mysql

    Le tue indicazioni cambiano ad ogni post, questo non fa altro che generare solo confusione.
    Scusa, ma mi astengo dal continuare una discussione con tali presupposti.
  • Re: Riempire tabpage da DB Mysql

    Scusa gibra, hai assolutamente ragione, e che mentre scrivo una cosa dopo ne faccio un altra e faccio confusione , allora io avendo due tabelle:
    Se le tabelle sono:
    tabella 1
    id descrizione
    --|------------
    1 |reparto1
    2 |reparto2
    3 |reparto3

    tabella 2
    id | descrizione | reparto
    ---|----------------|---------------
    1 |oggetto1 |reparto2
    2 |oggetto2 |reparto3
    3 |oggetto3 |reparto2
    4 |oggetto4 |reparto1
    5 |oggetto5 |reparto2

    Ho provato a fare la query col join: tabella2.id,tabella2.descrizione ,From tabella1 Join tabella2 On Tabella1.descrizione =Tabella2.reparto
  • Re: Riempire tabpage da DB Mysql

    Quando vado a fare READER.GetString("") con descrizione della tabella 1 oppure reparto della tabella2, mi dice che il valore della colonna non è specificato
  • Re: Riempire tabpage da DB Mysql

    Forse ho trovato il mio errore:

    Query = tabella1.id, tabella1.descrizione, tabella2.descrizione From tabella1 Join tabella2 On Tabella1.descrizione =Tabella2.reparto
  • Re: Riempire tabpage da DB Mysql

    Cosi facendo gibra mi ritorna la tabella consigliata da te, ma quando vado a creare le tab page, giustamente mi crea più tab page con lo stesso nome, essendo che sotto la colonna descrizione1 avrò il reparto ripetuto per ogni oggetto che gli corrisponde, e rimane il problema di creare il pulsante.

    
    
    Query = tabella1.id, tabella1.descrizione, tabella2.descrizione From tabella1 Join tabella2 On Tabella1.descrizione =Tabella2.reparto
    COMMAND = New MySqlCommand(Query, MysqlConn)
    READER = COMMAND.ExecuteReader
    
    While READER.Read
                    Dim Descrizione = READER.GetString("tabella1.descrizione")
                    TabControl1.TabPages.Add(Descrizione)
                    While READER.Read
                        Dim Descrizione_1 = READER.GetString("tabella2.descrizione")
                        TabControl1.SelectedTab.Controls.Add(New Button())
                    End While
    End While
    
  • Re: Riempire tabpage da DB Mysql

    Scusatemi, sono riuscito a creare le tabpage ed a eliminare i doppioni, ma l'ultima tabpage non me la crea, cosa sto ignorando all'interno di questo while? sicuramente sarà un cavolata che mi sfugge


    While READER.Read()

    TabControl1.TabPages.Add(Descrizione)
    Descrizione = READER.GetString("tabella1.descrizione")
    For Each tab As TabPage In TabControl1.TabPages
    If tab.Text = Descrizione Then
    TabControl1.TabPages.Remove(tab)
    End If
    Next
    End While
  • Re: Riempire tabpage da DB Mysql

    Mi pare che stai arrampicandoti sugli specchi...

    Facendo il DEBUG del tuo codice, puoi rilevare se ciò che hai scritto corrisponde a ciò che ti aspetti.
    Onestamente, quando leggo l'istruzione:
    TabControl1.TabPages.Remove(tab)
    mi viene da chiedermi:
    ma se stai aggiungendo tab e pulsanti, perché mai dovresti usare il Remove?

    Guarda che questa cosa è abbastanza semplice, te lo scrivo in psuedo-codice:
    1. leggo ogni RIGA del READER:
    2. - leggo la DescrizioneReparto
    3. - se non esiste già il tab, lo creo
    4. - se esiste, vi aggiungo il pulsante
    Ripeto da 1 (ovvero passo alla riga successiva)

    Se sei fuori da questo schema, il tuo codice non funzionerà..


    Eventualmente fai un progettino sostituendo il db MySQL con un db Access e pubblicalo insieme al db.

Devi accedere o registrarti per scrivere nel forum
29 risposte