Italian grafico e sql

LucaMs

Expert
Licensed User
Longtime User
Potresti usare una query come questa:

SELECT
id,
substring(data,4,2) AS NumMese,
SUM(incasso) AS IncassiMese
FROM
incassi
GROUP BY NumMese

non riceverai il nome del mese ma il numero del mese; quindi crei una list: lstMesi.Initialize2("Gennaio", "Febbraio", ...)
e per ottenere il nome del mese: lstMesi.Get(NumMese), in cui NumMese è il mese ricevuto.
Nota che NumMese ricevuto è una stringa, che andrà convertita in un int.
 
Last edited:

Nikeddy

Active Member
Licensed User
Longtime User
mi manca questo passaggio:

lstMesi.Initialize2("Gennaio", "Febbraio", ...)
e per ottenere il nome del mese: lstMesi.Get(NumMese), in cui NumMese è il mese ricevuto.

cioe?
 

Nikeddy

Active Member
Licensed User
Longtime User
sto utilizzando, per impararmi questa libreria:
Button3_Click
Panel4.Visible=False
Panel3.Visible= False
Panel2.Visible= False
Panel1.Visible= False

Panel6.Visible= True
mbc1.LegendShapeSize = 7.0 'this line of code needs to be before mbc1.setTheLegendPositionAndForm("BELOW_CHART_CENTER", "CIRCLE")
mbc1.setTheLegendPositionAndForm("BELOW_CHART_CENTER", "CIRCLE") 'pass strings from the above comments

mbc1.TheLegendColor = Colors.yellow
mbc1.TheLegendTextSize = 20.0
mbc1.LegendTitle = ""

mbc1.ChartDescription = "TITLE : Some Arbitrary Data"
mbc1.ChartDescriptionColor = 0XFFFFA500 'ORANGE
mbc1.ChartDescriptionTextSize = 17

mbc1.ValueTextColor = Colors.Black
mbc1.ValueTextSize = 10.0

'the following 3 arrays must have the same number of entries/elements
mbc1.BarColors = Array As Int(Colors.Blue, Colors.Yellow, Colors.Green, Colors.Red, Colors.Magenta, Colors.Cyan, Colors.Blue, Colors.Yellow, Colors.Green, Colors.Red, Colors.Magenta, Colors.Cyan)
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.BarData = 12 'this number must be the same as the number of elements in the above arrays
End Sub


vorrei sapere, come posso, al posto del chartdata avere dei numeri a caso, inserire i numeri estratti e raggruppati tramite una query sql.

grazie!

sempre in ottica di metterli qui...
 

Nikeddy

Active Member
Licensed User
Longtime User
ok allora,

ho inserito un bottone, che porta a questa sub

PHP:
Sub subincassomese
   
    ExecuteRemoteQuery("SELECT id,n_macchina,Importo, substring(data,4,2) AS NumMese, SUM (incasso) AS incassimese from incassi WHERE N_Macchina = " & macchina & " GROUP BY NumMese, incassimese)
    End Sub

e mi da errore nella linea..

altra domanda, ora devo portare nel jobdone "incassimese" e' li che genero il grafico?
 

LucaMs

Expert
Licensed User
Longtime User
Vediamo di capire.
Non ho usato quella view o libreria che sia per fare i grafici.
Vedendo il codice che hai pubblicato, CharData contiene un'unica lista di valori, che nel tuo caso dovranno essere gli incassi per mese.

Puoi creare un tipo:
B4X:
Type tIncassi(ID As Int, Mese As Int, Incasso As Double) ' <--- nota che nel mio esempio su quel SQL Fiddle ho usato un int e non va bene.

Seguendo l'esempio di Erel in quel progetto "MySQL":

B4X:
' variabile process globals
Dim lstIncassi As List
lstIncassi.Inizialize

' nella jobdone
Dim Incasso As tIncassi
Incasso.Initialize
Incasso.Id = m.Get("Id")
Incasso.Mese = m.Get("NumMese")
Incasso.Incasso = m.Get("IncassiMese")
lstIncassi.Add(Incasso)

a questo punto avrai una list con gli incassi, ma "disordinata", non in ordine di mese. Per metterli in ordine:
B4X:
lstIncassi.SortType("Mese", True)

Poi crei la list dei soli incassi da passare a ChartData:
B4X:
Dim lstIncassiPerChart As List
lstIncassiPerChart.Initialize
For I = 0 to lstIncassi.Size - 1
    Dim Incasso As tIncassi = lstIncassi.Get(I)
    lstIncassiPerChart.Add(Incasso.Incasso)
Next

mbc1.ChartData = lstIncassiPerChart

Ovviamente è codice che ho scritto qui, quindi non provato.
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
P.S. dovrai fare una cosa simile anche per i nomi dei mesi che, nell'esempio che hai pubblicato, è:
mbc1.LegendText = Array As String("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
Ma dato che non è detto che i dati che riceverai conterranno tutti i totali per tutti i mesi...

Insomma, hai info a sufficienza.

Se ti serve ancora aiuto, allega il progetto e per una modica cifra (intorno ai 500€) qualcuno lo aggiusterà :D
 

Nikeddy

Active Member
Licensed User
Longtime User
Vediamo di capire.
Non ho usato quella view o libreria che sia per fare i grafici.
Vedendo il codice che hai pubblicato, CharData contiene un'unica lista di valori, che nel tuo caso dovranno essere gli incassi per mese.

Puoi creare un tipo:
B4X:
Type tIncassi(ID As Int, Mese As Int, Incasso As Double) ' <--- nota che nel mio esempio su quel SQL Fiddle ho usato un int e non va bene.

Seguendo l'esempio di Erel in quel progetto "MySQL":

B4X:
' variabile process globals
Dim lstIncassi As List
lstIncassi.Inizialize

' nella jobdone
Dim Incasso As tIncassi
Incasso.Initialize
Incasso.Id = m.Get("Id")
Incasso.Mese = m.Get("NumMese")
Incasso.Incasso = m.Get("IncassiMese")
lstIncassi.Add(Incasso)

a questo punto avrai una list con gli incassi, ma "disordinata", non in ordine di mese. Per metterli in ordine:
B4X:
lstIncassi.SortType("Mese", True)

Poi crei la list dei soli incassi da passare a ChartData:
B4X:
Dim lstIncassiPerChart As List
lstIncassiPerChart.Initialize
For I = 0 to lstIncassi.Size - 1
    Dim Incasso As tIncassi = lstIncassi.Get(I)
    lstIncassiPerChart.Add(Incasso.Incasso)
Next

mbc1.ChartData = lstIncassiPerChart

Ovviamente è codice che ho scritto qui, quindi non provato.


ti ringrazio, il problema e' l'sql piu' che altro, cioe' raggruppare per mese.
 
Top