Italian Creare un Grafico con b4a

Discussion in 'Italian Forum' started by Nikeddy, Mar 15, 2017.

  1. Nikeddy

    Nikeddy Active Member Licensed User

    salve a tutti,

    io con questo codice creo un grafico a barre
    Code:
    Sub caricagrafico
        panel4.Visible=
    False
        Panel3.Visible= 
    False
        Panel2.Visible= 
    False
        panel1.Visible= 
    False
        panel5.Visible= 
    False
        panel6.Visible= 
    True
      
        mbc1.LegendShapeSize = 
    7.0   
        mbc1.setTheLegendPositionAndForm(
    "BELOW_CHART_CENTER""CIRCLE")   
       
        mbc1.TheLegendColor = 
    Colors.Blue
        mbc1.TheLegendTextSize = 
    20.0
        mbc1.LegendTitle = 
    ""

        mbc1.ChartDescription = 
    "MEDIA INCASSO GIORNO"
        mbc1.ChartDescriptionColor = 
    Colors.Blue
        mbc1.ChartDescriptionTextSize = 
    17
        mbc1.setDescriptionPosition(mbc1.left + 
    14%x ,mbc1.top + 1%y)
       
        mbc1.ValueTextColor = 
    Colors.Black
        mbc1.ValueTextSize = 
    10.0

       
        mbc1.BarColors = 
    Array As Int(Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue)
        mbc1.LegendText = 
    Array As String("Jan""Feb""Mar""Apr""May""Jun""Jul""Aug""Sep""Oct""Nov""Dec")
        mbc1.ChartData = 
    Array As Float(52.316.746.040.5101.640.915.725.935.625.367.575.2)    'values - it will be converted to %
        mbc1.DoubleTapToZoomEnabled = True
        mbc1.DrawBarShadow = 
    False
        mbc1.GridBackgroundColor = 
    Colors.white
        mbc1.ValueTextColor = 
    0XFFFFA500
        mbc1.DrawBorders = 
    True
        mbc1.DrawGridBackground = 
    True
        mbc1.DrawHighlightArrow = 
    True
        mbc1.DrawValueAboveBar = 
    True
        mbc1.PinchZoom = 
    True
        mbc1.ScaleEnabled = 
    True
        mbc1.BorderColor = 
    Colors.Yellow
        mbc1.BorderWidth = 
    3.0
        mbc1.XaxisLabelPosition = 
    "BOTTOM"
        mbc1.XaxisTextSize = 
    15.0
        mbc1.XaxisTextColor = 
    Colors.Magenta
        mbc1.DrawYaxisGridLines = 
    True
        mbc1.YaxisTextColor = 
    Colors.Green
        mbc1.YaxisTextSize = 
    15.0

       
        mbc1.BarData = 
    12   'this number must be the same as the number of elements in the above arrays
    End Sub
    vorrei però passarci i dati di una estrazione con mysql, dove raggruppo per mese gli incassi.
    come posso cambiare questa riga:
    Code:
    mbc1.ChartData = Array As Float(52.316.746.040.5101.640.915.725.935.625.367.575.2)    'values - it will be converted to %
    con i valori di una query sql?
     
  2. MarcoRome

    MarcoRome Expert Licensed User

    Code:
    '** Query
       
        
    If Starter.StringArray = "" Then
            dbCursor = dbSQL.ExecQuery(
    $"SELECT * FROM report where totimporto < 0 "$)
        
    Else
        dbCursor = dbSQL.ExecQuery(
    $"Select 
    id_conto,
    category,
    SUM(importo ) As totimporto
     FROM 
     crediti_debiti
      where importo < 0 And id_conto IN (${
    Starter.StringArray})
      group by category"$
    )
        
    End If


                
    Dim feed(9), descrizione(9As String
                
    Dim totale_answer As Int
                totale_answer = dbCursor.RowCount
                
    If totale_answer > 9 Then
                    
    ToastMessageShow("You have a lot question to elaborate, is better that you export in CSV"True)
                    
    Return
                
    End If
                
    If totale_answer > 0 Then
           
                    
    For i = 0 To dbCursor.RowCount - 1
                        
    'Each item has a different content, with a different height. For each new height, a layout is created.
                            dbCursor.Position = i
                            feed(i) = 
    Abs(dbCursor.GetString("totimporto"))
                            descrizione(i) = dbCursor.GetString(
    "category")
                    
    Next
                
    'Imposto caratteristiche Grafico
                        mpc_debit.ValueTextColor = Colors.Black
                        mpc_debit.ValueTextSize = 
    8.0
                        mpc_debit.PieColors = 
    Array As Int(Colors.Blue, Colors.Yellow, Colors.Green, Colors.Red, Colors.Magenta, Colors.Cyan, Colors.White, Colors.DarkGray, Colors.Gray)
                       
               
                
    Select totale_answer
                   
                    
    Case 1
                        mpc_debit.LegendText = 
    Array As String(descrizione(0))
                        mpc_debit.ChartData = 
    Array As Float(feed(0))    'values - it will be converted to %
                        mpc_debit.PieData = 1
                    
    Case 2
                        mpc_debit.LegendText = 
    Array As String(descrizione(0),descrizione(1))
                        mpc_debit.ChartData = 
    Array As Float(feed(0),feed(1))  
                        mpc_debit.PieData = 
    2
                    
    Case 3
                        mpc_debit.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2))
                        mpc_debit.ChartData = 
    Array As Float(feed(0),feed(1),feed(2))  
                        mpc_debit.PieData = 
    3
                    
    Case 4
                        mpc_debit.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3))
                        mpc_debit.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3))    
                        mpc_debit.PieData = 
    4
                    
    Case 5
                        mpc_debit.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4))
                        mpc_debit.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4))    
                        mpc_debit.PieData = 
    5
                    
    Case 6
                        mpc_debit.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4),descrizione(5))
                        mpc_debit.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4),feed(5))   
                        mpc_debit.PieData = 
    6
                    
    Case 7
                        mpc_debit.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4),descrizione(5),descrizione(6))
                        mpc_debit.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4),feed(5),feed(6))     
                        mpc_debit.PieData = 
    7
                    
    Case 8
                        mpc_debit.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4),descrizione(5),descrizione(6),descrizione(7))
                        mpc_debit.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4),feed(5),feed(6),feed(7))    
                        mpc_debit.PieData = 
    8
                    
    Case 9
                        mpc_debit.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4),descrizione(5),descrizione(6),descrizione(7),descrizione(8))
                        mpc_debit.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4),feed(5),feed(6),feed(7),feed(8))  
                        mpc_debit.PieData = 
    9
                       
                
    End Select
                
    End If
     
    Nikeddy likes this.
  3. Nikeddy

    Nikeddy Active Member Licensed User

    oddio, devo studiarmela per adattarla.

    sto cercando di capire come funziona, cosi da capire cosa cambiare alla mia funzione.

    grazie, provo e aggiorno.
     
  4. Nikeddy

    Nikeddy Active Member Licensed User

    allora, ho adattato al mio progetto, dove mi interessa, per ogni mese nel database, lui crei una barra del grafico.


    Code:
    Sub caricanuovografico

        
    If Starter.StringArray = "" Then
            dbCursor = dbSQL.ExecQuery(
    $"SELECT * FROM Elenco_Raccolte where tot_euro < 0 "$)

        
    Else
        dbCursor = dbSQL.ExecQuery(
    "SELECT MONTHNAME(Data) As mese, SUM(incasso_contanti) As totale FROM Elenco_Raccolte WHERE n_macchina = " & ricordamacchina & " GROUP BY MONTH(Data)")
        
    End If


                
    Dim feed(9), descrizione(9As String
                
    Dim totale_answer As Int
                totale_answer = dbCursor.RowCount
                
    If totale_answer > 9 Then
                    
    ToastMessageShow("You have a lot question to elaborate, is better that you export in CSV"True)
                    
    Return
                
    End If
                
    If totale_answer > 0 Then
          
                    
    For i = 0 To dbCursor.RowCount - 1
                        
    'Each item has a different content, with a different height. For each new height, a layout is created.
                            dbCursor.Position = i
                            feed(i) = 
    Abs(dbCursor.GetString("totimporto"))
                            descrizione(i) = dbCursor.GetString(
    "mese")
                    
    Next
                
    'Imposto caratteristiche Grafico
            mbc1.ValueTextColor = Colors.Black
            mbc1.ValueTextSize = 
    8.0
            mbc1.PieColors = 
    Array As Int(Colors.Blue, Colors.Yellow, Colors.Green, Colors.Red, Colors.Magenta, Colors.Cyan, Colors.White, Colors.DarkGray, Colors.Gray)
                      
              
                
    Select totale_answer
                  
                    
    Case 1
                    mbc1.LegendText = 
    Array As String(descrizione(0))
                    mbc1.ChartData = 
    Array As Float(feed(0))    'values - it will be converted to %
                    mbc1.PieData = 1
                    
    Case 2
                    mbc1.LegendText = 
    Array As String(descrizione(0),descrizione(1))
                    mbc1.ChartData = 
    Array As Float(feed(0),feed(1))
                    mbc1.PieData = 
    2
                    
    Case 3
                    mbc1.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2))
                    mbc1.ChartData = 
    Array As Float(feed(0),feed(1),feed(2))
                    mbc1.PieData = 
    3
                    
    Case 4
                    mbc1.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3))
                    mbc1.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3))
                    mbc1.PieData = 
    4
                    
    Case 5
                    mbc1.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4))
                    mbc1.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4))
                    mbc1.PieData = 
    5
                    
    Case 6
                    mbc1.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4),descrizione(5))
                    mbc1.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4),feed(5))
                    mbc1.PieData = 
    6
                    
    Case 7
                    mbc1.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4),descrizione(5),descrizione(6))
                    mbc1.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4),feed(5),feed(6))
                    mbc1.PieData = 
    7
                    
    Case 8
                    mbc1.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4),descrizione(5),descrizione(6),descrizione(7))
                    mbc1.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4),feed(5),feed(6),feed(7))
                    mbc1.PieData = 
    8
                    
    Case 9
                    mbc1.LegendText = 
    Array As String(descrizione(0),descrizione(1),descrizione(2),descrizione(3),descrizione(4),descrizione(5),descrizione(6),descrizione(7),descrizione(8))
                    mbc1.ChartData = 
    Array As Float(feed(0),feed(1),feed(2),feed(3),feed(4),feed(5),feed(6),feed(7),feed(8))
                    mbc1.PieData = 
    9
                      
                
    End Select
                
    End If

    End Sub
    dove sbaglio?
     
  5. MarcoRome

    MarcoRome Expert Licensed User

    Nike, ancora una volta.
    Domanda troppo generica.
    a cosa è riferito "dove sbaglio ?"
    Ti da un crash, non ti visualizza nulla, hai un risultato inatteso....ed altre 100 supposizioni.
    Se non inserisci che tipo di errore hai, in quale linea, etc. Noi, come possiamo risponderti ??
     
  6. Nikeddy

    Nikeddy Active Member Licensed User

    scusa :)

    mi da sintax error sulla query.

    e poi questo :
    dbCursor = dbSQL.

    non so cosa e' ...
     
  7. MarcoRome

    MarcoRome Expert Licensed User

    Allora Nike capisco che sei nuovo.
    Ti spiego come si procede quando si chiede aiuto sul sito ( se vuoi una mano ).
    1. Aprire un Thread con un titolo esplicativo ( inm questo modo un domani sarà più facile la ricerca anche per altri ).
    2. Riportare il codice di esempio che da il problema, anche con un piccolo esempio
    3. Riportare cosa ci si attendeva e cosa invece si è ricevuto
    4. Riportare il file LOG ( presente nella finestra a destra )
    Il tutto utilizzando
    upload_2017-3-20_13-59-41.png

    la formattazione del menu come da immagine. Tipo se è codice da riportare seleziona "Code" ed incolla lo stesso li, etc.
    Ora detto questo mi dici da sintax error, bene...nella finestra Log se guardi ti indica anche cosa hai sbagliato, oppure cortesemente incolla ciò che vedi nella finestra log qui ( utilizzando Quote o Code ).
     
  8. MarcoRome

    MarcoRome Expert Licensed User

    Relativamente al secondo messaggio, il sito B4X è comodissimo proprio per questo perchè trovi migliaia di esempi, tutorial, libreria, etc. Basta andare
    upload_2017-3-20_14-4-39.png
    digitare la parolina magica, nel tuo caso: dbCursor, cliccare sull'icona della lente ....
    e otterrai decine di risultati utili.
    upload_2017-3-20_14-6-43.png

    Cosi le guardi e impari moltissime cose. Poi fatto questo se non hai trovato la soluzione apri un nuovo thread.
     
    Star-Dust likes this.
  9. Nikeddy

    Nikeddy Active Member Licensed User

    giusto. ti spiego

    io ho questa query dove raggruppo per mese l'incasso.

    ora da qui voglio creare un grafico degli ultimi mesi presenti all'interno.

    Code:
    ExecuteRemoteQuery("SELECT MONTHNAME(Data) As mese, SUM(incasso_contanti) As totale FROM Elenco_Raccolte WHERE n_macchina = " & ricordamacchina & " GROUP BY MONTH(Data)")
    io questa parte qui mi blocco:

    Code:
    If Starter.StringArray = "" Then
            dbcursor = dbSQL.ExecuteRemoteQuery(
    $"SELECT * FROM Elenco_Raccolte where tot_euro < 0 "$)
        
    '    ("SELECT tot_euro FROM  WHERE n_macchina='" & macchina & "'")
        Else
            dbcursor = dbSQL.ExecuteRemoteQuery(
    "SELECT MONTHNAME(Data) As mese, SUM(incasso_contanti) As totale FROM Elenco_Raccolte WHERE n_macchina = " & ricordamacchina & " GROUP BY MONTH(Data)")
        
    End If


                
    Dim feed(9), descrizione(9As String
                
    Dim totale_answer As Int
                totale_answer = dbcursor.RowCount
                
    If totale_answer > 9 Then
                    
    ToastMessageShow("You have a lot question to elaborate, is better that you export in CSV"True)
                    
    Return
                
    End If
                
    If totale_answer > 0 Then
          
                    
    For i = 0 To dbcursor.RowCount - 1
                        
    'Each item has a different content, with a different height. For each new height, a layout is created.
                            dbcursor.Position = i
                            feed(i) = 
    Abs(dbcursor.GetString("totimporto"))
                            descrizione(i) = dbcursor.GetString(
    "mese")
                    
    Next
    cioe' come riporto al case? cosa e' "starter" e dbcursor?
     
  10. Nikeddy

    Nikeddy Active Member Licensed User

    ok mi sono perso.

    riparto da capo, devo fare un grafico dove secondo la macchina mi da mese per mese una barra.

    creo la query:
    Code:
    ExecuteRemoteQuery("SELECT MONTHNAME(Data) As mese, SUM(incasso_contanti) As totale FROM Elenco_Raccolte WHERE n_macchina = " & ricordamacchina & " GROUP BY MONTH(Data)",containcasso)
    e lo metto in una lista:

    Code:
    Case incassomese
                    
    Dim COUNTRIES As List
                    
    Dim formatnumero As Double
                    COUNTRIES = parser.NextArray
                    
    For i = 0 To COUNTRIES.Size - 1
                        
    Dim m As Map
                        m = COUNTRIES.Get(i)
                        
    Dim tl As TwoLines
                        tl.First = m.Get(
    "mese")
                        formatnumero  = m.Get(
    "totale")
                        tl.Second = formatnumero
                        listview3.AddTwoLines2(tl.First, tl.Second, tl)
                    
    Next
    in modo identico invece che in una lista, vorrei un grafico.
     
  11. MarcoRome

    MarcoRome Expert Licensed User

    Star-Dust likes this.
Loading...