Italian Raggruppare i dati e visualizzarli su una lista

Nikeddy

Active Member
Licensed User
salve a tutti, sto imparando il funzionamento di b4a, e sto tirando fuori i dati da un db e vorrei crearci un grafico.

io ho una tabella cosi :

Data Incasso numero_macchina
1/1/2016 30€ 101
1/2/2016 20€ 102
5/2/2016 10€ 101
ecc

vorrei che vengano raggruppati per mese i dati del db e visualizzarli su una lista

su sql potrei fare cosi
SELECT MONTHNAME( "DATA" ) AS "mese", SUM( "incasso" ) AS "totale" FROM "DATI" WHERE "Numero_macchina" = 'variabile_nmacchina' AND "INCASSO" = True GROUP BY MONTH( "DATA" )

come faccio con b4a?
 

LucaMs

Expert
Licensed User
E come fai con b4a? Usi SQL. Esegui la query (ovviamente bisogna vedere quale sia il DBMS e dove si trovi) e carichi una CustomListView.
 

Nikeddy

Active Member
Licensed User
ti spiego, io per 1 solo valore faccio cosi

B4X:
Sub ListView1_ItemClick (Position As Int, Value As Object)
    Dim tl As TwoLines
    tl = Value
    lblCountry.Text = tl.First
    park = lblCountry.Text
    lblPopulation.Text = "Calling server..."
    ExecuteRemoteQuery("SELECT tot_euro FROM Elenco WHERE n_macchina='" & tl.First & "'", COUNTRY_POPULATION)
End Sub

e poi

B4X:
Case COUNTRY_POPULATION
                Dim l As List
                Dim c As Int
                Dim t As Int
                l = parser.NextArray
                If l.Size = 0 Then
                    lblPopulation.Text = "N/A"
                Else
                    For i = 0 To l.Size - 1
                    Dim m As Map
                    m = l.Get(i)
                    c = NumberFormat2(m.Get("tot_euro"),0, 0, 0, False)
                    t = t +c
                    Next
                End If
                lblPopulation.Text = t / 301
 

LucaMs

Expert
Licensed User
La tua map (m) conterrà tutti i campi della query (non ho controllato se sia esatta) per cui farai m.Get("DATA"), m.Get(incasso), m.get("Numero_macchina")
 

Nikeddy

Active Member
Licensed User
asp, io creo una select cosi:

