Italian Creare un Grafico con b4a

Nikeddy

Active Member
Licensed User
salve a tutti,

io con questo codice creo un grafico a barre
B4X:
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.3, 16.7, 46.0, 40.5, 101.6, 40.9, 15.7, 25.9, 35.6, 25.3, 67.5, 75.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:
B4X:
mbc1.ChartData = Array As Float(52.3, 16.7, 46.0, 40.5, 101.6, 40.9, 15.7, 25.9, 35.6, 25.3, 67.5, 75.2)    'values - it will be converted to %

con i valori di una query sql?
 

MarcoRome

Expert
Licensed User
Longtime User
B4X:
'** 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(9) As 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

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.
 

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.


B4X:
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(9) As 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?
 

MarcoRome

Expert
Licensed User
Longtime 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 ??
 

Nikeddy

Active Member
Licensed User
scusa :)

mi da sintax error sulla query.

e poi questo :
dbCursor = dbSQL.

non so cosa e' ...
 

MarcoRome

Expert
Licensed User
Longtime 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 ).
 

MarcoRome

Expert
Licensed User
Longtime User
scusa :)

mi da sintax error sulla query.

e poi questo :
dbCursor = dbSQL.

non so cosa e' ...

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.
 

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.

B4X:
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:

B4X:
  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(9) As 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?
 

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:
B4X:
    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:

B4X:
            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.
 
Top