我在开发允许用户访问唯一URL的应用程序时需要为每个记录创建唯一ID(字符串),例如:
下面的代码可用于创建URLID:
Public Function getURLID(ID As Double) As String
Randomize
Dim rgch As String
rgch = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"
Dim i As Long
For i = 1 To 5
getURLID = getURLID & Mid$(rgch, Int(Rnd() * Len(rgch) + 1), 1)
Next
End Function
如何确保创建的URLID是唯一的?我是否需要查询数据库以确保之前尚未生成?该表有500万条记录。 dlookup查询将超出我的MSAccess数据库的限制。
如何确保创建的URLID是唯一的?
你不能。而且不会。查看加密安全的哈希算法...甚至those都永远不会永远“安全”。注意,哈希是VBA绝对支持零内置的东西,但是you can leverage .NET for that。
另一种选择是让操作系统生成Globally Unique IDentifiers (GUID); 这些将是唯一的,但比少数几个字符要长得多。
祝你好运!
确保字符串在VBA中是唯一的,可以通过其他方式完成。例如,以日期时间为单位,该日期时间每秒都是唯一的,然后给它:
format(now, "YYMMDDHHNS")
就显而易见而言,请考虑对其进行一些更改。例如,从日期时间中删除一个随机的常数,让我们说181387
(因为它是质数),然后将其转换为十六进制。然后就可以了:
Function UniqueString() As String
Const someNumber = 181387 'it is a prime number
UniqueString = Hex(Format(Now, "YYMMDDHHNS") - someNumber)
End Function
只需确保在调用该函数之前在同一时区中至少有1秒的时间。另外,最好事先考虑夏令时。通常,这不是一个好主意,会弹出很多问题,但是对于vba和ms-access来说是可以的。