B4X:
Sub Fetchincassomese
ExecuteRemoteQuery("SELECT MONTHNAME( "DATA" ) As "mese", SUM("incasso_contanti") As "totale" FROM "Elenco" WHERE "Numero_macchina" = " & ricordamacchina & " And "INCASSO" = True GROUP BY MONTH( "DATA" ),containcasso)
End Sub

poi ho sia Mese che Totale come variabili o no?


e poi con

totale = m.Get("totale")
mese = m.get("mese")

giusto?
 

Nikeddy

Active Member
Licensed User
Sub Fetchincassomese
ExecuteRemoteQuery("SELECT MONTHNAME( "DATA" ) As "mese", SUM("incasso_contanti") As "totale" FROM "Elenco" WHERE "Numero_macchina" = " & ricordamacchina & " And "INCASSO" = True GROUP BY MONTH( "DATA" ),containcasso)End Sub

no mi da syntax error
 

zakker

Member
Licensed User
Sub Fetchincassomese
ExecuteRemoteQuery("SELECT MONTHNAME( "DATA" ) As "mese", SUM("incasso_contanti") As "totale" FROM "Elenco" WHERE "Numero_macchina" = " & ricordamacchina & " And "INCASSO" = True GROUP BY MONTH( "DATA" ),containcasso)End Sub

no mi da syntax error

scusa eh...ma hai postato 1000 domande, comprese anche delle query.... e perchè in questa usi gli apici per i nomi dei campi ? Boh...
 

LucaMs

Expert
Licensed User
scusa eh...ma hai postato 1000 domande, comprese anche delle query.... e perchè in questa usi gli apici per i nomi dei campi ? Boh...
Le virgolette devi usarle solo nel prelevare i dati dalla map, questo sì.
 

Nikeddy

Active Member
Licensed User
be.. e' un forum e chiedo aiuto, sto imparando molto molto e vi ringrazio.

scusa perché no le virgolette? e dove devo toglierle? io ho sempre fatto cosi.
 

LucaMs

Expert
Licensed User
SELECT MONTHNAME( "DATA" ) AS mese, SUM( "incasso" ) AS totale FROM DATI WHERE Numero_macchina = variabile_nmacchina AND INCASSO = True GROUP BY mese
 

LordZenzo

Well-Known Member
Licensed User
in verità dipende dal tipo di dato, se numerico no virgolette, se letterale si virgolete
in oltre sarebbe piu giusto cosi
SELECT MONTHNAME( "DATA" ) AS `mese`, SUM( "incasso" ) AS `totale` FROM DATI WHERE `Numero_macchina` = variabile_nmacchina AND `INCASSO` = True GROUP BY mese
 

LucaMs

Expert
Licensed User
Sono nomi di campi, non valori di campi (contenuto). Solo variabile_nmacchina (che non so cosa sia, se è una sua variabile dovrà costruire meglio la query) e True sono valori e stiamo parlando di b4a, non di PHP
 

MarcoRome

Expert
Licensed User
In questo esempio passo come variabili la data, incasso_contanti, ricordamacchina

B4X:
Log($"SELECT MONTHNAME( ${data} ) As mese, SUM(${incasso_contanti}) As totale FROM Elenco WHERE Numero_macchina = '${ricordamacchina}' And INCASSO = True GROUP BY MONTH( ${data} )"$)
    ExecuteRemoteQuery($"SELECT MONTHNAME( ${data} ) As mese, SUM(${incasso_contanti}) As totale FROM Elenco WHERE Numero_macchina = '${ricordamacchina}' And INCASSO = True GROUP BY MONTH( ${data} )"$,"containcasso")

Metti un bel breakpoint sulla riga ExcuteRemoteQuery, vedrai nella finestra LOG l'istruzione precedente appunto il log...e vedrai se la query è corretta
Nell'esempio e stato considerato che i campi data e incassocontanti sono dei campo del database, il campo ricordamacchina è un valore tipo:

Select * from macchine where Numero_macchina = 'la mitica cinquecento'
 

LucaMs

Expert
Licensed User
In questo esempio passo come variabili la data, incasso_contanti, ricordamacchina

B4X:
Log($"SELECT MONTHNAME( ${data} ) As mese, SUM(${incasso_contanti}) As totale FROM Elenco WHERE Numero_macchina = '${ricordamacchina}' And INCASSO = True GROUP BY MONTH( ${data} )"$)
    ExecuteRemoteQuery($"SELECT MONTHNAME( ${data} ) As mese, SUM(${incasso_contanti}) As totale FROM Elenco WHERE Numero_macchina = '${ricordamacchina}' And INCASSO = True GROUP BY MONTH( ${data} )"$,"containcasso")

Metti un bel breakpoint sulla riga ExcuteRemoteQuery, vedrai nella finestra LOG l'istruzione precedente appunto il log...e vedrai se la query è corretta
Nell'esempio e stato considerato che i campi data e incassocontanti sono dei campo del database, il campo ricordamacchina è un valore tipo:

E se avessi messo il testo in una variabile stringa, tipo Query = $..., fatto il log di questa ed eseguita questa? Che poi è sempre la soluzione migliore, conoscere la query che vai ad eseguire.
 

MarcoRome

Expert
Licensed User
E se avessi messo il testo in una variabile stringa, tipo Query = $..., fatto il log di questa ed eseguita questa? Che poi è sempre la soluzione migliore, conoscere la query che vai ad eseguire.
Bene anche questa. E' esattamente la stessa cosa. L'importante è capire cosa sto eseguendo
 

Nikeddy

Active Member
Licensed User
allora ci sono riuscito, funziona perfettamente, ora ho una array con gennaio e incasso febbraio e incasso

come inserisco l'elenco in una lista? grazie.
 

MarcoRome

Expert
Licensed User
Allora per aggiungere i valori ad una lista puoi fare cosi:

B4X:
Dim test_lista As List
    test_lista.Initialize 'inizializza la lista ora è = 0
    test_lista.AddAll(Array As String("Pluto","Paperino","...."))
    For Each Valore As String In test_lista
        Log(Valore)
    Next
 
Top