Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB6] Grafico a Torta dinamico

    Dovrei creare dei grafici a torta dinamicamente prendendo i dati da una tabella di un DB ACCESS. La tabella contiene i seguenti campi [ID_Tipo_immobile, ID_Tipo_Edificio,ID_Località]
    Ognuno di questi campi può assumere diversi valori, es:
    ID_Tipo_Immobile potrà essera uguale a 1,2,3,4,ecc.. ad ogniuno di questi valori corrisponderà una voce nella rispettiva tabella, 1=Monolocale, 2=Bilocale,ecc...

    Ho letto che il controllo che si deve utilizzare in questi casi è MSChart.
    Non avendo però documentazione sul controllo sto andando un po' a spanne. Risultato 0--

    Mi servirebbe un IMUPUT per la realizzare una procedura che popola il grafico.

    Grazie
    MM

  2. #2
    Purtroppo in rete si trova ben poco ma questo tutorial storico puo' aiutarti parecchio

    http://www.gr-fx.com/toolshed/99_vbchart/vbchart2.htm

  3. #3

    Pagina irragiungibile

    Grazie per il tuo intervento ma sei sicuro che il link sia corretto?

    IE mi restituisce "Impossibile trovare la pagina"


    MM

  4. #4

  5. #5
    Ti ringrazio di nuvo raffaeu.

    Il primo sito lo stavo già esaminando mentre il secondo mi chiede la registrazione.

    Tramite le indicazioni di www.vbitalia.it/static/mschart.htm
    qualcosa ho fatto ma sono ancora lontano dalla soluzione .

    MM

  6. #6

    cambio di direzione...

    MI è venuta un'idea ...

    Vista la difficoltà dell'utilizzo del controllo MSChart ho deciso di cambiare tecnica. Volevo estrarre i dati dal DB e passarli ad un folgio EXECEL.
    Da Excel l'utente potra fare Stampe,Grafici, spedrli via mail, ecc..

    Si possono estrarre idati con delle query del tipo:
    codice:
     SQL_Tipo_Immobile = "SELECT Tbl_Richieste.ID_Tipo_Immobile,tipo_immobile, COUNT(*)" & _
                            " FROM  Tbl_Richieste,Tbl_Tipo_Immobile" & _
                            " WHERE Tbl_Richieste.ID_Tipo_Immobile=Tbl_Tipo_Immobile.ID_Tipo_Immobile" & _
                            " GROUP BY Tbl_Richieste.ID_Tipo_Immobile,tipo_immobile"


    Ma come passo passare il risultato della query al foglio di calcolo?

  7. #7
    Beh hai due strade :

    A-Usi ADO e Jet 4 per connetterti ad un file excel già presente e fai un update di dati.

    B-Usi il COM di excel, trovi molto in rete a riguardo, e ti crei il tuo excel come vuoi tu, magari fai una funzione che riceve by Val il recordset carico e popola il file excel


  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Guarda il controllo MsChart è piuttosto semplice
    Questo è un codice di esempio per creare un chart mettendoci i dati dentro.
    Ti crei un array di dimensione (i, j) dove i è il numero massimo di colonne che vuoi avere e j è il numero dei campi diminuito di 1.
    Poi con un codice tipo questo lo popoli ed è fatta
    Questo codice di esempio, serve per popolare un grafico con 2 campi e max 5 colonne:
    codice:
    Dim arr(5, 1) As Variant
    
    Private Sub PopolaGrafico()
    Data1.Recordset.MoveFirst
    MsgBox Data1.Recordset.RecordCount
    For i = 0 To Data1.Recordset.RecordCount - 1
    arr(i, 0) = Data1.Recordset("Val1")
    arr(i, 1) = Data1.Recordset("Val2")
    Data1.Recordset.MoveNext
    Next i
    MSChart1.ChartData = arr
    End Sub
    Secondo me è molto più comodo ed elegante che creare un foglio di Excel. Eventualmente a fianco puoi mettere pure una Combobox per cambiare dinamicamente la visualizzazione (a barre, a torta, ecc)

  9. #9

    ringraziamenti

    Grazie mille a tutti per i vostri interventi. Posto qui sotto la soluzione funzionante che ho adottato:

    codice:
    Private Sub Form_Load()
    Dim SQL As String
    Dim Tot_Richieste As Integer
    Dim Rs As New ADODB.Recordset
    Dim CloneRs As New ADODB.Recordset
        
        ApriDB
        SQL = "SELECT COUNT(*) AS Conta" & _
               " FROM Tbl_Richieste"
        Rs.Open SQL, Cn, adOpenKeyset, adLockOptimistic
        Tot_Richieste = Rs("Conta")
        
        If Not Rs.EOF And Not Rs.BOF Then
            Me.Label1.Caption = "Numero totale di richieste pervenute fino ad oggi: " & Tot_Richieste
            Me.Label1.AutoSize = True
        End If
        Rs.Close
        
        'Tipo Immobile
        SQL = "SELECT tipo_immobile, COUNT(*) AS Conta" & _
              " FROM  Tbl_Richieste,Tbl_Tipo_Immobile" & _
              " WHERE Tbl_Richieste.ID_Tipo_Immobile=Tbl_Tipo_Immobile.ID_Tipo_Immobile" & _
              " GROUP BY tipo_immobile"
        
        Rs.Open SQL, Cn, adOpenKeyset, adLockOptimistic
        Set CloneRs = Rs.Clone
        If Not Rs.EOF And Not Rs.BOF Then
             With MSChart1
                Set .DataSource = Rs
                .FootnoteText = "Tipologia Immobile:"
                .Width = 9000
                .Height = 5700
                .Top = 1100
                .Left = 480
             End With
        End If
        Me.txt_Statistiche_Tipo_Immobile.Top = 6840
        Me.txt_Statistiche_Tipo_Immobile = Calcola_Percentuali(CloneRs, Tot_Richieste)
        Set CloneRs = Nothing
        Rs.Close
        
        'Tipo Edificio
        SQL = "SELECT tipo_edificio, COUNT(*) AS Conta" & _
              " FROM   Tbl_Richieste,Tbl_Tipo_Edificio" & _
              " WHERE Tbl_Richieste.ID_Tipo_Edificio =Tbl_Tipo_Edificio.ID_Tipo_Edificio" & _
              " GROUP BY tipo_edificio"
              
        Rs.Open SQL, Cn, adOpenKeyset, adLockOptimistic
        Set CloneRs = Rs.Clone
        If Not Rs.EOF And Not Rs.BOF Then
             With MSChart2
                Set .DataSource = Rs
                .FootnoteText = "Tipologia Edificio"
                .Width = 9000
                .Height = 5700
                .Top = 1100
                .Left = 480
             End With
        End If
        Me.txt_Statistiche_Tipo_Edificio.Top = 6840
        Me.txt_Statistiche_Tipo_Edificio = Calcola_Percentuali(CloneRs, Tot_Richieste)
        Set CloneRs = Nothing
        Rs.Close
        
        'Stato Immobile
        SQL = "SELECT stato_immobile, COUNT(*)AS Conta" & _
              " FROM  Tbl_Richieste, Tbl_Stato_Immobile" & _
              " WHERE Tbl_Richieste.ID_Stato_Immobile=Tbl_Stato_Immobile.ID_Stato_Immobile" & _
              " GROUP BY stato_immobile"
              
        Rs.Open SQL, Cn, adOpenKeyset, adLockOptimistic
        Set CloneRs = Rs.Clone
        If Not Rs.EOF And Not Rs.BOF Then
             With MSChart3
                Set .DataSource = Rs
                .FootnoteText = "Stato Immobile: "
                .Width = 9000
                .Height = 5700
                .Top = 1100
                .Left = 480
             End With
        End If
        Me.txt_Statistiche_stato_immobile.Top = 6840
        Me.txt_Statistiche_stato_immobile = Calcola_Percentuali(CloneRs, Tot_Richieste)
        Set CloneRs = Nothing
        Rs.Close
        
        'Localita
        SQL = "SELECT Comune, COUNT(*) AS Conta" & _
              " FROM Tbl_Richieste, Tbl_Localita" & _
              " WHERE Tbl_Richieste.ID_Localita=Tbl_Localita.ID_Localita" & _
              " GROUP BY Comune"
              
        Rs.Open SQL, Cn, adOpenKeyset, adLockOptimistic
        Set CloneRs = Rs.Clone
        If Not Rs.EOF And Not Rs.BOF Then
             With MSChart4
                Set .DataSource = Rs
                .FootnoteText = "Località: "
                .Width = 9000
                .Height = 5700
                .Top = 1100
                .Left = 480
             End With
        End If
        Me.txt_Statistiche_localita.Top = 6840
        Me.txt_Statistiche_localita = Calcola_Percentuali(CloneRs, Tot_Richieste)
        Set CloneRs = Nothing
        Rs.Close
        
        Set Rs = Nothing
        ChiudiDB
    
    End Sub
    
    
    Private Sub op_grafico_Click(Index As Integer)
        Select Case Index
            Case 0
                Me.MSChart1.Visible = True
                Me.MSChart2.Visible = False
                Me.MSChart3.Visible = False
                Me.MSChart4.Visible = False
                Me.txt_Statistiche_Tipo_Immobile.Visible = True
                Me.txt_Statistiche_Tipo_Edificio.Visible = False
                Me.txt_Statistiche_stato_immobile.Visible = False
                Me.txt_Statistiche_localita.Visible = False
            Case 1
                Me.MSChart1.Visible = False
                Me.MSChart2.Visible = True
                Me.MSChart3.Visible = False
                Me.MSChart4.Visible = False
                Me.txt_Statistiche_Tipo_Immobile.Visible = False
                Me.txt_Statistiche_Tipo_Edificio.Visible = True
                Me.txt_Statistiche_stato_immobile.Visible = False
                Me.txt_Statistiche_localita.Visible = False
            Case 2
                Me.MSChart1.Visible = False
                Me.MSChart2.Visible = False
                Me.MSChart3.Visible = True
                Me.MSChart4.Visible = False
                Me.txt_Statistiche_Tipo_Immobile.Visible = False
                Me.txt_Statistiche_Tipo_Edificio.Visible = False
                Me.txt_Statistiche_stato_immobile.Visible = True
                Me.txt_Statistiche_localita.Visible = False
            Case 3
                Me.MSChart1.Visible = False
                Me.MSChart2.Visible = False
                Me.MSChart3.Visible = False
                Me.MSChart4.Visible = True
                Me.txt_Statistiche_Tipo_Immobile.Visible = False
                Me.txt_Statistiche_Tipo_Edificio.Visible = False
                Me.txt_Statistiche_stato_immobile.Visible = False
                Me.txt_Statistiche_localita.Visible = True
        End Select
    End Sub
    
    Function Calcola_Percentuali(ByVal objRS As ADODB.Recordset, Tot_Richieste) As String
    Dim VALORE
    Dim Nome As String
    
    Dim str_temp As String
        If Not objRS.EOF And Not objRS.BOF Then
            Do While Not objRS.EOF
                VALORE = FormatPercent(objRS("Conta") / Tot_Richieste)
                Nome = objRS(0)
                str_tmp = str_tmp & Nome & "=" & VALORE & ";" & vbCrLf
                objRS.MoveNext
            Loop
        End If
        Calcola_Percentuali = str_tmp
    End Function

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.