Home
Search
 
What's New
Index
Books
Links
Q & A
Newsletter
Banners
 
Feedback
Tip Jar
 
C# Helper...
 
XML RSS Feed
Follow VBHelper on Twitter
 
 
MSDN Visual Basic Community
 
 
 
 
 
TitleLoad data from a database and graph it
Keywordsgraph, data, database
CategoriesGraphics
 
Use Data Access Objects (DAO) to load the data. Use scale properties to set a convenient scale and draw the data.
 
' Graph the age data.
Private Sub GraphAges()
Dim student As Integer
Dim lft As Single
Dim i As Integer
Dim the_age As Integer
Dim txt As String
Dim font_hgt As Single

    ' Make a convenient scale.
    lft = -NumStudents / 10
    picAge.Scale (lft, 21)-(NumStudents + 0.25, -4)
    font_hgt = 1.2 * picAge.TextHeight("X")
    
    ' Draw the axes.
    picAge.Line (0, 20)-(0, 0)
    picAge.Line -(NumStudents, 0)
    For i = 1 To 19
        picAge.Line (-lft / 6, i)-Step(lft / 3, 0)
    Next i

    For student = 1 To NumStudents
        ' Draw the student's histogram.
        the_age = Students(student).Age
        FillColor = QBColor(student Mod 8)
        picAge.Line (student - 1, 0)- _
            (student, the_age), _
            QBColor(student Mod 8), BF

        picAge.Line (student - 1, 0)- _
            (student, the_age), _
            vbBlack, B
        
        ' Draw the student's age.
        txt = Format$(the_age)
        picAge.CurrentX = student - 0.5 - _
            picAge.TextWidth(txt) / 2
        picAge.CurrentY = the_age - font_hgt
        picAge.Print txt
    
        ' Draw the student's name.
        txt = Students(student).FirstName
        picAge.CurrentX = student - 0.5 - _
            picAge.TextWidth(txt) / 2
        picAge.CurrentY = font_hgt * 0.5
        picAge.Print txt
    
        txt = Students(student).LastName
        picAge.CurrentX = student - 0.5 - _
            picAge.TextWidth(txt) / 2
        picAge.CurrentY = font_hgt * 1.5
        picAge.Print txt
    Next student
End Sub

' Graph the test score data.
Private Sub GraphScores()
Dim test As Integer
Dim lft As Single
Dim i As Integer
Dim the_score As Integer
Dim txt As String
Dim font_hgt As Single
Dim student As Integer

    ' Make a convenient scale.
    lft = -NUM_TESTS / 10
    picScore.Scale (1 + lft, 110)-(NUM_TESTS + 0.25, -10)
    font_hgt = picScore.TextHeight("X")

    ' Draw the axes.
    picScore.Line (1, 100)-(1, 0)
    picScore.Line -(NUM_TESTS, 0)
    For i = 10 To 100 Step 10
        picScore.Line (1 - lft / 6, i)-Step(lft / 3, 0)
        txt = Format$(i)
        picScore.CurrentX = 1 + lft / 4 - _
            picScore.TextWidth(txt)
        picScore.CurrentY = i - font_hgt / 2
        picScore.Print txt
    Next i
    font_hgt = font_hgt * 1.2
    picScore.DrawStyle = vbDot
    For test = 1 To NUM_TESTS
        picScore.Line (test, 0)-(test, 100)
        txt = Format$(test)
        picScore.CurrentX = test - picScore.TextWidth(txt) _
            / 2
        picScore.CurrentY = font_hgt / 3
        picScore.Print txt
    Next test
    picScore.DrawStyle = vbSolid
    
    ' Graph the scores.
    For student = 1 To NumStudents
        ' Use a different color.
        picScore.ForeColor = QBColor(student Mod 8)

        the_score = Students(student).Score(1)
        picScore.CurrentX = 1
        picScore.CurrentY = the_score
        For test = 2 To NUM_TESTS
            the_score = Students(student).Score(test)
            picScore.Line -(test, the_score)
        Next test
    Next student
End Sub

' Load the data from the database.
Private Sub LoadData()
Dim ws As Workspace
Dim db As Database
Dim student_rs As Recordset
Dim score_rs As Recordset
Dim query As String

    ' Use the default workspace.
    Set ws = DBEngine.Workspaces(0)

    ' Open the database.
    Set db = ws.OpenDatabase(App.Path & "\graphdb.mdb")

    ' Create a Recordset to read name,
    ' ID, and age information.
    query = _
        "SELECT FirstName, LastName, " & _
        "StudentID, Age FROM Students " & _
        "ORDER BY StudentID"
    Set student_rs = _
        db.OpenRecordset(query, dbOpenSnapshot)

    ' Read the name, ID, and age information.
    With student_rs
        Do While Not .EOF
            NumStudents = NumStudents + 1
            ReDim Preserve Students(1 To NumStudents)
            Students(NumStudents).LastName = !LastName
            Students(NumStudents).FirstName = !FirstName
            Students(NumStudents).Age = !Age
            Students(NumStudents).StudentID = !StudentID
        
            #If DEBUG_MSGS = 1 Then
                Debug.Print _
                    Students(NumStudents).FirstName & " " & _
                        _
                    Students(NumStudents).LastName & ", " & _
                        "Age: " & _
                    Students(NumStudents).Age & ", ID: " & _
                    Students(NumStudents).StudentID
            #End If
        
            ' Get this student's test scores.
            query = _
                "SELECT TestNumber, Score FROM " & _
                "TestScores WHERE StudentID=" & _
                !StudentID & _
                " ORDER BY TestNumber"
            Set score_rs = _
                db.OpenRecordset(query, dbOpenSnapshot)
            Do While Not score_rs.EOF
                Students(NumStudents).Score( _
                    score_rs!TestNumber) = _
                    score_rs!Score
                    
                #If DEBUG_MSGS = 1 Then
                    Debug.Print _
                        "    Score(" & _
                        Format$(score_rs!TestNumber) & ") = " & _
                            "" & _
                        Students(NumStudents).Score( _
                        score_rs!TestNumber)
                #End If
                
                score_rs.MoveNext
            Loop
            score_rs.Close

            ' Go get the next student record.
            .MoveNext
        Loop
    End With
    student_rs.Close
    
    ' Close the workspace.
    ws.Close
End Sub

Private Sub Form_Load()
    ' Load the data.
    LoadData

    ' Graph the age data.
    GraphAges
    
    ' Graph the test score data.
    GraphScores
End Sub
 
 
Copyright © 1997-2010 Rocky Mountain Computer Consulting, Inc.   All rights reserved.
  Updated