access中如何生成随机六位数密码????????????????
现在有两张表a和b,a中有两个密码字段a1和a2,b中有两个密码字段b1和b2,我现在想要实现的是:
如果在a表中插入一条数据,要保证插入记录的a1和a2的值是六位数字,并且a1和a2的值不能相同,
同时,a1和a2的值也不能和a表和b表中已存在记录的的a1,a2,b1和b2的值相同。
请教一下应该怎么实现????????
分不够可以再加
问题点数:100、回复次数:4Top
1 楼wwwwb()回复于 2005-11-04 10:52:56 得分 20
可以用RND函数,示例:
Dim n(1 To 370), i, j, q
For i = 1 To 370
n(i) = 0
Next
j = 0
Randomize Timer
While j < 10
q = Int(Rnd(1) * 369 + 1)
If n(q) = 0 Then
Print q
n(q) = 1
j = j + 1
End If
Wend
你可以自己处理一下,生成6位数Top
2 楼changechange(http://access911.net 是我的个人网站,欢迎光临)回复于 2005-11-04 13:59:22 得分 0
这位问题有两个重点
1、要生成随机数字
用 VBA 的 RND 函数就可以生成了,至于6位数用字符处理或者乘以10的5次方都可以
2、要确保不一样
可以在生成后在表中判断是否有重复的,如果有重复就再生成一次随机一直到不重复为止
判断是否重复可以用 VBA 的 DLOOKUP 函数或者 DCOUNT 函数来实现。Top
3 楼changechange(http://access911.net 是我的个人网站,欢迎光临)回复于 2005-11-04 14:02:43 得分 0
Dim MyValue
Randomize ' 对随机数生成器做初始化的动作。
MyValue = format(Int((999999 * Rnd) + 1),"000000") ' 生成 1 到 999999 之间的随机数值。
---------------------------
记得每次随机都要用初始化
Randomize 语句示例
本示例用 Randomize 语句初始化随机数生成器。由于忽略了数值参数, 所以 Randomize 用 Timer 函数的返回值作为新的随机数种子值。
Dim MyValue
Randomize ' 对随机数生成器做初始化的动作。
MyValue = Int((6 * Rnd) + 1) ' 生成 1 到 6 之间的随机数值。
Rnd 函数
返回一个包含随机数值的 Single。
语法
Rnd[(number)]
可选的 number 参数是 Single 或任何有效的数值表达式。
返回值
如果 number 的值是 Rnd 生成
小于 0 每次都使用 number 作为随机数种子得到的相同结果。
大于 0 序列中的下一个随机数。
等于 0 最近生成的数。
省略 序列中的下一个随机数。
说明
Rnd 函数返回小于 1 但大于或等于 0 的值。
number 的值决定了 Rnd 生成随机数的方式。
对最初给定的种子都会生成相同的数列,因为每一次调用 Rnd 函数都用数列中的前一个数作为下一个数的种子。
在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子。
为了生成某个范围内的随机整数,可使用以下公式:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
这里,upperbound 是随机数范围的上限,而 lowerbound 则是随机数范围的下限。
注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。
本示例使用 Rnd 函数随机生成一个 1 到 6 的随机整数。
Dim MyValue
MyValue = Int((6 * Rnd) + 1) ' 生成 1 到 6 之间的随机数值。
MyValue = format(Int((999999 * Rnd) + 1),"000000") ' 生成 1 到 999999 之间的随机数值。
Top
4 楼changechange(http://access911.net 是我的个人网站,欢迎光临)回复于 2005-11-04 14:06:32 得分 80
2、要确保不一样
可以在生成后在表中判断是否有重复的,如果有重复就再生成一次随机一直到不重复为止
判断是否重复可以用 VBA 的 DLOOKUP 函数或者 DCOUNT 函数来实现。
do until dcount("*","表a","a1='" MyValue & "'" ) =0 then
'说明重复了,再生成一次
loop
全部显示
DCount 函数
参阅应用于示例特性使用 Dcount 函数可以确定特定记录集(一个域)中的记录数。可以在 Visual Basic、宏、查询表达式,或计算控件中使用 DCount 函数。
例如,可以在模块中使用 Dcount 函数,以返回“订单”表中对应于特定日期的订单数。
DCount(expr, domain, [criteria])
DCount 函数具有下列参数:
参数 说明
expr 一个表达式,代表要统计其记录数的字段。可以是标识表或查询中字段的字符串表达式,也可以是对该字段上的数据进行计算的表达式。在 expr 中可以包括表中字段的名称、窗体上的控件、常量或函数。如果 expr 包括函数,它既可以是内置的,也可以是用户定义的,但不能是另一个域聚合函数或 SQL 聚合函数。
domain 字符串表达式,代表组成域的记录集。可以是表名称或不需要参数的查询名称。
criteria 可选的字符串表达式,用于限制 DCount 函数执行的数据范围。例如,criteria 通常等价于 SQL 表达式中的 WHERE 子句,只是不含 WHERE 关键字。如果忽略 criteria,DCount 函数在整个域的范围内计算 expr。任何包含在 criteria 中的字段必须同时也是 domain 中的字段;否则 Dcount 函数将返回 Null。
说明
在不需要知道记录特定值的时候,可以使用 DCount 函数来计算域中的记录数。虽然 expr 参数可以对字段执行计算,但 DCount 函数只返回记录数。任何由 expr 执行计算所得的值都是不可用的。
当需指定条件来限制函数执行的数据范围时,应在计算控件中使用 DCount 函数。例如,要显示运往 California 的订单数,可将文本框的 ControlSource 属性设为如下表达式:
=DCount("[OrderID]", "Orders", "[ShipRegion] = 'CA'")
如果只是统计 domain 中的所有记录而不指定任何限制,则可以使用 Count 函数。
提示
Count 函数是经过优化的,可以加快在查询中对记录数进行统计的速度。所以应在查询表达式中使用 Count 函数来代替 DCount 函数,并设置可选的条件以实施对结果的限制。如果必须从代码模块、宏或计算控件中对域中的记录进行计数时,应该使用 DCount 函数。
使用 DCount 函数可以计算包含特定字段的记录数,该字段不在窗体或报表所基于的记录源中。例如,在基于“产品”表的窗体中,其计算控件中可以显示“订单”表中的订单数。
DCount 函数在计数记录时,不包括由 expr 引用的字段中含有 Null 值的记录,除非 expr 参数为星号(*)通配符。如果使用了星号,DCount 函数将计算所有记录的总数,包括含有 Null 字段的记录。下面的示例将计算“Orders”表中的记录数。
intX = DCount("*", "Orders")
如果 domain 是一个包含主键的表,也可以将 expr 设为主键字段来计算总记录数,因为主键字段不可能为 Null。
如果 expr 指定多个字段,应使用连接运算符分隔各字段名,即和字符(&)或加号运算符(+)。如果使用(&)分隔字段,Dcount 函数将返回在列出的任一字段中含有数据的记录数。如果使用加号运算符,Dcount 函数将只返回在所有列出字段中都含有数据的记录数。下面的示例说明了使用这两种运算符的结果,它们连接所有记录中均包含数据的字段(ShipName)和不包含数据的字段(ShipRegion)。
intW = DCount("[ShipName]", "Orders")
intX = DCount("[ShipRegion]", "Orders")
intY = DCount("[ShipName] + [ShipRegion]", "Orders")
intZ = DCount("[ShipName] & [ShipRegion]", "Orders")
注释 和字符(&)在执行字符串连接时是首选的运算符。在除加法以外的其他情况下,应尽量避免使用加法运算符,除非特地需要在表达式中产生 Null 值。
使用该函数时,domain 中未保存更改的记录将不包括在内。如果要让 DCount 函数以更改后的数据为基础,必须先保存更改。方法是单击“记录”菜单上的“保存记录”,或是将焦点移动到另一个控件,或使用 Update 方法。
示例
下面的函数返回在发货日期之后发送到指定国家/地区的订单数量。域为“Orders”表。
Public Function OrdersCount(ByVal strCountry As String, _
ByVal dteShipDate As Date) As Integer
OrdersCount = DCount("[ShippedDate]", "Orders", _
"[ShipCountry] = '" & strCountry & _
"' AND [ShippedDate] > #" & dteShipDate & "#")
End Function
若要调用该函数,请在“立即”窗口中使用下列代码:
:OrdersCount "UK", #1/1/96#
Top




