Riempire tabpage da DB Mysql

di ors il
29 risposte
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

  • Il post è già presente in altro forum ma autorizzato visto che sono passati diversi giorni dalla creazione.
  • Grazie toki
  • 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.
  • 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
  • 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.
  • In che senso? quando creo una tabpage, creare allo stesso tempo il bottone, e quindi usare una sub unica?
  • 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
  • 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.
  • 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
  • Quando vado a fare READER.GetString("") con descrizione della tabella 1 oppure reparto della tabella2, mi dice che il valore della colonna non è specificato
  • Forse ho trovato il mio errore:

    Query = tabella1.id, tabella1.descrizione, tabella2.descrizione From tabella1 Join tabella2 On Tabella1.descrizione =Tabella2.reparto
  • 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
    
  • 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
  • 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