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的曲线)
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的曲线)
应该是这里的问题 我感觉 每次循环运行到这里的时候 都是把上一次的给覆盖掉了 所以才导致了最后显示的结果是最后一个ID号的曲线你可以试一试每次循环的时候都添加一个对象 比如MSChart1.Add 之类的属性(我没用过这个控件 所以我也不知道有没有这个属性) 使它每次运行循环的时候都会新加一个对象用来显示曲线而不是反复的覆盖上一个!
这里有问题,每次循环都重定义了,你做了多次循环
改查询吧 txtSQL = "select * from 监控温度表 where id in( " & data(j) &") order by id"
不用For j = 0 To UBound(data())
可是我现在迷茫啊
不知道是改循环还是改MSChart1.ChartData = arrValues
各位多给意见啊
把这句放最后
即
......
End If
Next j
MSChart1.ChartData = arrValues
end sub
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这样就不会覆盖到前一条了
clear_zero(清晰) 不太明白你的意思上面是我的数据库 分别对应的是 id 温度 湿度 时间
我现在想要在text1.text输入1,2,3这mschart中显示ID=1,2,3..的温度曲线
你现在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
这样够清楚么
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
完整的代码
开始结贴