หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 1 0 9 6 0 3

7 ธันวาคม พ.ศ.2549
242 Users On-Line.
Visitors - Page views
 8 4 0 2 7 6 0
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

การทำกราฟแสดงผลด้วย MSChart และ ออกรายงานได้ใน Active Report

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 20/11/2551 15:01:00
(อ่าน : 40501) 

โดยส่วนตัวของผมแล้วก็ไม่ได้เขียนโปรแกรมเพื่อแสดงผลในรูปแบบกราฟมานานแสนนานแล้ว สาเหตุก็เนื่องจากว่า ผมจะใช้วิธีการ Export เข้าสู่ไฟล์ Excel ไปเลย เพื่อให้กลุ่ม Users ได้นำไปประยุกต์ใช้งานต่อไป ซึ่งมันจะเกิดความยืดหยุ่นกว่ามาก อีกทั้งเป็นการลดภาระในการทำงานของตัวเราเองด้วย แต่อย่าพึ่งนึกไปน่ะครับว่า นี่เป็นการผลักภาระไปให้กับผู้ใช้งานแทนเรา กลับหาได้เป็นเช่นนั้นไม่ครับ ... พี่น้อง ฟังก่อน ... ผมยังคงต้องใช้เวลาอีกส่วนหนึ่งไปกับการถ่ายทอดความรู้ให้กับผู้ใช้ เพื่อที่ผู้ใช้งานจะได้สามารถนำข้อมูลที่มีอยู่ เอามาสร้างกราฟ สร้างงานตามภาระความรับผิดชอบของเขา (หรือ เธอ) ได้ต่างหากล่ะ แน่นอนว่าเราต้องพัฒนาให้ Users เปลี่ยนสถานะจากระดับ Beginner ให้กลายมาเป็นระดับ Advanced ... ซึ่งในการถ่ายถอดความรู้ที่มีอยู่ออกไปนั้น หากใครไม่เคยลอง ก็ไม่รู้หรอกครับ เหนื่อยเหมือนกัน ... แต่มันสนุก (และสดชื่น เมื่อได้อยู่ใกล้สาวๆ ... 55555+)

  1. Project --> Components ... เพื่อเลือก Microsoft Chart Control 6.0
  1. การออกแบบ (Design Time)
  2. พี่น้องจะได้ภาพของ MS Chart ออกมาได้ไม่เหมือนผมหรอกครับ ให้คลิ๊กทางเมาส์ขวา และ เลือก Properties (คุณสมบัติ) เพื่อปรับแต่งในขณะการออกแบบ (Design Time)
  1. ก็ลองปรับแต่งเล่นดูเอาเองแล้วกันน่ะครับ ... แต่ว่าในการใช้งานสถานะการณ์จริงๆแล้ว เราควรใช้วิธีสั่งงานแบบ Run Time (ก็เขียนโค้ดขึ้นมาบังคับนั่นแหละครับ) มันจะเกิดความยืดหยุ่นกว่ากันเป็นไหนๆ
    ไม่ว่าจะเป็น VB6/VB.NET โปรแกรมเมอร์รุ่นใหม่ๆ จึงติดกับดัก หลุมพราง ตามคำโฆษณาชวนเชื่อ เพียงเพราะคำกล่าวอ้างว่ามันใช้งานง่าย แค่จับลากๆ มาวาง ปรับแต่งแบบ Design Time ก็เป็นอันเสร็จพิธี ... เหอๆๆๆๆ
  1. Run Time
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6 (สำหรับท่านที่มี Active Report 2.0 ติดตั้งไว้แล้ว)
ดาวน์โหลด Source Code สำหรับท่านที่ไม่มี Active Report 2.0
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
เริ่มต้นกระบวนการทำงาน

Private Sub Form_Load()
    Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
    ' เปิดฐานข้อมูล ... กรุณาทำเพียงแค่ครั้งเดียวในฟอร์มหลักก็พอครับ
    Call OpenDataBase
    
    ' ให้เริ่มต้นการแสดงผลด้วย Bar Graph
    ' ไปที่เหตุการณ์ในการเลือกว่าจะกราฟแบบแท่ง หรือ เส้น นั่นแหละครับ ... พี่น้อง
    ' 0 = แบบแท่ง, 1 = แบบเส้น
    Call optGraph_Click(0)
