这个命令按扭的代码怎么写?

sulizao 2006-02-09 04:32:47
我在VB环境下画了一个表单,表单上添加了两个命令按钮,分别命名为[语文成绩]和[数学成绩]。
还添加了一个数据控件Adodc1,该控件已与一个名为“学生”的数据库相联接(表名为“成绩”,字段有“名次”、“姓名”、“语文成绩”、“数学成绩”)。此外还添加了一个表格控件DataGrid1。
现在,我想在点击[语文成绩]按钮时,在表格上能显示“名次”、“姓名”、“语文成绩”三个字段,且名次能自动重新排序(遇相同分数时为同一名次)。同样,在点击[数学成绩]按钮时,表格上能显示“名次”、“姓名”、“数学成绩”,且名次也能自动重新排序。
请教:这两个命令按钮([语文成绩]、[数学成绩)的代码应怎样写?
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sulizao 2006-02-11
  • 打赏
  • 举报
回复
谢谢帮助!给分了。
sulizao 2006-02-10
  • 打赏
  • 举报
回复
感谢以上老师、朋友的指教!
有一个问题,我大概没有说明白,就是显示时要按“语文成绩”(或“数学成绩”)进行排序。之后,“名次”这个字段的内容要根据新次序进行更新,从第1名开始递次往下排,如遇有相同分数,如第5、6、7名都是85分,则把第6、7都改成第5名,就是说有三个第5名,再接着就从第8名继续往下排序。
faysky2 2006-02-10
  • 打赏
  • 举报
回复
添加无源记录集rs,给rs赋值后与DataGrid绑定:

'需要引用ADO
Private Sub orderRs(rsTmp As Recordset)
Dim rs As New Recordset, i As Integer, j As Long, preScore As Double
'添加无源记录集rs
For i = 0 To rsTmp.Fields.Count - 1
rs.Fields.Append rsTmp(i).Name, rsTmp(i).Type, adFldMayBeNull + adFldIsNullable + adFldUpdatable
Next

If rs.State = adStateClosed Then rs.Open
j = 1
'给rs赋值
While Not rsTmp.EOF
rs.AddNew
If rsTmp(rsTmp.Fields.Count - 1) = preScore Then j = j - 1
Debug.Print rsTmp(rsTmp.Fields.Count - 1) & "," & preScore
rs(0) = j
For i = 1 To rsTmp.Fields.Count - 1
rs(i) = rsTmp(i)
Next
j = j + 1

preScore = rsTmp(rsTmp.Fields.Count - 1)
rsTmp.MoveNext

Wend
rs.UpdateBatch
rs.MoveFirst
'将DataGrid与rs绑定,显示新数据
Set DataGrid1.DataSource = rs
End Sub

Private Sub 语文成绩_Click()
Adodc1.RecordSource = "select 名次,姓名,语文成绩 from 成绩 order by 语文成绩 desc"
Adodc1.Refresh
orderRs Adodc1.Recordset
End Sub

Private Sub 数学成绩_Click()
Adodc1.RecordSource = "select 名次,姓名,数学成绩 from 成绩 order by 数学成绩 desc"
Adodc1.Refresh
orderRs Adodc1.Recordset
End Sub
faysky2 2006-02-09
  • 打赏
  • 举报
回复
Private Sub 语文成绩_Click()
Adodc1.RecordSource = "select 名次,姓名,语文成绩 from 成绩 order by 名次 desc"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
End Sub
ZOU_SEAFARER 2006-02-09
  • 打赏
  • 举报
回复
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset

cnnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
App.Path & "\Message.mdb;Persist Security Info=False"
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
cnn.Open cnnstr
rst.Open "select 名次,姓名,语文成绩 form 学生成绩 order by 名次 desc", cnn, adOpenKeyset, adLockOptimistic
set Adodc1.Recordset = rst


数学和上面一样,就把语文成绩改为数学成绩就可以了
sulizao 2006-02-09
  • 打赏
  • 举报
回复
请详细指教一下SQL的写法,好吗?
(另说明一下,我所用的数据库是是Access.)
luckystone168 2006-02-09
  • 打赏
  • 举报
回复
用SQL语句呀,另外建议你用ADODB做数据库连接,方便灵活

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