none
在VB6.0中呼叫OWC元件該如何設定繪製區間 RRS feed

  • 問題

  •  

    承蒙諸位大大的教導

    目前小弟在vb6.0中導入OWC 元件用來繪製溫度曲線圖

    目前我設定X軸為時間軸,Y軸為溫度值

    假設我的資料為每小時紀錄一次 目前共有9/5~9/8的資料

    若只想讀取9/6的紀錄,那我要如何設定X軸的時間抓取區間呢??

     

    2008年9月9日 上午 04:01

解答

  • 結合你之前問的一起舉例:

    Code Snippet

     

    Private Sub Form_Load()
       ChartSpace1.AllowPropertyToolbox = True
       Set chConstants = ChartSpace1.Constants
      
       Set oss = CreateObject("OWC11.Spreadsheet")
       Set owcSheet = oss.Worksheets(1)
       With owcSheet
          .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Temp\ObsData.mdb;"
          .CommandText = "SELECT DataTime, DataValue FROM WindPower WHERE SN=406 ORDER BY DataTime; "
       End With
      
       ChartSpace1.DataSource = oss
      
       nCount = owcSheet.UsedRange.Rows.Count
       Set xyChart = ChartSpace1.Charts.Add
      
       With xyChart
         .Type = chConstants.chChartTypeScatterLine
         .SetData chConstants.chDimXValues, chConstants.chDataBound, "a1:a" & nCount
         .SetData chConstants.chDimYValues, chConstants.chDataBound, "b1:b" & nCount
        
         With .Axes(1)
             .NumberFormat = "mm/dd-hh"
             With .Scaling
                .Minimum = Int(CDbl(owcSheet.Cells(2, 1)))
                .Maximum = Int(CDbl(owcSheet.Cells(nCount, 1))) + 1
             End With
         End With
       End With
    End Sub

     

    DataTime 為 Date 型別,為資料時間,包含時分秒

    DataValue 為 Double 型別,為值

    2008年9月11日 下午 02:12

