本人是VB的初学者,想弄个图表于在网上找到了以下代码,感觉很详细,但跟我的需要还有一定的差别,我的程序里用DTPicker输了时间,时间格式为2007-7-21,ACCESS数据中,一天可能有很多数据,也可能边连续好几天没有数据,我想图表统计出一年中12月份中数据。麻烦高手给帮个忙
日期 单位 人员
2003-11-3 T 张儒林
2003-11-3 T 张儒林
2003-8-18 Q 赵吉发
2003-2-18 Q 王树昆
2003-8-18 Q 赵吉发
2003-8-21 Q 孙绪清
2003-8-21 Q 陈宝超
Private Sub btnTuBiao_Click()
' 定义变量
Dim i As Integer
Dim rs As Recordset
Dim ws As Workspace
Dim db As Database
Dim strDBName As String ' 数据库文件相对路径' 设置数据库文件的相对路径
strDBName = App.Path
If Right$(strDBName, 1) <> "\" Then strDBName = strDBName & "\"
strDBName = strDBName & "db\dbPinDian.mdb"' 打开数据库.
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(strDBName)
''Set db = OpenDatabase(strDBName)
Set rs = db.OpenRecordset("select 日期,单位,人员 from tbl_PinDian order by 日期", dbOpenSnapshot)
''rs.MoveLast
''rs.MoveFirst
If rs.RecordCount = 0 Then
MsgBox "数据库表中没有数据,请在数据库中输入数据!", vbCritical, "提示"
Exit Sub
End IfmscPinDian.Visible = True ' 设置图表不可见With mscPinDian
.TitleText = "日期单位人员图表" ' 设置图表标题
.ColumnCount = 2 ' 设置数据网格的列数 为 2 如 单位 和 人员
.RowCount = rs.RecordCount ' 设置数据网格的行数 既是上面查询所得的记录数
For i = 1 To rs.RecordCount
.Row = i
.RowLabel = rs("日期")
.Column = 1 ' 设置数据网格的第一个活动列
.ColumnLabel = "单位" ' 设置该活动列的标签
.Data = rs("单位") ' .Data = rs.Fields("单位")
.Column = 2 ' 设置数据网格的第二个活动列
.ColumnLabel = "人员" '设置该活动列的标签
.Data = rs("人员")
rs.MoveNext
Next i
'// 设置是否自动缩放
'.Plot.Axis(V单位AxisIdY).ValueScale.Auto = False
'// 设置最大值
.Plot.Axis(V单位AxisIdY).ValueScale.Maximum = 50
'// 设置最小值
.Plot.Axis(V单位AxisIdY).ValueScale.Minimum = 0
'// 设置主要间隔
.Plot.Axis(V单位AxisIdY).ValueScale.MajorDivision = 5
'// 设置次要间隔
.Plot.Axis(V单位AxisIdY).ValueScale.MinorDivision = 1
'// 标记每个点的值
For i = 1 To .Plot.SeriesCollection.Count
.Plot.SeriesCollection(i).DataPoints(-1).DataPointLabel.LocationType = V单位LabelLocationTypeAbovePoint
Next
End With
rs.CloseEnd Sub麻烦各位高手了,如果你有更好的办法请给出代码和说明本人是初学者谢谢了。
日期 单位 人员
2003-11-3 T 张儒林
2003-11-3 T 张儒林
2003-8-18 Q 赵吉发
2003-2-18 Q 王树昆
2003-8-18 Q 赵吉发
2003-8-21 Q 孙绪清
2003-8-21 Q 陈宝超
Private Sub btnTuBiao_Click()
' 定义变量
Dim i As Integer
Dim rs As Recordset
Dim ws As Workspace
Dim db As Database
Dim strDBName As String ' 数据库文件相对路径' 设置数据库文件的相对路径
strDBName = App.Path
If Right$(strDBName, 1) <> "\" Then strDBName = strDBName & "\"
strDBName = strDBName & "db\dbPinDian.mdb"' 打开数据库.
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(strDBName)
''Set db = OpenDatabase(strDBName)
Set rs = db.OpenRecordset("select 日期,单位,人员 from tbl_PinDian order by 日期", dbOpenSnapshot)
''rs.MoveLast
''rs.MoveFirst
If rs.RecordCount = 0 Then
MsgBox "数据库表中没有数据,请在数据库中输入数据!", vbCritical, "提示"
Exit Sub
End IfmscPinDian.Visible = True ' 设置图表不可见With mscPinDian
.TitleText = "日期单位人员图表" ' 设置图表标题
.ColumnCount = 2 ' 设置数据网格的列数 为 2 如 单位 和 人员
.RowCount = rs.RecordCount ' 设置数据网格的行数 既是上面查询所得的记录数
For i = 1 To rs.RecordCount
.Row = i
.RowLabel = rs("日期")
.Column = 1 ' 设置数据网格的第一个活动列
.ColumnLabel = "单位" ' 设置该活动列的标签
.Data = rs("单位") ' .Data = rs.Fields("单位")
.Column = 2 ' 设置数据网格的第二个活动列
.ColumnLabel = "人员" '设置该活动列的标签
.Data = rs("人员")
rs.MoveNext
Next i
'// 设置是否自动缩放
'.Plot.Axis(V单位AxisIdY).ValueScale.Auto = False
'// 设置最大值
.Plot.Axis(V单位AxisIdY).ValueScale.Maximum = 50
'// 设置最小值
.Plot.Axis(V单位AxisIdY).ValueScale.Minimum = 0
'// 设置主要间隔
.Plot.Axis(V单位AxisIdY).ValueScale.MajorDivision = 5
'// 设置次要间隔
.Plot.Axis(V单位AxisIdY).ValueScale.MinorDivision = 1
'// 标记每个点的值
For i = 1 To .Plot.SeriesCollection.Count
.Plot.SeriesCollection(i).DataPoints(-1).DataPointLabel.LocationType = V单位LabelLocationTypeAbovePoint
Next
End With
rs.CloseEnd Sub麻烦各位高手了,如果你有更好的办法请给出代码和说明本人是初学者谢谢了。
1.你查询的时候 select isnull(count(*),0),company,date from tb where date between 30/11/2007 and 31/12/2007 group by date,company order by date (没准有小错误,你查一下)然后rs取出,然后就开始循环了。我们假定你的单位是两个
With mscPinDian
.TitleText = "日期单位人员图表" ' 设置图表标题
.ColumnCount = 2 ' 设置数据网格的列数 为 2 如 单位 和 人员
.RowCount = rs.RecordCount ' 设置数据网格的行数 既是上面查询所得的记录数
For i = 1 To rs.RecordCount
.Row = i
.RowLabel = rs("日期")
.Column = 1 ' 设置数据网格的第一个活动列
.ColumnLabel = "单位" ' 设置该活动列的标签
.Data = rs("单位") ' .Data = rs.Fields("单位")
.Column = 2 ' 设置数据网格的第二个活动列
.ColumnLabel = "人员" '设置该活动列的标签
.Data = rs("人员")
rs.MoveNext
Next i然后就是showlengent 就好了。你试试看吧
XY轴数据用现成的(Y轴是我定义的变量)X轴 Y轴折线1(我的数值) Y轴折线2
1月 100 80
2月 60 11
。 。 。
。 。 。
。 。
12月 80 60这样应该很简单了吧?我只是不知道具体怎么设置麻烦高手了。
顺便我还想问一下饼图怎么设置啊?
With c2
.RowCount = 12
.ColumnCount = 2
For i = 1 To 12
.Row = i
.Column = 1
.Data = i
.Column = 2
.Data = i * 2
.RowLabel = i
Next i
.ShowLegend = True
End With
这个是个小例子,套用到你的程序,首先你找出12个月的值,然后循环赋值就好了
不难,你琢磨琢磨
chart type=pie
chart type=line这个我还是知道的,
基本的设置我也会一些,就是不会具体的怎么赋值X轴不是1到12而是1月到12月,Y轴上的值不是循环的而是我从数据库中统计出来的具体值。
也许你说的已经很明白了,但我是初学者希望你多指教了,最好能加上一些注示。
也许你说的已经很明白了,但我是初学者希望你多指教了,最好能加上一些注示。
With c2
.RowCount = 12
.ColumnCount = 2
For i = 1 To 12
.Row = i
.Column = 1
.Data = i
.Column = 2
.Data = i * 2
.RowLabel = i & "月" ‘这样不就是1月-12月了么
Next i
.ShowLegend = True
End With你知道怎么从数据库里面取值吧
.data=rs.fields(0)不就可以了么
你不循环,一个一个写也行
但我还是想一个一个的输入数据,数据我会统计的,我有12个月当然也有12个力气了,你帮我举两三个例子就可以了。谢谢。
With c2是什么意思啊,谢谢了。
你用recordset取数据么?c2是我做实验时候的控件名称,with你看看msdn就知道了c2.row=1
c2.column=1
c2.data= ..
c2.row=2
c2.column=1
c2.data=..这样行么
Adodc1.Refresh
n = Adodc1.Recordset!t1我再试试,谢谢高手了。
所以你的rowcount=2, columncount=12
Dim i As Integer
With c
.RowCount = 2
.ColumnCount = 12
For i = 1 To 12
.Row = 1
.Column = i
.column=i & "月"
.Data = i
.Row = 2
.Data = i * 2
Next i
.row=1
.rowlabel="department1"
.row=2
.rowlabel="department2"
.ShowLegend = True
End With这个就是你两个单位的12个月例子了,这样你的图例里面就会显示了