PDA

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!

shell32
11-04-2003, 21:57
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 ;)

GHz
14-04-2003, 01:15
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

shell32
14-04-2003, 18:30
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?

GHz
14-04-2003, 21:01
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

shell32
14-04-2003, 21:22
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 ;-))

GHz
14-04-2003, 22:49
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

shell32
15-04-2003, 11:45
a me non è mai successo.
Cmq perchè hai messo adUseNone?

GHz
15-04-2003, 12:56
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! :(

shell32
15-04-2003, 13:31
Fammi sapere come andrà usando un altro Database.
Ciao :)

GHz
18-04-2003, 22:49
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:

shell32
19-04-2003, 11:16
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

GHz
19-04-2003, 17:27
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: