2012-08-16 72 views
2

我在Access中工作,我需要创建一个随机的4位数分隔为记录的用户列表。我的查询不断返回每个记录相同的随机数。为Access或SQL中的每条记录创建一个随机4位数字?

SELECT 1000 + (1999-1000)*RND() as [PassCodes], 
    stafflistEMAIL.Name, stafflistEMAIL.Description 
FROM stafflistEMAIL; 

如何使这项工作,其他答案我已查看不提供解决方案?

+1

听起来好像您正在生成PIN码。有独特的数字是非常重要的吗?可以帮助我们知道。 – Smandoli 2012-08-16 17:19:33

+0

随机数不是唯一的,你知道吗,是吗? – Fionnuala 2012-08-16 18:14:05

+1

对于查询,您可以使用字段运行rand:'Int(1000+(1999-1000)* Rnd([akey]))' – Fionnuala 2012-08-16 18:16:17

回答

1

Repeating random variables in VBA

在致电Rnd,使用Randomize声明没有参数与基于系统计时器的种子初始化随机数生成器。

取决于你的目标有很多,你可以做一些有趣的事情是这样的:

Right(Cstr(CInt(Len(stafflistEMAIL.Name)*Len(stafflistEMAIL.Description)/1000)),4) 
+0

如果系统计时器的分辨率为1秒,并且查询速度比此更快,这是行不通的。您需要确保计时器的打勾速度比收到查询的速度快。 – djconnel 2012-08-16 17:13:14

+0

如果您正在运行除VBA以外的查询,我不知道如何执行您想要的操作。我建议你将它转移到VBA进行良好的控制 - 大概这是一个相当重要的功能。例如,我在想,你希望这些数字是唯一的;所以你需要一种方法来检查,并且VBA提供你需要的控制。 – Smandoli 2012-08-16 17:13:45

+0

djconnel - 这是一个伟大的观点。再说一次,这是针对VBA的;如果定时器不变(如果不是随机的,但我认为它满足需要),则增加+1。 – Smandoli 2012-08-16 17:17:17

2

就像一个想法,下面将给出4个随机字符:

Mid(CreateObject("Scripting.FileSystemObject").GetTempName,4,4) 

例如:

906F 
0818 
25A5 
F200 
918F 
A166 
+0

非常酷的+1 – Smandoli 2012-08-16 20:08:29

相关问题