End Sub

' โปรแกรมย่อยในการเลือกแสดงผลของกราฟ
Private Sub optGraph_Click(Index As Integer)
    Dim sRow As Integer
    
    ' Option ในการแต่งแต้มสีสัน ... ลองเล่นๆดูน่ะครับ มันมีเยอะมาก เลยยกมาให้ดูพอประมาณ
    chtGraph.Plot.SeriesCollection(1).DataPoints(-1).Brush.Style = VtBrushStyleSolid
    chtGraph.Plot.SeriesCollection(1).DataPoints(-1).Brush.Index = VtBrushPatternBoldDownDiagonal
    chtGraph.Plot.SeriesCollection(1).DataPoints(-1).Brush.FillColor.Set 255, 53, 153
    
    ' เลือกรูปแบบของการแสดงผล
    With chtGraph
        ' กำหนดรูปแบบของ Chart ให้เป็นแบบผสม (Combination)
        .chartType = VtChChartType2dCombination
        '.chartType = VtChChartType2dBar
        '.chartType = VtChChartType3dBar
        Select Case Index
            Case 0  ' แบบแท่ง
                .SeriesType = VtChSeriesType2dBar
                '.SeriesType = VtChSeriesType3dBar
            Case 1  ' แบบเส้น
                .SeriesType = VtChSeriesType2dLine
                '.SeriesType = VtChSeriesType3dBar
        End Select
    End With
    
    Set RS = New Recordset
    Statement = "SELECT * FROM tbl_HR_Evaluate ORDER BY EmployeePK "
    RS.CursorLocation = adUseClient
    RS.Open Statement, ConnDB, adOpenForwardOnly, , adCmdText

    With chtGraph
        '
        ' กำหนดจำนวนข้อมูลในแนวแกน X (นั่นคือ รหัสพนักงานแต่ละคน)
        .ColumnCount = 1
        ' กำหนดจำนวนข้อมูลในการแสดงผล หรือ ก็คือค่าคะแนนของพนักงานแต่ละคน เรียงกันไป
        ' ในฐานข้อมูลตัวอย่างจะมี 20 รายการ
        .RowCount = RS.RecordCount
        ' วนลูปเพื่อแสดงผลกราฟ (คะแนนของพนักงานแต่ละคน)
        For sRow = 1 To RS.RecordCount
            ' เริ่มแสดงจำนวนแต่ละรายการ (คะแนนของพนักงานแต่ละคน)
            .Row = sRow
            .RowLabel = RS("EmployeeCode")
            .Data = RS("Point")
            RS.MoveNext
        Next
    End With
    '
    RS.Close: Set RS = Nothing
End Sub
การทำกราฟออกรายงานด้วย Active Report 2.0 (Data Dynamics)
  1. จะเห็นได้ว่าสมรรถนะของ Active Report สามารถเพิ่มเติม ActiveX ของค่ายอื่นๆเข้าไปได้อย่างไม่ยากเย็น นี่แหละคือมนต์เสน่ห์ Product ของค่าย Data Dynamics ... ซึ่งสามารถตอบสนองต่อการใช้งานของผมได้เป็นอย่างดีทีเดียว ... ผมรัก AR จังเลย ... 55555+
    ขอโม้อีกหน่อย ... โค้ดตัวอย่างที่พี่น้องได้เห็นต่อไปนี้ ... ไม่มีที่ใดในโลกน่ะครับ ผมต้องใช้เวลาลูบๆคลำๆตั้งนานกว่าจะเจอ ... แต่เอามาเปิดเผยให้พี่น้องได้ศึกษากันอย่างง่ายๆ และ ฟรีๆ ... ก็กรุณาคลิ๊กโฆษณาให้บ้างซิครับ ... หากผมน้อยใจเดี๋ยวหัวล้าน เอ๊ย เดี๋ยวไม่ให้โค้ดอีกต่อไปซ่ะหรอก ... แหง่มๆๆๆๆๆ ... แค่คำว่าขอบคุณนี่ยังหายากเลย ... คนเรา
