domenica 14 ottobre 2012

Grafico a torta con MSChart in vb6

Supponiamo di avere dei valori e degli elementi in una tabella di un database (in questo esempio un db MSAccess) e portare in un grafico a torta le percentuali di ciascun elemento.
L'oggetto utilizzato è il MSChart di Visual Basic aggiunto al progetto dal componente Microsoft Chart Control 6.0
Di seguito l'esempio:

Private Sub CmdLoad_Click()
 Dim adodbRec As ADODB.Recordset
 Dim adodbConn As ADODB.Connection
 Dim sql As String
 Dim dbTest As String
 Dim intRows
  
 dbTest = "Provider = Microsoft.Jet.OleDB.4.0;Data source =
 C:\test\dbtest.mdb;Persist Security Info=False"
    
    Set adodbConn = New ADODB.Connection
    adodbConn.Open (pathConnection)
    adodbConn.CursorLocation = adUseClient 'tipo di cursore
    On Error GoTo 0 'Resume normal error processing
    Set adodbRec = New ADODB.Recordset
    sql = "select valore, descr_costo from tab_costi"
    
    adodbRec.Open sql, adodbConn, adOpenDynamic, adLockOptimistic
    intRows = adodbRec.RecordCount

    MSChart1.ColumnCount = intRows

    With MSChart1
             .chartType = VtChChartType2dPie
               
         For i = 1 To adodbRec.RecordCount
             .Row = 1
             .Column = i
             .Data = adodbRec.Fields.Item(0).Value
             adodbRec.MoveNext
         Next
        
         With .DataGrid
           adodbRec.MoveFirst
             .RowLabelCount = 1
             .ColumnCount = intRows
             .RowCount = 1
             For i = 1 To .ColumnCount
                 If IsNull(adodbRec.Fields.Item(1).Value) Then
                    .ColumnLabel(i, 1) = "---"
                 Else
                    .ColumnLabel(i, 1) = adodbRec.Fields.Item(1).Value
                 End If
                 adodbRec.MoveNext
             Next i
         End With
        
         For i = 1 To .Plot.SeriesCollection.Count
             With .Plot.SeriesCollection(i).DataPoints(-1).DataPointLabel
                .LocationType = VtChLabelLocationTypeOutside
                .Component = VtChLabelComponentPercent
                .PercentFormat = "0%"
                .VtFont.Size = 10
             End With
         Next i
    
     End With
     adodbRec.Close
End Sub

Queste le figure del grafico a torta e della tabella: