View Full Version : grafici con visual basic
bracardi
11-04-2003, 08:30
Sapete come si fà a fare i grafici con visual basic? ci sono i riferimenti di excel, ma non so come fare, conoscete una guida? CIAO E GRAZIE!
C'è il componente (OCX) MsChart.
Se scegli "Aggiungi componente" (o cliccando col tasto destro del mouse sulla barra dei componenti) ti apparira' la lista da cui selezionare MsChart.
E poi è facile capirne il funzionamento.
Ciao ;)
Originally posted by "shell32"
C'è il componente (OCX) MsChart.
Se scegli "Aggiungi componente" (o cliccando col tasto destro del mouse sulla barra dei componenti) ti apparira' la lista da cui selezionare MsChart.
E poi è facile capirne il funzionamento.
Ciao ;)
shell32, vedo che te ne intendi di programmazione! :)
Ho un problema con il componente MsChart!!! :cry:
In pratica, voglio che visualizzi dei dati presi da un db. L'MSDN dice di utilizzare il controllo ADO ed ho provato prendendo il codice di esempio riportato. L'ho modificato secondo le mie esigenze (ho modificato la stringa SQL ed il percorso del db) ma IL PROMO RECORD CHE TROVA NON LO VISUALIZZA!!! :eek: :cry: :cry: :muro: :muro:
HO istallato anche il SP5 di visual studio 6, ma non è servito a nulla! :cry:
Ho fatto tantissimi tentativi, ma il risultato è sempre il solito!!! :muro: Conosci la soluzione a questo problema?
P.S: il codice è il seguente:
**********************************************
Option Explicit
' Be sure to set a reference to the Microsoft ActiveX Data
' Objects 2.0 Library.
Private rsProducts As New ADODB.Recordset
Private cn As New ADODB.Connection
Private Sub Form_Load()
Dim strQuery As String ' SQL query string.
' First change the path to a valid path for your machine.
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & _
"C:\db1.mdb" ' <-Change this path.
' Open the connection.
cn.Open
' Create a query that retrieves only four fields.
strQuery = "SELECT * FROM DATI"
' Open the recordset.
rsProducts.Open strQuery, cn, adOpenKeyset
' Set the DataSource to the recordset.
With MSChart1
.ShowLegend = True
Set .DataSource = rsProducts
End With
End Sub
******************************************
la pag. dell'msdn alla quale ho fatto riferimento è questa:
**********************************************
Data Binding the MSChart Control
The Microsoft Chart control is a data bound control, and allows you to graphically represent numeric data. Unlike other data bound controls, however, the Chart control cannot be used with the Remote Data Control, or the Data control. It can be used with the ADO Data Control, an ADO Recordset, and the Data Environment. This example will show how to open an ADO Recordset that contains the fields you want to display, and set the Chart control's DataSource property to the Recordset object. If the first field contains string data, that data will be used as the X axis labels.
The example below shows three series of data by first creating a Recordset object that has four fields; the first field contains the labels for the X axis, and remaining fields are displayed as series data.
Option Explicit
' Be sure to set a reference to the Microsoft ActiveX Data
' Objects 2.0 Library.
Private rsProducts As New ADODB.Recordset
Private cn As New ADODB.Connection
Private Sub Form_Load()
Dim strQuery As String ' SQL query string.
' First change the path to a valid path for your machine.
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & _
"C:\Program Files\Microsoft Visual Studio\VB98\nwind.mdb" ' <-Change this path.
' Open the connection.
cn.Open
' Create a query that retrieves only four fields.
strQuery = "SELECT ProductName, UnitPrice, " & _
"UnitsInStock, UnitsOnOrder FROM Products WHERE SupplierID = 1"
' Open the recordset.
rsProducts.Open strQuery, cn, adOpenKeyset
' Set the DataSource to the recordset.
With MSChart1
.ShowLegend = True
Set .DataSource = rsProducts
End With
End Sub
*************************************************************
Grazie 1000 per l'aiuto! ;)
GHz! :D
Ciao ;-)
Grazie dei complimenti.
NOn ho capito se il primo record non lo considera il controllo Ms Chart o se non te lo restituisce il Recordset.
Cioè, se tu dopo aver aperto il recordset metti la riga seguente:
MsgBox rsProducts.Fields("NomeCampo").Value
ti restituisce il primo record?
Innanzitutto grazie per l'aiuto! ;)
Dunque: ho inserito la riga di testo che mi hai scritto te, ovviamente inserendo al posto di "nomecampo" il valore del campo da visualizzare nell'msgbox. Funziona perfettamente: il valore è quello del primo record del recordret che però non è visualizzato dall'MsCHart. Com'è possibile?
E' per caso un bug dell'OCX?
Spero che tu abbia la soluzione a questo problema!
Ciao e grazie! ;)
GHz! :D
Ciao ;-)
Prova cosi'...
Apri il recordset in questo modo:
Set rst = New Recordset
rst.Open "select * from NomeTabella", cn, adOpenStatic, adLockOptimistic
With MSChart1
Set .DataSource = rst
.ShowLegend = True
End With
***************
Inoltre, apri la connessione in questo modo:
cn.Open strConnessione ' qui metterai la tua stringa di connesione
cn.CursorLocation = adUseClient 'metti il cursorlocation a client
***************
Fammi sapere ;-))
ciao shell, io ho provato così:
Option Explicit
' Be sure to set a reference to the Microsoft ActiveX Data
' Objects 2.0 Library.
Private rst As New ADODB.Recordset
Private cn As New ADODB.Connection
__________________________________________________________-
Private Sub Form_Load()
cn.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & _
"C:\db1.mdb" ' qui metterai la tua stringa di connesione
cn.CursorLocation = adUseNone 'metti il cursorlocation a client
rst.Open "select minuto from dati", cn, adOpenStatic, adLockOptimistic
' Set the DataSource to the recordset.
With MSChart1
.ShowLegend = True
Set .DataSource = rst
End With
End Sub
ho un pò modificato quello che hai scritto te....non so se ho fatto bene....fatto sta che il problema persiste!!!! :cry: :eek: :cry: :muro: :muro: :muro: :muro: :muro:
NON E' POSSIBILEEE!!!! Ma succede anche a te questo problema con MsChart? Hai la possibilità di provare?
Illuminami te ;), io brancolo nel buio! :(
Ciao e grazie infinite per l'aiuto! :)
GHz
a me non è mai successo.
Cmq perchè hai messo adUseNone?
Originally posted by "shell32"
a me non è mai successo.
Cmq perchè hai messo adUseNone?
no...ho messo anche adUseClient, ma non andava uguale...volevo vedere se era per quello!
Cmq forse è un problema del db....anche se ne dibito fortemente....ho preso il Biblio.mdb e l'ho modificato con il VisData....non ho acces 97...
Proverò su un'altro pc....che devo fa....poi ti faccio sapere! ;)
Grazie 1000!
Ciao,
Ghz! :(
Fammi sapere come andrà usando un altro Database.
Ciao :)
Ciao shell32!!!
FINALMENTE, dopo giorni di scervellamento, dopo aver girato per i server di tutto il pianeta, sono riuscito, tramite il consiglio di uno su un'altro forum, a far funzionare il controllo come si deve. :D
Era una cavolata, ma evidentemente non ci avevi pensato. :p
E' bastato fare un recordset.movefirst prima di passare i dati al grafico! :D
Ora vengono visualizzati tutti i dati presenti nel recordset correttamente! :)
Cmq come c'è bisogno di fare il movefirst per farlo funzionare? Non me lo so spiegare..... :confused:
Ciao,
GHz! :cool:
sono contento che tu abbia risolto :)
Cmq, a me funzionava senza fare il movefirst.
Spesso bisogna fare un .movelast e un .movefirst per fare una specie di refresh al recordset ed essere sicuri del popolamento.
Vabbe', l'importante è che tu abbia risolto ;-)
Ciao
Originally posted by "shell32"
sono contento che tu abbia risolto :)
Cmq, a me funzionava senza fare il movefirst.
Spesso bisogna fare un .movelast e un .movefirst per fare una specie di refresh al recordset ed essere sicuri del popolamento.
Vabbe', l'importante è che tu abbia risolto ;-)
Ciao
OK, ora è tutto chiaro! ;)
Grazie shell! ;)
Ciao,
GHz! :cool:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.