Private Sub Command1_Click()
On Error Resume Next
Dim data() As String
data() = Split(Text1.Text, ",")
For j = 0 To UBound(data())
   If data(j) = "" Then
    MsgBox "请输入您要分析的ID号"
     Exit Sub
   End If
  txtSQL = "select * from 监控温度表 where  id = " & data(j)    '查询语句
  Set rs = ESQL(txtSQL)     '执行查询语句
  If rs.RecordCount > 0 Then     '当记录大于零时
     rs.MoveFirst     '移到第一条记录
     nums = rs.RecordCount     '给nums赋值
    ReDim arrValues(1 To nums, 1 To 3)     '定义动态数组
    For i = 1 To nums     '给数组赋值
        arrValues(i, 1) = " "  '& Format(rs1!时间, "hh:mm")
        arrValues(i, 2) = val(rs.Fields("温度"))
        arrValues(i, 3) = val(Rnd * 20 + 15) '我添加了条随机显示数据的曲线
        rs.MoveNext
    Next i
         MSChart1.ChartData = arrValues
  End If
Next j
End Sub
比如现在我 在 text1.text 中输入id号为1,2,3,4
则在 mschart中显示出id=(1,2,3,4)4条曲线
横坐标为时间轴 纵坐标为 温度
现在我输入的总是得到的是最后 一个ID号的曲线(我输入1,2,3则只能得到id=3的曲线)

解决方案 »

  1.   

    MSChart1.ChartData = arrValues 
    应该是这里的问题 我感觉 每次循环运行到这里的时候 都是把上一次的给覆盖掉了 所以才导致了最后显示的结果是最后一个ID号的曲线你可以试一试每次循环的时候都添加一个对象 比如MSChart1.Add 之类的属性(我没用过这个控件 所以我也不知道有没有这个属性) 使它每次运行循环的时候都会新加一个对象用来显示曲线而不是反复的覆盖上一个!
      

  2.   

    ReDim arrValues(1 To nums, 1 To 3)     '定义动态数组
    这里有问题,每次循环都重定义了,你做了多次循环
    改查询吧 txtSQL = "select * from 监控温度表 where id in( " & data(j) &") order by id"
    不用For j = 0 To UBound(data())
      

  3.   

    我也 想到了肯定是被覆盖了
    可是我现在迷茫啊
    不知道是改循环还是改MSChart1.ChartData = arrValues 
    各位多给意见啊
      

  4.   

    MSChart1.ChartData = arrValues
    把这句放最后

    ......
    End If
    Next j
    MSChart1.ChartData = arrValues
    end sub 
      

  5.   

    我们同是跟mschart较劲的人啊我给你一个比较麻烦,但是可控性强的办法就是数组,然后循环给mschar赋值你是不是用xy的那个模式,想显示温度,时间上的那个点?如果是这样的话,那么二维数组就够了,一个x,一个y
            arrValues(i, 1) = " "  '& Format(rs1!时间, "hh:mm")
            arrValues(i, 2) = val(rs.Fields("温度"))
    这样足够让mschart显示横纵坐标交点了用1,2两条曲线为例
    你再循环之前,首先设定rowcount=nums(有可能你每次取出来的recourdcount不同,那么就要每次调整一下,让rowcount保持那个最大的nums然后在Next j之前画mschart这里要说明的是columncount=2*你要取的曲线条数在我用的这个例子里面就是2*2=4下面我们来画mschart    With chart       For i = 1 To ubound(arrValues)
           .DataGrid.SetData i, j, arrValues(i, 1), 0
           .DataGrid.SetData i, j+1, arrValues(i, 2), 0
           Next i
        end withnext j这样就不会覆盖到前一条了
      

  6.   

    fishmans(金脚指) 你的方法不行我早试过了
    clear_zero(清晰) 不太明白你的意思上面是我的数据库 分别对应的是 id  温度 湿度 时间
    我现在想要在text1.text输入1,2,3这mschart中显示ID=1,2,3..的温度曲线
      

  7.   

    首先我需要告诉你,我的方法有代码。可以发给你,我做了试验的然后再继续解释一下你的曲线是温度随时间变化的吧,那么你得mschart type 是不是设置到了xy那种形式?
    你现在x轴温度,y轴时间这样的吧
    你要三条曲线,我们假定mschart的name =c ,arr()是数据存储(二维)
    我来做个假设,你1,2,3取出来的rs.recordcount一样,不一样的话你需要调整RowCount,到你最大的recordcount
    c.RowCount=0
    .ColumnCount = 6 (3*2)
    for j=1 to 3
      sql="...."
      rs.open....
      redim (1 to 2, 1 to rs.recordcount)
      c.RowCount= rs.recordcount
      for i=1 to  rs.recordcount
        arr(1,i)=温度
        arr(2,i)=时间
        rs.movenext
      next i
      rs.close
      'populate chart
       For i = 1 To ubound(arr,2)
           .DataGrid.SetData i, j, arrValues(1,i), 0
           .DataGrid.SetData i, j+1, arrValues(2,i), 0
       Next i
    next j
    这样够清楚么
      

  8.   

    Private Sub Command1_Click()
    On Error Resume Next
    Dim date1 As String
    '''''''''''''''Dim Data() As String
    Data() = Split(Text1.Text, ",")
    For j = 0 To UBound(Data())
       If Data(j) = "" Then
        MsgBox "请输入您要分析的ID号"
         Exit Sub
       End If
            txtSQL = "select * from 监控温度表 where  id = " & Data(j)    '查询语句
               Set rs = ESQL(txtSQL)     '执行查询语句
      If rs.RecordCount > 0 Then
         date1 = rs!id
         MSChart1.Visible = True
       Else
           MsgBox "没有你要分析的数据!!!"
           Exit Sub
      End If
       If rs.EOF Then
       MsgBox "无查询数据!请选择合适的时间段查询!"
       Exit Sub
       End If  If rs.RecordCount > 0 Then     '当记录大于零时
         rs.MoveFirst     '移到第一条记录
         nums = rs.RecordCount     '给nums赋值
        ReDim arrValues(1 To nums, 1 To 2)     '定义动态数组
        For i = 1 To nums     '给数组赋值
            arrValues(i, 1) = " "  '& Format(rs1!时间, "hh:mm")
            arrValues(i, 2) = val(rs!温度)
            'arrValues(i, 3) = val(rs!湿度)
            'arrValues(i, 3) = val(Rnd * 7 + 18)
            'arrValues(i, 4) = val(Rnd * 12 + 15)
            rs.MoveNext
         Next i
            With MSChart1
            .RowCount = 250
            .ColumnCount = Len(Text1.Text) \ 2 + 1
             .ColumnLabel = Left(Text1.Text, 1) & "号温度"
                         For i = 1 To UBound(arrValues)
               .DataGrid.SetData i, j, arrValues(i, 1), 0
               .DataGrid.SetData i, j + 1, arrValues(i, 2), 0
              Next i        End With
           
             
          
             With MSChart1.Plot.Axis(VtChAxisIdX).CategoryScale
                 .Auto = False
                 .DivisionsPerTick = nums
            End With
         End If
    End Sub
    完整的代码
      

  9.   

    非常感谢clear_zero(清晰) 和楼上的
    开始结贴