ks表:
(科目:语文、数学、物理、化学、政治、英语)(从6科中,任选4样参加考试,每人选4科,必须是4科)
考号 姓名 科目 成绩
1 A 数学 90
1 A 语文 60
1 A 政治 90
1 A 化学 60
2 B 化学 90
2 B 物理 60
2 B 数学 90
2 B 语文 60
做成如下格式的报表:
考号 姓名 数学 语文 政治 化学
1 A 90 60 90 60
考号 姓名 化学 物理 数学 语文
1 A 90 60 90 60
不要这种格式:
考号 姓名 语文 数学 物理 化学 政治 英语
1 A 60 90 60 90
2 B 60 90 60 90
(科目顺序无要求,)
15 个解决方案
#1
这个按考号分组就行了吧
#2
第二条应该是这样的吧:
考号 姓名 化学 物理 数学 语文
2 B 90 60 90 60
另外需要知道的是:每个考号的成绩是连续存放的吗?
#3
不要下面的格式就自己用代码一个一个地填充报表吧。。
#4
考号 姓名 语文 数学 物理 化学 政治 英语
1 A 60 90 60 90
2 B 60 90 60 90
这种格式 显示然后用记录集 一条多打个标题就可以了吧 不是很难 就是上面的结果需要用交叉表 你的数据库是sql_server吗 报表控件用的什么
1 A 60 90 60 90
2 B 60 90 60 90
这种格式 显示然后用记录集 一条多打个标题就可以了吧 不是很难 就是上面的结果需要用交叉表 你的数据库是sql_server吗 报表控件用的什么
#5
VB+access,存放按考号
#6
至于报表用什么报表都可以
#7
DataReport的方法:
在ACCESS数据库中添加一个临时表tmp_ks
字段:ID(自动编号)、codes(这个保存编号用来分组)、code(你的编号字段)、s_name(你的姓名字段)、A、B、C、D分别是你6选4的成绩信息
DataReport中添加一个分组标头,上面放一个reptextbox;细节部分加6个reptextbox,添加代码:
你可以用其它报表工具或EXCEL做,这样比较好控制格式
DataReport有一定的局限性,这儿只是一个思路
在ACCESS数据库中添加一个临时表tmp_ks
字段:ID(自动编号)、codes(这个保存编号用来分组)、code(你的编号字段)、s_name(你的姓名字段)、A、B、C、D分别是你6选4的成绩信息
DataReport中添加一个分组标头,上面放一个reptextbox;细节部分加6个reptextbox,添加代码:
Option Explicit
Private Sub DataReport_Initialize()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Sql As String, strSql As String
Dim sName As String, sValue As String
Dim i As Integer
'连接数据库,打开记录集
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Provider = "MSDataShape" '一定要这句,因为要用到ADO的SHAPE命令
cn.Open "Data Provider=Microsoft.Jet.OLEDB.4.0; " _
& "Data Source=" & App.Path & "\Northwind.mdb;Persist " _
& "Security Info=False;Jet OLEDB:Database Password=zxcvbnm"
'rs.CursorLocation = adUseClient
Sql = "SELECT code,s_name," _
& "max(iif(course='数学',score,'')) AS 数学," _
& "max(iif(course='语文',score,'')) AS 语文," _
& "max(iif(course='物理',score,'')) AS 物理," _
& "max(iif(course='化学',score,'')) AS 化学," _
& "max(iif(course='政治',score,'')) AS 政治," _
& "max(iif(course='外语',score,'')) AS 外语 " _
& "FROM ks " _
& "GROUP BY code, s_name;"
rs.Open Sql, cn, adOpenKeyset, adLockOptimistic
Sql = "DELETE FROM tmp_ks"
cn.Execute Sql '先删除临时表中信息
'将信息归纳导入临时表
While Not rs.EOF
sName = ""
sValue = ""
For i = 2 To rs.Fields.Count - 1
If Format(rs.Fields(i)) <> "" Then
sName = sName & ",'" & rs.Fields(i).Name & "'"
sValue = sValue & ",'" & rs.Fields(i).Value & "'"
End If
Next
Sql = "insert into tmp_ks(codes,code,s_name,A,B,C,D) values " & _
"('" & rs!code & "','考号','姓名'" & sName & ")"
cn.Execute Sql
Sql = "insert into tmp_ks(codes,code,s_name,A,B,C,D) values " & _
"('" & rs!code & "','" & rs!code & "','" & rs!s_name & "'" & sValue & ")"
cn.Execute Sql
rs.MoveNext
Wend
Set rs = Nothing
'打开临时表记录集
Sql = "SELECT codes,code,s_name,A,B,C,D FROM tmp_ks ORDER BY ID"
'用SHAPE命令分组
strSql = "SHAPE {" & Sql & "} " & _
"AS rst COMPUTE rst BY codes "
Set rs = New ADODB.Recordset
rs.Open strSql, cn, adOpenStatic, adLockReadOnly
Set DataReport1.DataSource = rs
'设置报表控件属性
'分组标头,不用设置DataMember
DataReport1.Sections("Section6").Controls("text1").DataField = "codes"
DataReport1.Sections("Section6").Controls("text1").Visible = False '隐藏分组信息
'细节标头
DataReport1.Sections("Section1").Controls("text2").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text2").DataField = "code"
DataReport1.Sections("Section1").Controls("text3").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text3").DataField = "s_name"
DataReport1.Sections("Section1").Controls("text4").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text4").DataField = "A"
DataReport1.Sections("Section1").Controls("text5").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text5").DataField = "B"
DataReport1.Sections("Section1").Controls("text6").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text6").DataField = "C"
DataReport1.Sections("Section1").Controls("text7").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text7").DataField = "D"
End Sub
你可以用其它报表工具或EXCEL做,这样比较好控制格式
DataReport有一定的局限性,这儿只是一个思路
#8
有没有源文件给我一个啊!!QQ37894162
#9
你留个信箱,我发给你
#10
access的?没用过,算了。
如果是Excel的就太容易搞定了。
如果是Excel的就太容易搞定了。
#11
我的想法是将8科分别赋一个值:1、2、4、8、16、32 然后再建立一个临时表:字段2个:科目值、考号,然后把成绩库中的考生通过考号排序并取得他的科目取值,然后把四科的值和写入临时表的科目值,把考号写入临时表的考号。例如语1、数2、外4、政8、物16、化32,则某考生考了语、数、外、化,科目值则是:39。得到一个可以按科目值排序的临时表,打印报表时,先从临时表中取得科目值相同的学生的考生号,这样就能再根据考号去查询数据库,从而打印报表。如果还无法解决可以联系我。
#12
学习
#13
我想了一个笨办法,在下面表修改.
考号 姓名 语文 数学 物理 化学 政治 英语
1 A 60 90 60 90
2 B 60 90 60 90
VB+ACCESS+activereport 中
使用 textbox lable 的
width visible (内容为空是width=0 visible 不可见)
left确定位置
经验证,可行.
就不要临时表了>
各大虾可行不???????????????!!!!!!!!!!!!!
有要源码的:QQ37894162
考号 姓名 语文 数学 物理 化学 政治 英语
1 A 60 90 60 90
2 B 60 90 60 90
VB+ACCESS+activereport 中
使用 textbox lable 的
width visible (内容为空是width=0 visible 不可见)
left确定位置
经验证,可行.
就不要临时表了>
各大虾可行不???????????????!!!!!!!!!!!!!
有要源码的:QQ37894162
#14
能正确得出结果就行,能正确、高效的得出结果更行。
不能得出正确结果就不行,有时正确、有时出错也不行。
解决同一个问题,有多种方法。
区别在于:
有的方法正确,有的方法错误。
有的方法简单,有的方法复杂。
有的方法逻辑清晰,有的方法令人‘费解’。
有的方法高效、快速,有的方法耗资、耗时。
#15
估计你现在要解决的问题是怎样把所有四科考试相同的考号找出来,再打印在一起。如果你仅仅是打印一个考生分数条,每个考生都要打印考试科目为表头。那就容易了。你那种方法就能解决。
#1
这个按考号分组就行了吧
#2
第二条应该是这样的吧:
考号 姓名 化学 物理 数学 语文
2 B 90 60 90 60
另外需要知道的是:每个考号的成绩是连续存放的吗?
#3
不要下面的格式就自己用代码一个一个地填充报表吧。。
#4
考号 姓名 语文 数学 物理 化学 政治 英语
1 A 60 90 60 90
2 B 60 90 60 90
这种格式 显示然后用记录集 一条多打个标题就可以了吧 不是很难 就是上面的结果需要用交叉表 你的数据库是sql_server吗 报表控件用的什么
1 A 60 90 60 90
2 B 60 90 60 90
这种格式 显示然后用记录集 一条多打个标题就可以了吧 不是很难 就是上面的结果需要用交叉表 你的数据库是sql_server吗 报表控件用的什么
#5
VB+access,存放按考号
#6
至于报表用什么报表都可以
#7
DataReport的方法:
在ACCESS数据库中添加一个临时表tmp_ks
字段:ID(自动编号)、codes(这个保存编号用来分组)、code(你的编号字段)、s_name(你的姓名字段)、A、B、C、D分别是你6选4的成绩信息
DataReport中添加一个分组标头,上面放一个reptextbox;细节部分加6个reptextbox,添加代码:
你可以用其它报表工具或EXCEL做,这样比较好控制格式
DataReport有一定的局限性,这儿只是一个思路
在ACCESS数据库中添加一个临时表tmp_ks
字段:ID(自动编号)、codes(这个保存编号用来分组)、code(你的编号字段)、s_name(你的姓名字段)、A、B、C、D分别是你6选4的成绩信息
DataReport中添加一个分组标头,上面放一个reptextbox;细节部分加6个reptextbox,添加代码:
Option Explicit
Private Sub DataReport_Initialize()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Sql As String, strSql As String
Dim sName As String, sValue As String
Dim i As Integer
'连接数据库,打开记录集
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Provider = "MSDataShape" '一定要这句,因为要用到ADO的SHAPE命令
cn.Open "Data Provider=Microsoft.Jet.OLEDB.4.0; " _
& "Data Source=" & App.Path & "\Northwind.mdb;Persist " _
& "Security Info=False;Jet OLEDB:Database Password=zxcvbnm"
'rs.CursorLocation = adUseClient
Sql = "SELECT code,s_name," _
& "max(iif(course='数学',score,'')) AS 数学," _
& "max(iif(course='语文',score,'')) AS 语文," _
& "max(iif(course='物理',score,'')) AS 物理," _
& "max(iif(course='化学',score,'')) AS 化学," _
& "max(iif(course='政治',score,'')) AS 政治," _
& "max(iif(course='外语',score,'')) AS 外语 " _
& "FROM ks " _
& "GROUP BY code, s_name;"
rs.Open Sql, cn, adOpenKeyset, adLockOptimistic
Sql = "DELETE FROM tmp_ks"
cn.Execute Sql '先删除临时表中信息
'将信息归纳导入临时表
While Not rs.EOF
sName = ""
sValue = ""
For i = 2 To rs.Fields.Count - 1
If Format(rs.Fields(i)) <> "" Then
sName = sName & ",'" & rs.Fields(i).Name & "'"
sValue = sValue & ",'" & rs.Fields(i).Value & "'"
End If
Next
Sql = "insert into tmp_ks(codes,code,s_name,A,B,C,D) values " & _
"('" & rs!code & "','考号','姓名'" & sName & ")"
cn.Execute Sql
Sql = "insert into tmp_ks(codes,code,s_name,A,B,C,D) values " & _
"('" & rs!code & "','" & rs!code & "','" & rs!s_name & "'" & sValue & ")"
cn.Execute Sql
rs.MoveNext
Wend
Set rs = Nothing
'打开临时表记录集
Sql = "SELECT codes,code,s_name,A,B,C,D FROM tmp_ks ORDER BY ID"
'用SHAPE命令分组
strSql = "SHAPE {" & Sql & "} " & _
"AS rst COMPUTE rst BY codes "
Set rs = New ADODB.Recordset
rs.Open strSql, cn, adOpenStatic, adLockReadOnly
Set DataReport1.DataSource = rs
'设置报表控件属性
'分组标头,不用设置DataMember
DataReport1.Sections("Section6").Controls("text1").DataField = "codes"
DataReport1.Sections("Section6").Controls("text1").Visible = False '隐藏分组信息
'细节标头
DataReport1.Sections("Section1").Controls("text2").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text2").DataField = "code"
DataReport1.Sections("Section1").Controls("text3").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text3").DataField = "s_name"
DataReport1.Sections("Section1").Controls("text4").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text4").DataField = "A"
DataReport1.Sections("Section1").Controls("text5").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text5").DataField = "B"
DataReport1.Sections("Section1").Controls("text6").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text6").DataField = "C"
DataReport1.Sections("Section1").Controls("text7").DataMember = "rst"
DataReport1.Sections("Section1").Controls("text7").DataField = "D"
End Sub
你可以用其它报表工具或EXCEL做,这样比较好控制格式
DataReport有一定的局限性,这儿只是一个思路
#8
有没有源文件给我一个啊!!QQ37894162
#9
你留个信箱,我发给你
#10
access的?没用过,算了。
如果是Excel的就太容易搞定了。
如果是Excel的就太容易搞定了。
#11
我的想法是将8科分别赋一个值:1、2、4、8、16、32 然后再建立一个临时表:字段2个:科目值、考号,然后把成绩库中的考生通过考号排序并取得他的科目取值,然后把四科的值和写入临时表的科目值,把考号写入临时表的考号。例如语1、数2、外4、政8、物16、化32,则某考生考了语、数、外、化,科目值则是:39。得到一个可以按科目值排序的临时表,打印报表时,先从临时表中取得科目值相同的学生的考生号,这样就能再根据考号去查询数据库,从而打印报表。如果还无法解决可以联系我。
#12
学习
#13
我想了一个笨办法,在下面表修改.
考号 姓名 语文 数学 物理 化学 政治 英语
1 A 60 90 60 90
2 B 60 90 60 90
VB+ACCESS+activereport 中
使用 textbox lable 的
width visible (内容为空是width=0 visible 不可见)
left确定位置
经验证,可行.
就不要临时表了>
各大虾可行不???????????????!!!!!!!!!!!!!
有要源码的:QQ37894162
考号 姓名 语文 数学 物理 化学 政治 英语
1 A 60 90 60 90
2 B 60 90 60 90
VB+ACCESS+activereport 中
使用 textbox lable 的
width visible (内容为空是width=0 visible 不可见)
left确定位置
经验证,可行.
就不要临时表了>
各大虾可行不???????????????!!!!!!!!!!!!!
有要源码的:QQ37894162
#14
能正确得出结果就行,能正确、高效的得出结果更行。
不能得出正确结果就不行,有时正确、有时出错也不行。
解决同一个问题,有多种方法。
区别在于:
有的方法正确,有的方法错误。
有的方法简单,有的方法复杂。
有的方法逻辑清晰,有的方法令人‘费解’。
有的方法高效、快速,有的方法耗资、耗时。
#15
估计你现在要解决的问题是怎样把所有四科考试相同的考号找出来,再打印在一起。如果你仅仅是打印一个考生分数条,每个考生都要打印考试科目为表头。那就容易了。你那种方法就能解决。