求助:我将access数据库中的数据查询后赋值给 数组mydata
并让mschart.chartdata=mydata 绘图 出现这样的情况: 曲线总是回到(0,0)点,在MSCHART中表现为出现一条从曲线终点到0,0点的一条直线。而在同一程序中 当将计算所得并赋值给mydata的时候 绘图却没有这个问题
请问:这是怎么回事,应该怎么解决
我的一点看法:我想可能是数组在通过ADO查询赋值的时候是不是也像数据库中一样在数组最后会自动生成一条空记录,在这里空记录正好反映为0,0。 请大家发表看法 我采取了以下处理: 1.在给mydata赋值时当 横纵坐标都为0 时 不赋值 且退出赋值过程
2.给mydata赋值时尽量不取到最后的值,以免出现access数据库中最后一条为空的情况 问题依然存在,希望各位大侠给予帮助,谢谢!!
程序如下:
Private Sub Command5_Click()
Dim m As Integer, i As Integer
Adodc2.RecordSource = "select * from [" & BiaoMing & "] order by 编号"
Adodc2.Refresh
If Adodc2.Recordset.RecordCount > 0 Then
Adodc2.Recordset.MoveFirst
Adodc2.Recordset.MoveLast
Adodc2.Recordset.MoveFirst m = Adodc2.Recordset.RecordCount
ReDim MyData(m,2) As Single For i = 0 To m - 30 '在这里我想是否少取一些数,避免access数据库中最后一条空数据存入Mydata,可问题仍然存在
If Adodc2.Recordset.EOF Then
GoTo BeK1
Else
If Adodc2.Recordset.Fields("strain") = 0 And Adodc2.Recordset.Fields("stress") = 0 Then
GoTo BeK1
Else
MyData(i, 0) = Adodc2.Recordset.Fields("strain")
'通过断点运行,我发现最后一个i的时候这两个值都为0,因此在前面加入了条件语句,但仍是这样
MyData(i, 1) = Adodc2.Recordset.Fields("stress")
Adodc2.Recordset.MoveNext
End If
End If
Next i
BeK1: BChart.ChartData = MyData
并让mschart.chartdata=mydata 绘图 出现这样的情况: 曲线总是回到(0,0)点,在MSCHART中表现为出现一条从曲线终点到0,0点的一条直线。而在同一程序中 当将计算所得并赋值给mydata的时候 绘图却没有这个问题
请问:这是怎么回事,应该怎么解决
我的一点看法:我想可能是数组在通过ADO查询赋值的时候是不是也像数据库中一样在数组最后会自动生成一条空记录,在这里空记录正好反映为0,0。 请大家发表看法 我采取了以下处理: 1.在给mydata赋值时当 横纵坐标都为0 时 不赋值 且退出赋值过程
2.给mydata赋值时尽量不取到最后的值,以免出现access数据库中最后一条为空的情况 问题依然存在,希望各位大侠给予帮助,谢谢!!
程序如下:
Private Sub Command5_Click()
Dim m As Integer, i As Integer
Adodc2.RecordSource = "select * from [" & BiaoMing & "] order by 编号"
Adodc2.Refresh
If Adodc2.Recordset.RecordCount > 0 Then
Adodc2.Recordset.MoveFirst
Adodc2.Recordset.MoveLast
Adodc2.Recordset.MoveFirst m = Adodc2.Recordset.RecordCount
ReDim MyData(m,2) As Single For i = 0 To m - 30 '在这里我想是否少取一些数,避免access数据库中最后一条空数据存入Mydata,可问题仍然存在
If Adodc2.Recordset.EOF Then
GoTo BeK1
Else
If Adodc2.Recordset.Fields("strain") = 0 And Adodc2.Recordset.Fields("stress") = 0 Then
GoTo BeK1
Else
MyData(i, 0) = Adodc2.Recordset.Fields("strain")
'通过断点运行,我发现最后一个i的时候这两个值都为0,因此在前面加入了条件语句,但仍是这样
MyData(i, 1) = Adodc2.Recordset.Fields("stress")
Adodc2.Recordset.MoveNext
End If
End If
Next i
BeK1: BChart.ChartData = MyData
Option Explicit
'对于二维散点图来说,第一列代表了X轴坐标,第二列代表了Y轴坐标
'因此在定义二维数据时,第二维定义为0到1,第一维代表了第几点数据,可根据数据点数变化
'下面以数据点数有21点为列子
Dim MyData(360, 1) As Variant
Dim DataT(360, 1) As Variant
Private Const PI = 3.1415926
Dim intC As Integer
Dim dblStep As DoublePrivate Sub Command1_Click()
Timer1.Enabled = Not Timer1.Enabled
If Timer1.Enabled Then Command1.Caption = "停止示波器"
If Not Timer1.Enabled Then Command1.Caption = "启动示波器"
End SubPrivate Sub Form_Load()
Dim I As Integer
dblStep = 8 * PI / 360
'-----x轴坐标值-----Y轴坐标值----------
For I = 0 To 360
MyData(I, 0) = I
MyData(I, 1) = 149 * Sin(dblStep * I) + 150
Next I
For I = 0 To 360
DataT(I, 0) = I
DataT(I, 1) = 149 * Cos(dblStep * I) + 150
Next I
intC = 1
'波形图外观设置
With MSChart1
.TitleText = "速度 m/min"
' '设置图线的外观
.Plot.SeriesCollection(1).Pen.Width = 40
.Plot.SeriesCollection(1).Pen.Style = VtPenStyleSolid
' '设置XY轴
.Plot.Axis(VtChAxisIdX).ValueScale.Auto = False
.Plot.Axis(VtChAxisIdY).ValueScale.Auto = False
'// 设置最大值
.Plot.Axis(VtChAxisIdX).ValueScale.Maximum = 360
.Plot.Axis(VtChAxisIdY).ValueScale.Maximum = 300
'// 设置最小值
.Plot.Axis(VtChAxisIdY).ValueScale.Minimum = 0
.Plot.Axis(VtChAxisIdX).ValueScale.Minimum = 0
'//
.Plot.Axis(VtChAxisIdX).ValueScale.MajorDivision = 6 'X轴主要网格数量
.Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = 6 'Y轴主要网格数量
.Plot.Axis(VtChAxisIdX).ValueScale.MinorDivision = 0 'X轴次要网格数量
.Plot.Axis(VtChAxisIdY).ValueScale.MinorDivision = 0 'Y轴次要网格数量
' .Plot.Axis(VtChAxisIdX).AxisGrid.MajorPen.Style = VtPenStyleDotted
' .Plot.Axis(VtChAxisIdY).AxisGrid.MajorPen.Style = VtPenStyleDotted
MSChart1.Plot.AutoLayout = False
MSChart1.Plot.UniformAxis = False
MSChart1.chartType = VtChChartType2dXY '设置图形为二维散点图
MSChart1.ChartData = MyData '数据
End With
End SubPrivate Sub Timer1_Timer()
Dim intP As Integer
For intP = 0 To 359
MyData(intP, 1) = MyData(intP + 1, 1)
Next intP
MyData(360, 1) = 149 * Sin(intC * dblStep) + 150
intC = (intC + 1) Mod 360
MSChart1.ChartData = MyData
End Sub
现在基本可以确定是数组MyData的问题,如你程序中所应用的数组赋值方法,其实在我的程序中也有这样的赋值语句(也就是我的 预测值),采用这样的方法是没有问题的;但是当我想要将存在ACCESS数据库中的原始实验数据用曲线显示的时候,就出现了问题,这部分程序如上面所示。
我的估计是:在通过ADODC查询ACCESS数据赋值给数组MyData的过程中,存在某种我所不知道的因素,在赋值过程中将数组 如同access数据库中最后会添加一条空记录一样 在数组MyData中写入了一条空记录。
应对这一情况 我该如何处理
谢谢!
此外注意循环自0到Adodc2.Recordset.RecordCount - 1 .
将数组类型定义为 Variant 就可以了。这样没有复制的元素就是 Null,而不是 0。
动态数组不是不可解决。但是,图形的尺度比例会自动伸缩,也就是图上单位长度表示的数据区域会发生变化。比如,你的图长 10 厘米。如果你有 1000 个数据,则每厘米 100 个。但是当你的数据变为 100 个时,每厘米就是 10 个数据了。如果用 Variant 数组,就不会这样。数据少时,仅仅是波形缩短了。如果你的横轴是时间轴等,需要确定比例的话,这很重要。当然,Variant 的缺点也很显著,占用数倍的内存。
我改了MyData数组的数据类型
问题解决