| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1233 人关注过本帖
标题:在VB里面如何对数据进行比较,并给出比较结果
只看楼主 加入收藏
beijiquan
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-12-25
结帖率:75%
收藏
 问题点数:0 回复次数:23 
在VB里面如何对数据进行比较,并给出比较结果
需要对数据库里面的数据进行比较并给出比较结果,数据库里面的数据是这样的:
文件号 排号 架号 层号 道号
1          P     017    B     09
1          P     017    B     10
1          P     018    B     02
1          P     018   B     03
需要对同一文件号所对应的数据进行比较,排号架号层号道号之间的规律是这样的:一排有40个架,一架有ABC三层,一层有10个道。如果连续就用-连接,如果不连续就用/连接。研究了好长时间,没个好的办法,请教高手指点。
排号架号层号相同道号相邻表示连续,比如P017B09和P017B10,比较结果为P017B09_10;
排号架号相同层号不同,比如P017B10和P017C01也表示连续,比较结果为P017B10_C01;
除此之外表示不连续,不连续的表示方法是:
比如P017B07和P017B10,比较结果应为:P017B07/10
比如P017B07和P017C01,比较结果应为:P017B07/C01
比如P017B07和P018B10,比较结果应为:P017B07/P018B10
搜索更多相关主题的帖子: 数据库 如何 
2014-12-26 14:28
beijiquan
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-12-25
收藏
得分:0 
急!!!!!!!!!
2014-12-26 14:48
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
能不能提供数据库?我有一个算法,但需要数据调试。主要方法是对数据库记录集排序,然后用一计数器遍历所有记录并比较即可。
2014-12-26 18:36
beijiquan
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-12-25
收藏
得分:0 
线架导线索引表.rar (153.86 KB)

这是excel数据库,里面有比较方法,你看一下,如果可以的话请联系我45262121,在此深表感谢
2014-12-30 11:14
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 4楼 beijiquan
自义一个数据类型
Type element
     fileInd as string'文件号
     row as string'排号
     frame as string'架号
     layer as string'层号
     slot as string'道号
End Type
然后把表格内容读入到element类型的数组中.
定义一个两两比较的函数,用逻辑判断语句得到输出结果.
根据用户指定的两个element或遍历同文件号的element 的两两组合调用比较函数.
这样不行吗?

大开眼界
2014-12-30 12:12
beijiquan
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-12-25
收藏
得分:0 
回复 5楼 lianyicq
你能否说的详细些,最好有代码。我也写了程序进行两两比较,但是结果还是不全对,要不我把代码贴上来你给我看看??
2014-12-30 15:20
beijiquan
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-12-25
收藏
得分:0 
rs.Open "select * from Wirerack where 文件号='" & Trim(Text1(0).text) & "' order by 排号,架号,层号,道号", cnn, adOpenKeyset, adLockOptimistic
   If rs.RecordCount > 0 Then
      If rs.RecordCount = 1 Then '一条记录直接读
         rs.MoveFirst
         a = rs.Fields("排号")
         b = rs.Fields("架号")
         c = rs.Fields("层号")
         d = rs.Fields("道号")
         Text1(5).text = a & b & c & d
      End If
      If rs.RecordCount = 2 Then '两条记录直接比
         rs.MoveFirst
         a = rs.Fields("排号")
         b = rs.Fields("架号")
         c = rs.Fields("层号")
         d = rs.Fields("道号")
         Text1(5).text = a & b & c & d
         rs.MoveNext
         a1 = rs.Fields("排号")
         b1 = rs.Fields("架号")
         c1 = rs.Fields("层号")
         d1 = rs.Fields("道号")
         If (a = a1) And (b = b1) And (c = c1) And (d <> d1) Then '仅道号不一样
            If Val(d1 - d) = 1 Then
               Text1(5) = Text1(5) & "_" & d1
            Else
               Text1(5).text = Text1(5) & "/" & c1 & d1
            End If
         ElseIf (a = a1) And (b = b1) And (c <> c1) Then '层号不一样
            If Asc(c1) - Asc(c) = 1 And Val(d - d1) = 9 Then
               Text1(5).text = Text1(5) & "_" & c1 & d1
            Else
               Text1(5).text = Text1(5) & "/" & c1 & d1
            End If
         ElseIf (b <> b1) Then '架号不一样
            Text1(5).text = Text1(5) & "/" & a1 & b1 & c1 & d1
         End If
      End If
      If rs.RecordCount > 2 Then '三条以上记录,第一条与第二条比较的结果在于第二条与第三条记录比较的结果比较
         For i = 0 To rs.RecordCount - 2
            a = rs.Fields("排号")
            b = rs.Fields("架号")
            c = rs.Fields("层号")
            d = rs.Fields("道号")
            rs.MoveNext
            a1 = rs.Fields("排号")
            b1 = rs.Fields("架号")
            c1 = rs.Fields("层号")
            d1 = rs.Fields("道号")
            If (a = a1) And (b = b1) And (c = c1) And (d <> d1) Then '仅道号不一样
                If Val(d1 - d) = 1 Then
                   If i = 0 Then
                      Text1(5) = a & b & c & d & "_" & d1
                   Else
                      Text1(5) = left(Text1(5), Len(Text1(5)) - 3) & "_" & d1
                   End If
                Else
                   If i = 0 Then
                      Text1(5).text = a & b & c & d & "/" & c1 & d1
                   Else
                      Text1(5).text = Text1(5).text & "/" & c1 & d1
                   End If
                End If
            ElseIf (a = a1) And (b = b1) And (c <> c1) Then '层号不一样
               If Asc(c1) - Asc(c) = 1 And Val(d - d1) = 9 Then
                   If i = 0 Then
                      Text1(5).text = a & b & c & d & "_" & c1 & d1
                   Else
                      Text1(5).text = Text1(5) & "_" & c1 & d1
                   End If
               Else
                  If i = 0 Then
                     Text1(5).text = a & b & c & d & "/" & c1 & d1
                  Else
                     Text1(5).text = Text1(5).text & "/" & c1 & d1
                  End If
               End If
            ElseIf (b <> b1) Then '架号不一样
               If i = 0 Then
                  Text1(5).text = a & b & c & d & "/" & a1 & b1 & c1 & d1
               Else
                  Text1(5).text = Text1(5).text & "/" & a1 & b1 & c1 & d1
               End If
            End If
         Next i
       End If
    Else
       Text1(5).text = ""
       MsgBox "在导线缓冲架中没发现此文件相关数据,请核查数据!", , "提示"
    End If
    rs.Close
2014-12-30 15:29
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 7楼 beijiquan
好多"衣服"和"额尔斯"和"额尔斯衣服".我这老眼昏花,只觉眼花缭乱.不知道能不能看完。建议自定义比较函数.
假设a、b、c、d之类都是字符串型。
比较道号应该是:if abs(val(a)-val(a1))=1 then...

大开眼界
2014-12-30 16:06
beijiquan
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2014-12-25
收藏
得分:0 
多于两个的就不好比较了,道号的数据是数值,可以直接Val(d1 - d) = 1这样比较,层号的数据是字符,只能这样比Asc(c1) - Asc(c) = 1。
你能否给一个自定义的比较函数?
2014-12-30 16:14
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 9楼 beijiquan
程序代码:
思路是这样的,不过我没测试。需要勘误
Type element_type
     fileInd As String '文件号
     row As String '排号
     frame As String '架号
     layer As String '层号
     slot As String '道号
End Type

Dim element() As element_type
Function compare(a As element_type, b As element_type) As String
  If a.row = b.row And a.frame = b.frame And a.layer = b.layer And Abs(Val(a.String) - Val(b.String)) = 1 Then compare = a.row & a.frame & a.layer & a.slot & "_" & b.slot: Exit Function
  '下句有重复消耗系统时间的嫌疑
  If a.row = b.row And a.frame = b.frame And a.layer = b.layer And Abs(Val(a.String) - Val(b.String)) <> 1 Then compare = a.row & a.frame & a.layer & a.slot & "/" & b.slot: Exit Function
  If a.row = b.row And a.frame = b.frame And a.layer <> b.layer Then compare = a.row & a.frame & a.layer & a.slot & "_" & b.layer & b.slot: Exit Function

 
  If a.row <> b.row Then compare = a.row & a.frame & a.layer & a.slot & "/" & b.row & b.frame & b.layer & b.slot: Exit Function
  If a.frame <> b.frame Then compare = a.row & a.frame & a.layer & a.slot & "/" & b.frame & b.layer & b.slot: Exit Function


 
End Function
勘误:
程序代码:
Type element_type
  fileInd As String
  row As String
  frame As String
  layer As String
  slot As String
End Type

 
Public element(1000) As element_type

Function compare(a As element_type, b As element_type) As String
  If a.row = b.row And a.frame = b.frame And a.layer = b.layer And Abs(Val(a.slot) - Val(b.slot)) = 1 Then compare = a.row & a.frame & a.layer & a.slot & "_" & b.slot: Exit Function
  If a.row = b.row And a.frame = b.frame And a.layer = b.layer And Abs(Val(a.slot) - Val(b.slot)) <> 1 Then compare = a.row & a.frame & a.layer & a.slot & "/" & b.slot: Exit Function
  If a.row = b.row And a.frame = b.frame And a.layer <> b.layer Then compare = a.row & a.frame & a.layer & a.slot & "_" & b.layer & b.slot: Exit Function
  If a.row <> b.row Then compare = a.row & a.frame & a.layer & a.slot & "/" & b.row & b.frame & b.layer & b.slot: Exit Function
  If a.frame <> b.frame Then compare = a.row & a.frame & a.layer & a.slot & "/" & b.frame & b.layer & b.slot: Exit Function
End Function
比较.zip (2.66 KB)
作为参考吧

[ 本帖最后由 lianyicq 于 2014-12-30 16:57 编辑 ]

大开眼界
2014-12-30 16:30
快速回复:在VB里面如何对数据进行比较,并给出比较结果
数据加载中...
 
   



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

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