设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4092|回复: 6
打印 上一主题 下一主题

[模块/函数] InStr 获取所有记录字段非重复ID

[复制链接]
跳转到指定楼层
1#
发表于 2020-4-8 21:00:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Henry D. Sy 于 2020-4-8 21:00 编辑
  1. <div class="blockcode"><blockquote>'------------------------------------------
  2. '获取所有记录字段非重复ID
  3. '------------------------------------------
  4. Public Function gIdSeries(ByVal tblName As String) As String
  5.     Dim rs As New ADODB.Recordset
  6.     Dim I As Integer
  7.     Dim strWhat As String
  8.     Dim intID As Long
  9.     rs.Open tblName, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
  10.     Do While Not rs.EOF
  11.         For I = 0 To rs.Fields.Count - 1
  12.             If Trim(rs.Fields(I)) <> "-" Then
  13.                 intID = Left(rs.Fields(I), InStr(rs.Fields(I), "-") - 1)
  14.                 If InStr(strWhat, intID) = 0 Then
  15.                     strWhat = strWhat & intID & ","
  16.                 End If
  17.             End If
  18.         Next
  19.         rs.MoveNext
  20.     Loop
  21.     If Len(strWhat) > 0 Then
  22.         gIdSeries = Left(strWhat, Len(strWhat) - 1)
  23.     End If
  24.     rs.Close
  25.     Set rs = Nothing
  26. End Function

  27. Private Sub Command0_Click()
  28.     Dim A As String
  29.     A = gIdSeries("TEMP")
  30.     MsgBox A
  31. <div>End Sub</div><div>
  32. </div><div>提取“-”之前的ID好,总是缺少某些数字,这个例子缺少6,7</div><div>当数据量大反而正常。


  33. </div>
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2020-4-8 21:01:37 | 只看该作者
提取“-”之前的ID号,总是缺少某些数字,这个例子缺少6,7
当数据量大反而正常

点击这里给我发消息

3#
发表于 2020-4-9 16:08:23 | 只看该作者
有时正常,有时失常?
4#
 楼主| 发表于 2020-4-9 18:14:10 | 只看该作者
tmtony 发表于 2020-4-9 16:08
有时正常,有时失常?

就这几条记录,永远错误
多增加几条记录,反而正常。

点击这里给我发消息

5#
发表于 2020-4-11 08:33:48 | 只看该作者
Henry D. Sy 发表于 2020-4-9 18:14
就这几条记录,永远错误
多增加几条记录,反而正常。

这个正常的。因为你先取到 16, 所以 当新的是 6,  就认为存在了。
所以要改进一下就可以了

点击这里给我发消息

6#
发表于 2020-4-11 08:35:15 | 只看该作者
Henry D. Sy 发表于 2020-4-8 21:01
提取“-”之前的ID号,总是缺少某些数字,这个例子缺少6,7
当数据量大反而正常

改成下面这样的代码就可以解决了


  1. Public Function gIdSeries(ByVal tblName As String) As String
  2.     Dim rs As New ADODB.Recordset
  3.     Dim I As Integer
  4.     Dim strWhat As String
  5.     Dim intID As Long
  6.     rs.Open tblName, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
  7.     Do While Not rs.EOF
  8.         For I = 0 To rs.Fields.Count - 1
  9.             If Trim(rs.Fields(I)) <> "-" Then
  10.                 intID = Left(rs.Fields(I), InStr(rs.Fields(I), "-") - 1)
  11.                 If intID = 6 Then
  12.                    Debug.Print intID
  13.                 End If
  14.                 If InStr("," & strWhat, "," & intID & ",") = 0 Then
  15.                     strWhat = strWhat & intID & ","
  16.                 End If
  17.             End If
  18.         Next
  19.         rs.MoveNext
  20.     Loop
  21.     If Len(strWhat) > 0 Then
  22.         gIdSeries = Left(strWhat, Len(strWhat) - 1)
  23.     End If
  24.     rs.Close
  25.     Set rs = Nothing
  26. End Function
复制代码



7#
 楼主| 发表于 2020-4-11 18:27:38 | 只看该作者
tmtony 发表于 2020-4-11 08:33
这个正常的。因为你先取到 16, 所以 当新的是 6,  就认为存在了。
所以要改进一下就可以了

晕晕晕,这点没注意到!
多亏 你提醒
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-1 17:26 , Processed in 0.133449 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表