Office中国论坛/Access中国论坛

标题: InStr 获取所有记录字段非重复ID [打印本页]

作者: Henry D. Sy    时间: 2020-4-8 21:00
标题: InStr 获取所有记录字段非重复ID
本帖最后由 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>当数据量大反而正常。[attach]63696[/attach]


  33. </div>
复制代码

作者: Henry D. Sy    时间: 2020-4-8 21:01
提取“-”之前的ID号,总是缺少某些数字,这个例子缺少6,7
当数据量大反而正常


作者: tmtony    时间: 2020-4-9 16:08
有时正常,有时失常?
作者: Henry D. Sy    时间: 2020-4-9 18:14
tmtony 发表于 2020-4-9 16:08
有时正常,有时失常?

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

作者: tmtony    时间: 2020-4-11 08:33
Henry D. Sy 发表于 2020-4-9 18:14
就这几条记录,永远错误
多增加几条记录,反而正常。

这个正常的。因为你先取到 16, 所以 当新的是 6,  就认为存在了。
所以要改进一下就可以了
作者: tmtony    时间: 2020-4-11 08:35
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
复制代码




作者: Henry D. Sy    时间: 2020-4-11 18:27
tmtony 发表于 2020-4-11 08:33
这个正常的。因为你先取到 16, 所以 当新的是 6,  就认为存在了。
所以要改进一下就可以了

晕晕晕,这点没注意到!
多亏 你提醒




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3