กระบวนการทำงาน

' ===========================================
' โค้ดนี้จะอยู่ที่ฟอร์มหลัก frmGraphDB
' โดยการคลิ๊กเลือกจากเมนู ...
Private Sub mnuGraphReport_Click()
    ' เปิดฟอร์มรายงาน
    frmGraphReport.Show vbModal
End Sub
' ===========================================

' ===========================================
' โค้ดนี้จะอยู่ที่ฟอร์มรอง frmGraphReport
Sub ReportGraph()
    Set RS = New Recordset
    Statement = "SELECT * FROM tbl_HR_Evaluate ORDER BY EmployeePK "
    RS.CursorLocation = adUseClient
    RS.Open Statement, ConnDB, adOpenForwardOnly, , adCmdText
    ' ส่งรายงานไปที่ Active Report
    Set rptPrint = New arGraphReport
    Set Me.ARViewerGraph.object = rptPrint
    ' ผูกตารางข้อมูลที่ได้จากการ Query ให้กับรายงาน
    rptPrint.dcRptData.Recordset = RS
End Sub
' ===========================================

' ===========================================
' โค้ดนี้จะอยู่ที่ Active Report Designer
Private Sub ActiveReport_Initialize()
    PageSettings.Orientation = ddOPortrait  ' กำหนดแนวตั้ง
    PageSettings.PaperSize = 9  ' กระดาษ A4
    PageSettings.LeftMargin = 300
    PageSettings.RightMargin = 300
    PageSettings.BottomMargin = 100
    PageSettings.TopMargin = 100
End Sub

' โค้ดนี้จะคล้ายๆกันกับฟอร์มหลัก (frmGraphDB)
' หลักการก็ง่ายๆ ... ผูกตาราง RS เข้ากับ ADO ที่อยู่ใน AR Designer (dcRptData)
' จากนั้นมันก็จุดเทียนเวียนวน จนหมดข้อมูล ... นั่นเอง ... อิอิอิอิอิ ง่ายจังวุ้ย ...
Private Sub Detail_Format()
    Dim sRow   As Integer
    With chtGraph
        
        ' เลือกรูปแบบของการแสดงผล
        ' เราไม่ต้องส่งค่าตัวแปรแบบ Global ข้ามฟอร์มมาครับ
        ' แต่ให้อ้างถึงฟอร์ม ตามด้วย Object หรือ Control ที่ต้องการมาเลย ... อิอิอิอิอิ
        ' นั่นคือ frmGraphDB.optGraph(0).Value
        If frmGraphDB.optGraph(0).Value Then
            .SeriesType = VtChSeriesType2dBar
        Else
            .SeriesType = VtChSeriesType2dLine
        End If
        
        .chartType = VtChChartType2dCombination
        .ColumnCount = 1
        .RowCount = RS.RecordCount
        ' วนลูปเพื่อแสดงผลกราฟ
        For sRow = 1 To RS.RecordCount
            ' เริ่มแสดงจำนวนแต่ละรายการ
            .Row = sRow
            .RowLabel = RS("EmployeeCode")
            .Data = RS("Point")
            RS.MoveNext
        Next
    End With
    '
    RS.Close: Set RS = Nothing
End Sub
' ===========================================
หลายต่อหลายคนสอบถามผมมาเยอะนักว่า ทำไมผมถึงไม่ยอมไปสอน หรือ ถ่ายทอดความรู้ให้กับน้องๆตามสถาบันการศึกษา เหตุผลดังนี้ คือ ... ผมมันคนไม่ค่อยจะได้ทำอะไรผิดๆมากนัก จึงเป็น "ครู" ไม่ได้ ... อ้าวววว ... ก็โบราณท่านว่าไว้ไงครับ ... ผิดเป็นครู ....ไงล่ะ ... ผมก็เลยเป็นครูไม่ได้ ... 55555+
จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560