所有回覆

  • 1. 資料來源最好限定為 WHERE (時間欄位 >=#2008/9/6# AND 時間欄位 < #2008/9/7#)

     

    2. 前面給你的範例網頁,下面有個繪圖鈕,按下去可以展示。

    例如這段是設定 X 軸的:

    Code Snippet
    .Axes(1).HasTickLabels = False
    .Axes(1).MajorTickMarks = chConst.chTickMarkCross
    .Axes(1).MinorTickMarks = chConst.chTickMarkInside
    .Axes(1).NumberFormat = "dd-hh"
    .Axes(1).Scaling.Minimum = 37150
    .Axes(1).Scaling.Maximum = 37154
    .Axes(1).MajorUnit = 0.5
    .Axes(1).MinorUnit = 1/24
    .Axes(1).CrossesAtValue = 0
    .Axes(1).CrossingAxis = .Axes(0)

     

     

    你可以用下面這兩行取代上面的日期設定:

    Code Snippet

    .Axes(1).Scaling.Minimum = CDbl(#2008/9/6#)
    .Axes(1).Scaling.Maximum = CDbl(#2008/9/7#)

     

     

    2008年9月9日 下午 03:23
  • 感謝大大的提醒

    關於那各範例的網頁

    我之前在爬文時就有去檢視過了。。只是對於他的一些語法敘述還不是很了解

    譬如~~針對X軸的設定而言

    .Axes 不知他是建構再哪一各元件下面的屬性,所以會有異常產生

    不過這部分我有把網頁的原始碼copy下來先解讀看看 璉大的語法是如何使用

     

     

     

    2008年9月10日 上午 02:51
  • Axes 是 Chart 的屬性請參查線上手冊:

     

    Axes 屬性:

    mkAngryMSITStore:C:\Program%20Files\Common%20Files\Microsoft%20Shared\Web%20Components\11\1028\OWCVBA11.CHM::/html/ocproAxes.htm

     

    ChAxes 集合:

    mkAngryMSITStore:C:\Program%20Files\Common%20Files\Microsoft%20Shared\Web%20Components\11\1028\OWCVBA11.CHM::/html/ocobjChAxes.htm

     

    2008年9月10日 上午 07:22
  • 照著線上手冊我大致上可以設定軸的刻度了

    但是我資料卻無法匯入

    資料設定連線如下

    原本是直接連接到 e:\db1.mdb

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb;Persist Security Info=False;Jet OLEDBBig Smileatabase Password=""

    使用資料來自

    SELECT *  FROM REPORT1 where  DATE BETWEEN  #" & Format(DTPicke11.Value, "yyyy/MM/dd HH:mm") & " # And # " & Format(DTPicker2.Value, "yyyy/MM/dd  HH:mm") & "  #

     

    這樣會變成無法連接至報表中

     

    請問大大這方面的聯接要如何做呢??

    2008年9月11日 上午 06:02
  • ...

    你的連線字串哪來的?

    Persist Security Info=False 這個在 Access 中沒有。

    可參考:

    http://www.connectionstrings.com/?carrier=access

     

    你的查詢字串中,DATE 是保留字,要用中括號包起來 [DATE]

     

    還有,錯誤訊息是重要的判斷依據,請提供才能知道發生啥事。

    2008年9月11日 上午 06:11
  • 連線字串我是複製於 OWC元件 資料選項下的

    資料細節的連接字串

    使用資料來自 我是勾選命令字串或SQL

    並在欄位中KEY入指令

     

    異常訊息為

    * 您選取的資料來源可能是空的,可能連結到無效的連結,或您沒有足夠的安全性權限,無法存取資料。

    若是使用資料來自 勾選成員 資料表。。。

    或是改為SELECT * FROM REPORT1

    則資料輸出正常

     

    資料表內容:

    欄位名稱   NOW_TIME  VALUE

             2008/9/6 10:30                  30

                         

          

    2008年9月11日 上午 07:09
  • 你如果直接在網頁上測試,基於網頁安全限制,可能會被擋,在 VB6 下就不會有類似錯誤。

     

    注意:有些情況本機網頁 (file:///) 的權限比 實際網頁 (http:// ) 低,因為很多惡意程式都是這樣,所以後來安全性限制就變成本機反而限制比較多

     

    2008年9月11日 上午 07:44
  • 我現在都是在VB中測試

    連線的語法應該沒問題,因為它可連接上資料庫

    現在要突破的應該是查詢的語法了

    2008年9月11日 上午 08:43
  • 先前給你網址下方有:

    Code Snippet

    其他範例:Office XP Web Component Toolpack

     

     

    這是微軟提供的範例,大概 1x 個,資料庫是連 SQL Server ,若是你有 SQL Server 的話,可以抓下來看看。
    2008年9月11日 上午 09:06
  • 請問一下在哪各屬性下我可以去宣告X,Y軸的來源呢

    譬如 資料表中 P_DATE ----->X軸

            P_VAL-------->Y軸

    這樣應該如何宣告呢??

    2008年9月11日 上午 11:07
  • 結合你之前問的一起舉例:

    Code Snippet

     

    Private Sub Form_Load()
       ChartSpace1.AllowPropertyToolbox = True
       Set chConstants = ChartSpace1.Constants
      
       Set oss = CreateObject("OWC11.Spreadsheet")
       Set owcSheet = oss.Worksheets(1)
       With owcSheet
          .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Temp\ObsData.mdb;"
          .CommandText = "SELECT DataTime, DataValue FROM WindPower WHERE SN=406 ORDER BY DataTime; "
       End With
      
       ChartSpace1.DataSource = oss
      
       nCount = owcSheet.UsedRange.Rows.Count
       Set xyChart = ChartSpace1.Charts.Add
      
       With xyChart
         .Type = chConstants.chChartTypeScatterLine
         .SetData chConstants.chDimXValues, chConstants.chDataBound, "a1:a" & nCount
         .SetData chConstants.chDimYValues, chConstants.chDataBound, "b1:b" & nCount
        
         With .Axes(1)
             .NumberFormat = "mm/dd-hh"
             With .Scaling
                .Minimum = Int(CDbl(owcSheet.Cells(2, 1)))
                .Maximum = Int(CDbl(owcSheet.Cells(nCount, 1))) + 1
             End With
         End With
       End With
    End Sub

     

    DataTime 為 Date 型別,為資料時間,包含時分秒

    DataValue 為 Double 型別,為值

    2008年9月11日 下午 02:12
  • 感謝大大這麼用心的敎我,讓我一個人摸索的挫折感降低了不少

    以下是拿大大的範例修改測試,有幾個疑問想請教大大一下

    Code Snippet

    Private Sub Command2_Click( )

    ChartSpace1.AllowPropertyToolbox = True
       Set chConstants = ChartSpace1.Constants
      
       Set oss = CreateObject("OWC11.Spreadsheet")
       Set owcSheet = oss.Worksheets(1)
       With owcSheet
          .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb;"
          .CommandText = "SELECT * from REPORT1; "
       End With
      
       ChartSpace1.DataSource = oss
      
       nCount = owcSheet.UsedRange.Rows.Count
       Set xyChart = ChartSpace1.Charts.Add
      
       With xyChart
         .Type = chConstants.chChartTypeScatterLine
         .SetData chConstants.chDimXValues, chConstants.chDataBound, "a1:a" & nCount
         .SetData chConstants.chDimYValues, chConstants.chDataBound, "b1:b" & nCount
        
         With .Axes(1)
             .NumberFormat = "mm/dd-hh"
             With .Scaling
                .Minimum = Int(CDbl(owcSheet.Cells(2, 1)))
                .Maximum = Int(CDbl(owcSheet.Cells(nCount+1, 1))) + 1
             End With
         End With
       End With
    End Sub

     

     

    這段程式執行後,圖表中並沒資料產生,但X軸的刻度變為12/30 00 ,12/30 04, 12/30 09....12/31 00

    Y軸無資料產出,刻度變為0,0.2,0.4....1.2

    .SetData chConstants.chDimXValues, chConstants.chDataBound, "a1:a" & nCount

    這是宣告 X軸的資料來源ㄇ

    .Minimum = Int(CDbl(owcSheet.Cells(2, 1))) 中CDbl是各函數ㄇ??我不知他的來源是何處

     

    真是不好意思,一直要大大幫我釐清觀念上的問題

     

     

    2008年9月12日 上午 03:13
  •  

    Code Snippet

    Dim serSeries1
        Dim segSegment1
        Dim chConstants

        Set chConstants = ChartSpace1.Constants

        ChartSpace1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\db2.mdb;"
             ChartSpace1.CommandText = "SELECT * from REPORT1 where P_TIME  BETWEEN  #" & Format(DTPicker1.Value, "yyyy/MM/dd HH:mm") & " # And # " & Format(DTPicker2.Value, "yyyy/MM/dd HH:mm") & "  # "
            
        ChartSpace1.SetData chConstants.chDimCategories, chConstants.chDataBound, "P_TIME"
        ChartSpace1.SetData chConstants.chDimValues, chConstants.chDataBound, "P_VAL"

            .
        Set serSeries1 = ChartSpace1.Charts(0).SeriesCollection(0)

            segSegment1.HasAutoDivisions = True

        .
        segSegment1.Begin.ValueType = chConstants.chBoundaryValuePercent
        segSegment1.End.ValueType = chConstants.chBoundaryValuePercent

        segSegment1.Begin.Value = 0
        segSegment1.End.Value = 1

        segSegment1.Begin.Interior.Color = "White"
        segSegment1.End.Interior.Color = "Blue"

     

     

    請問大大

    這部份是我參考線上手冊所寫的,可以呼叫出圖形,而且功能也OK就是可以依據我的時間區段去顯示

    但是這各是格式圖,請問該如何將它變成XY的折線圖啊

    2008年9月12日 上午 04:08
  • 上一篇回給你的範例就是 XY 折線圖。

    2008年9月12日 上午 05:15
  • 呵~~我知道啊!!只是應用上會出現問題,所以我依照的資料去製作了由setdata去製作

    目前功能可達我所要的區段查詢

    至於折線圖是我自己的盲點!!

    我在元件屬性直接設就OK了!!不必執著於用語法來去宣告

    感謝大大您這幾天來的幫助,待我完成後在POST上來~感謝

     

    2008年9月12日 上午 05:30
  • 目前小弟已可在程式中呼叫出圖形

    但是關於X軸刻度的設置仍有些疑問

     

    Code Snippet

     Dim CUNUM As String
         Dim chConstants
         CUNUM = Combo1
         

        Set chConstants = ChartSpace1.Constants

       
         ChartSpace1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\db2.mdb;"
         If Combo1.Text > " " Then
         
         ChartSpace1.CommandText = " SELECT * FROM REPORT1 where  P_TIME BETWEEN #" & Format(DTPicker1.Value, "yyyy/MM/d HH:mm") & "# And #" & Format(DTPicker2.Value, "yyyy/MM/d HH:mm") & "# And P_TANK = '" & Format(CUNUM) & "'"
          Else
         ChartSpace1.CommandText = " SELECT * FROM REPORT1  where  P_TIME BETWEEN  #" & Format(DTPicker1.Value, "yyyy/MM/d HH:mm") & " # And # " & Format(DTPicker2.Value, "yyyy/MM/d HH:mm") & "  # "
          End If
        
       
       
        ChartSpace1.SetData chConstants.chDimCategories, chConstants.chDataBound, "P_TIME"
        ChartSpace1.SetData chConstants.chDimValues, chConstants.chDataBound, "P_VAL"
      
       With ChartSpace1.Charts(0)
       .Axes(0).MajorUnit = 400
       .Axes(0).MinorUnit = 1
       .Axes(1).MajorUnit = 10
       .Axes(1).MinorUnit = 1

      .Axes(1).NumberFormat = "dd-hh" ' 無法設置改變X軸刻度
       .Axes(1).Scaling.Minimum = CDbl("# Format(DTPicker1.Value) #") 、資料型態不符
       .Axes(1).Scaling.Maximum = CDbl("# Format(DTPicker1.Value) #")
      End With

     

    我試著如此改,想變成大大給的範例網頁一般,下方直接為時間區塊,而不是詳列每一筆資料的時間

    這樣改的話反而是Y軸變成30-00(下限) 03-00(上限 ) Axes(0)不是指Y軸嗎。為何是他產生變化呢

     

    2008年9月22日 上午 04:24
  • 類別座標不能用 Format 設為時間,應該用類別標籤直接輸出,XY 圖或其它圖的數值軸才能用 Format

     

    請直接利用常數存取,例如:

    Axes(chAxisPositionBottom)

     

    OWC 的軸座標會因為變更而造成順序變化,此外類別圖跟 XY 圖順序不同,所以若用索引值時,須一次完成。

     

    或使用參照來處理,例如:

    Code Snippet

    Set yAxis = Axes(0)

    Set xAxis = Axes(1)

     

    With yAxis

    ...

    End With

     

    With xAxis

    ...

    End With

     

     

     

    2008年9月22日 上午 06:34
  • 語法1

    Code Snippet

    Dim CUNUM As String
         Dim chConstants
       Dim axValueAxis
    Dim axCategoryAxis
     
       Set YAxis = ChartSpace1.Charts(0).Axes(0)

       Set XAxis = ChartSpace1.Charts(0).Axes(1)

     

        Set chConstants = ChartSpace1.Constants
     

       
         ChartSpace1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\db2.mdb;"
             
         ChartSpace1.CommandText = " SELECT * FROM REPORT1 where  P_TIME BETWEEN #" & Format(DTPicker1.Value, "yyyy/MM/d HH:mm") & "# And #" & Format(DTPicker2.Value, "yyyy/MM/d HH:mm") & "# "
         ChartSpace1.SetData chConstants.chDimCategories, chConstants.chDataBound, "P_TIME"
         ChartSpace1.SetData chConstants.chDimValues, chConstants.chDataBound, "P_VAL"

       With YAxis
       .MajorUnit = 400
       .MinorUnit = 1
       End With
       With XAxis
       .NumberFormat = "DD-HH"
       .MajorUnit = 0.5
       .MinorUnit = 1 / 24
       .Scaling.Minimum = CDbl(#9/6/2008#)
       .Scaling.Maximum = CDbl(#7/9/2008#)
      End With

     

    x軸顯示的是每一筆資料的日期時間
    Y軸則變成"DD-HH"得時間刻度顯示~~真的是令人不解!!
     
    2008年9月22日 上午 08:19
  • 前一篇回覆已說明

    Code Snippet

    OWC 的軸座標會因為變更而造成順序變化,此外類別圖跟 XY 圖順序不同,所以若用索引值時,須一次完成。

     

     

    所以:

    類別圖時類別軸是 Axes(0) ,Y 軸是 Axes(1)

    XY 圖時,Y 軸是 Axes(0) ,X 軸是 Axes(1)

     

    你的程式碼是類別圖

    2008年9月22日 下午 12:19
  • 這樣是否代表我X-Y兩者的設定互換就好

    但如此依來變成

     .NumberFormat = "dd-hh" 他是無效的參數

     

    2008年9月23日 上午 02:57
  • ...

    兩篇回覆都要引用前面已經回的內容,你是都不看嗎?

     

    Code Snippet

    類別座標不能用 Format 設為時間應該用類別標籤直接輸出,XY 圖或其它圖的數值軸才能用 Format

     

     

    你在 SetData 指定為類別座標了,當然不能用。

    2008年9月23日 上午 04:01
  • 是我自己的盲點。。。

    現在我已知道該如何去做了

    是我依照範例試出後就在那裡轉不出來

    以至於套用大大之前給的範例產生錯誤

    目前已知道如何去製作圖形了

    多謝大大的幫忙!!

     

    關於大大之前給我的範例

    會再我每按一次就增加一個圖形

    我只想顯示一個

    所以我的程式變成這樣:

    Code Snippet

    ChartSpace1.AllowPropertyToolbox = True
       Set chConstants = ChartSpace1.Constants
      
       Set oss = CreateObject("OWC11.Spreadsheet")
       Set owcSheet = oss.Worksheets(1)
       With owcSheet
          .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\db2.mdb;"
          .CommandText = "SELECT P_Time, P_VAL FROM REPORT1 where  P_TIME BETWEEN #" & Format(DTPicker1.Value, "yyyy/MM/d HH:mm") & "# And #" & Format(DTPicker2.Value, "yyyy/MM/d HH:mm") & "#  ORDER BY P_Time; "
       End With
      
       ChartSpace1.DataSource = oss
     
       nCount = owcSheet.UsedRange.Rows.Count
        
       ChartSpace1.Charts(0).Type = chChartTypeScatterLine  '無效的參數,不能這樣指定嗎??
       ChartSpace1.Charts(0).SetData chConstants.chDimXValues, chConstants.chDataBound, "a1:a" & nCount
       ChartSpace1.Charts(0).SetData chConstants.chDimYValues, chConstants.chDataBound, "b1:b" & nCount
      
       With ChartSpace1.Charts(0)
        
         With .Axes(1)
             .NumberFormat = "mm/dd-hh"
             With .Scaling
                .Minimum = DTPicker1.Value
                .Maximum = DTPicker2.Value
             End With
         End With
       End With
    End Sub

     

     

    2008年9月23日 上午 05:32