Italian grafico e sql

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:
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?
 
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...
 
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?
 
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:
Code:
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":

Code:
' 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:
Code:
lstIncassi.SortType("Mese", True)

Poi crei la list dei soli incassi da passare a ChartData:
Code:
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:
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
 
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:
Code:
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":

Code:
' 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:
Code:
lstIncassi.SortType("Mese", True)

Poi crei la list dei soli incassi da passare a ChartData:
Code:
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.
 
Back
Top