注册 登录
编程论坛 VB6论坛

求助!排序后重复的只显示一个值,为何?

leegar 发布于 2015-11-17 19:42, 1428 次点击
求大神指点!
请看附件,为何没有重复值时有效,
只有本站会员才能查看附件,请 登录
有重复值时,只显示一个?
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编辑过]

10 回复
#2
wmf20142015-11-17 20:39
为什么不贴代码?
#3
leegar2015-11-17 22:40
回复 2楼 wmf2014
不好意思,第一次,不知道,着急了
代码和运行后效果也补上了,请版主帮忙,谢谢

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

#4
leegar2015-11-17 22:41
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
#5
wmf20142015-11-18 08:44
没看懂,怎么重复的只显示一个?我觉得都正常啊。
#6
xiangyue05102015-11-18 09:42
我觉得也没有什么问题,不过中间很多无用的语句。
你这个例子的话,建议你将数据提取出来存在另外一个表,只要两个字段Name、Sore,一条记录对应一对组合,如A5,46。 如果要进行排序的话,直接用Select * From 表 order by  sore desc 就可以了。用不着这么多的代码


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

#7
leegar2015-11-18 16:37
回复 5楼 wmf2014
验证码验证了一天,老是错,刚上来。

老师,原代码执行后,数值有三个18时,出现三个A3,两个56时出现两个A5,我要的是不管重复数值,只要排序,A1到A9都要显示
#8
leegar2015-11-18 16:37
回复 6楼 xiangyue0510
老师,你这只能竖排,横排不好用
#9
wmf20142015-11-18 16:57
是因为排序时你只交换了对应数据,而没有交换该数据对应的字段名称,做如下修改试试。
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
#10
leegar2015-11-18 20:56
回复 9楼 wmf2014
还是不行
#11
wmf20142015-11-18 22:00
这样修改后应该符合你的要求
程序代码:
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 = I + 1 To 9
      '  If arr(j) > arr(j + 1) Then
      If arr(I) > arr(j) Then
        T = arr(I): arr(I) = arr(j): arr(j) = T
        T = arrstr(I): arrstr(I) = arrstr(j): arrstr(j) = T
      End If
    Next j
Next I
For p = 9 To 1 Step -1
  Print arr(p) & "==========>" & arrstr(p)  ' & rs.Fields(i + 1).Name
  Combo1.AddItem arrstr(p)
  List1.AddItem arrstr(p)
  Label1(9 - p) = arr(p)
  Text1(9 - p) = arrstr(p)
Next p

End Sub
只有本站会员才能查看附件,请 登录

1