| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1428 人关注过本帖
标题:求助!排序后重复的只显示一个值,为何?
只看楼主 加入收藏
leegar
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
求助!排序后重复的只显示一个值,为何?
求大神指点!
请看附件,为何没有重复值时有效,
wl.rar (16.78 KB)
有重复值时,只显示一个?
Option Explicit

Dim rs As New ADODB.Recordset '定义字段
Dim rs1 As New ADODB.Recordset '定义字段
Dim cnn As New ADODB.Connection   '定义数据连接



Private Sub Form_Load()
    Dim strCnn$, SQL As String

     
    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\WL.mdb;Jet OLEDB:Database Password="
    cnn.Open strCnn                           '打开连接
    rs.Open "select * from  WL  ", cnn, adOpenDynamic, adLockBatchOptimistic


     
  End Sub

Private Sub Command1_Click()

Dim a As String
Dim arr(1 To 9) As Integer
Dim arr1(1 To 9) As Integer
Dim arrstr(1 To 9) As String
Dim arrstr1(1 To 9) As String
Dim I, j, T, p, q As Integer

For I = 1 To 9
    a = rs.Fields(I + 1)
    arr(I) = Val(a)
    q = I
    arr1(q) = Val(a)
    arrstr(q) = rs.Fields(q + 1).Name
Next I

For q = 1 To 9
Print "+++++++++++++++"; arr1(q) & "==========>" & arrstr(q)
Next q

For I = 1 To 8
    For j = 1 To 8
      '  If arr(j) > arr(j + 1) Then
      If arr(j) > arr(j + 1) Or arr(j) = arr(j + 1) Then
        T = arr(j + 1): arr(j + 1) = arr(j): arr(j) = T

        End If
'        arrstr(t) = arrstr(i)
'
    Next j
''MsgBox t & "==>" & j
Next I

 
For p = 9 To 1 Step -1
For q = 1 To 9
If arr(p) = arr1(q) Then arrstr1(p) = arrstr(q)

Next q
Print arr(p) & "==========>" & arrstr1(p)  ' & rs.Fields(i + 1).Name
Combo1.AddItem arrstr1(p)
'Print arrstr1(p), rs

List1.AddItem arrstr1(p)
Next p

Label1(0) = arr(9)
Label1(1) = arr(8)
Label1(2) = arr(7)
Label1(3) = arr(6)
Label1(4) = arr(5)
Label1(5) = arr(4)
Label1(6) = arr(3)
Label1(7) = arr(2)
Label1(8) = arr(1)

Text1(0) = arrstr1(9)
Text1(1) = arrstr1(8)
Text1(2) = arrstr1(7)
Text1(3) = arrstr1(6)
Text1(4) = arrstr1(5)
Text1(5) = arrstr1(4)
Text1(6) = arrstr1(3)
Text1(7) = arrstr1(2)
Text1(8) = arrstr1(1)


End Sub


运行后如下图

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2015-11-17 22:56编辑过]

2015-11-17 19:42
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
为什么不贴代码?

能编个毛线衣吗?
2015-11-17 20:39
leegar
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-3
收藏
得分:0 
回复 2楼 wmf2014
不好意思,第一次,不知道,着急了
代码和运行后效果也补上了,请版主帮忙,谢谢

[此贴子已经被作者于2015-11-17 22:59编辑过]

2015-11-17 22:40
leegar
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-3
收藏
得分:0 
Option Explicit

Dim rs As New ADODB.Recordset '定义字段
Dim rs1 As New ADODB.Recordset '定义字段
Dim cnn As New ADODB.Connection   '定义数据连接



Private Sub Form_Load()
    Dim strCnn$, SQL As String

     
    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\WL.mdb;Jet OLEDB:Database Password="
    cnn.Open strCnn                           '打开连接
    rs.Open "select * from  WL  ", cnn, adOpenDynamic, adLockBatchOptimistic


     
  End Sub

Private Sub Command1_Click()

Dim a As String
Dim arr(1 To 9) As Integer
Dim arr1(1 To 9) As Integer
Dim arrstr(1 To 9) As String
Dim arrstr1(1 To 9) As String
Dim I, j, T, p, q As Integer

For I = 1 To 9
    a = rs.Fields(I + 1)
    arr(I) = Val(a)
    q = I
    arr1(q) = Val(a)
    arrstr(q) = rs.Fields(q + 1).Name
Next I

For q = 1 To 9
Print "+++++++++++++++"; arr1(q) & "==========>" & arrstr(q)
Next q

For I = 1 To 8
    For j = 1 To 8
      '  If arr(j) > arr(j + 1) Then
      If arr(j) > arr(j + 1) Or arr(j) = arr(j + 1) Then
        T = arr(j + 1): arr(j + 1) = arr(j): arr(j) = T

        End If
'        arrstr(t) = arrstr(i)
'
    Next j
''MsgBox t & "==>" & j
Next I

 
For p = 9 To 1 Step -1
For q = 1 To 9
If arr(p) = arr1(q) Then arrstr1(p) = arrstr(q)

Next q
Print arr(p) & "==========>" & arrstr1(p)  ' & rs.Fields(i + 1).Name
Combo1.AddItem arrstr1(p)
'Print arrstr1(p), rs

List1.AddItem arrstr1(p)
Next p

Label1(0) = arr(9)
Label1(1) = arr(8)
Label1(2) = arr(7)
Label1(3) = arr(6)
Label1(4) = arr(5)
Label1(5) = arr(4)
Label1(6) = arr(3)
Label1(7) = arr(2)
Label1(8) = arr(1)

Text1(0) = arrstr1(9)
Text1(1) = arrstr1(8)
Text1(2) = arrstr1(7)
Text1(3) = arrstr1(6)
Text1(4) = arrstr1(5)
Text1(5) = arrstr1(4)
Text1(6) = arrstr1(3)
Text1(7) = arrstr1(2)
Text1(8) = arrstr1(1)


End Sub
2015-11-17 22:41
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
没看懂,怎么重复的只显示一个?我觉得都正常啊。

能编个毛线衣吗?
2015-11-18 08:44
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:941
专家分:5244
注 册:2015-8-10
收藏
得分:0 
我觉得也没有什么问题,不过中间很多无用的语句。
你这个例子的话,建议你将数据提取出来存在另外一个表,只要两个字段Name、Sore,一条记录对应一对组合,如A5,46。 如果要进行排序的话,直接用Select * From 表 order by  sore desc 就可以了。用不着这么多的代码


[此贴子已经被作者于2015-11-18 09:46编辑过]

2015-11-18 09:42
leegar
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-3
收藏
得分:0 
回复 5楼 wmf2014
验证码验证了一天,老是错,刚上来。

老师,原代码执行后,数值有三个18时,出现三个A3,两个56时出现两个A5,我要的是不管重复数值,只要排序,A1到A9都要显示
2015-11-18 16:37
leegar
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-3
收藏
得分:0 
回复 6楼 xiangyue0510
老师,你这只能竖排,横排不好用
2015-11-18 16:37
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
是因为排序时你只交换了对应数据,而没有交换该数据对应的字段名称,做如下修改试试。
If arr(j) > arr(j + 1) Or arr(j) = arr(j + 1) Then
        T = arr(j + 1): arr(j + 1) = arr(j): arr(j) = T
        T = arrstr(j + 1): arrstr(j + 1) = arrstr(j): arrstr(j) = T
End If

能编个毛线衣吗?
2015-11-18 16:57
leegar
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-5-3
收藏
得分:0 
回复 9楼 wmf2014
还是不行
2015-11-18 20:56
快速回复:求助!排序后重复的只显示一个值,为何?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035900 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved