设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[模块/函数] 【源码通用函数】一个生成同步复制ID的函数(即GUID,全球同步唯一标识符)

[复制链接]
跳转到指定楼层
1#
发表于 2010-12-11 19:27:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
同步复制ID,即GUID(全球同步唯一标识符),通过特定的算法,生成的一个128位的字符串,在纳秒级的时间内,任意两台电脑生成的GUID都不会相同(理论上在公元3400年以前如此),从而确保标识的唯一性。
  1. Private Type GUID
  2. Data1 As Long
  3. Data2 As Integer
  4. Data3 As Integer
  5. Data4(7) As Byte
  6. End Type

  7. Private Declare Function CoCreateGuid Lib "ole32.dll" (pguid As GUID) As Long

  8. '生成GUID(同步复制ID) ===红尘如烟=======
  9. Public Function GetGUID() As String
  10. Dim typGUID As GUID
  11. If (CoCreateGuid(typGUID) = 0) Then
  12. GetGUID = GetGUID & String(8 - Len(Hex$(typGUID.Data1)), "0") & Hex$(typGUID.Data1) & "-"
  13. GetGUID = GetGUID & String(4 - Len(Hex$(typGUID.Data2)), "0") & Hex$(typGUID.Data2) & "-"
  14. GetGUID = GetGUID & String(4 - Len(Hex$(typGUID.Data3)), "0") & Hex$(typGUID.Data3) & "-"
  15. GetGUID = GetGUID & IIf((typGUID.Data4(0) < &H10), "0", "") & Hex$(typGUID.Data4(0))
  16. GetGUID = GetGUID & IIf((typGUID.Data4(1) < &H10), "0", "") & Hex$(typGUID.Data4(1)) & "-"
  17. GetGUID = GetGUID & IIf((typGUID.Data4(2) < &H10), "0", "") & Hex$(typGUID.Data4(2))
  18. GetGUID = GetGUID & IIf((typGUID.Data4(3) < &H10), "0", "") & Hex$(typGUID.Data4(3))
  19. GetGUID = GetGUID & IIf((typGUID.Data4(4) < &H10), "0", "") & Hex$(typGUID.Data4(4))
  20. GetGUID = GetGUID & IIf((typGUID.Data4(5) < &H10), "0", "") & Hex$(typGUID.Data4(5))
  21. GetGUID = GetGUID & IIf((typGUID.Data4(6) < &H10), "0", "") & Hex$(typGUID.Data4(6))
  22. GetGUID = GetGUID & IIf((typGUID.Data4(7) < &H10), "0", "") & Hex$(typGUID.Data4(7))
  23. End If
  24. End Function
复制代码

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2010-12-11 21:25:00 | 只看该作者
我也用一个,与红尘差不多,也凑个热闹


Private Type GUID
  Data1 As Long
  Data2 As Long
  Data3 As Long
  Data4(8) As Byte
End Type

Private Declare Function CoCreateGuid Lib "ole32.dll" ( _
  pguid As GUID) As Long

Private Declare Function StringFromGUID2 Lib "ole32.dll" ( _
  rguid As Any, _
  ByVal lpstrClsId As Long, _
  ByVal cbMax As Long) As Long


Public Function gt_GetGuid() As String

Dim g As GUID
Dim b() As Byte
Dim lSize As Long
Dim lR As Long

CoCreateGuid g

lSize = 40
ReDim b(0 To (lSize * 2) - 1) As Byte
lR = StringFromGUID2(g, VarPtr(b(0)), lSize)
gt_GetGuid = Left$(b, lR - 1)

End Function
3#
发表于 2010-12-12 08:23:16 | 只看该作者
不错,收藏
4#
 楼主| 发表于 2010-12-12 15:48:10 | 只看该作者
tmtony 发表于 2010-12-11 21:25
我也用一个,与红尘差不多,也凑个热闹

赞一个,老大这个比我用的效率要高的多

点击这里给我发消息

5#
发表于 2010-12-13 12:00:30 | 只看该作者
GUID就是太长了点, 红尘常用吗?  我一般是需要同步的才用它, 但内部操作还是用长整型

点击这里给我发消息

6#
发表于 2010-12-14 15:55:39 | 只看该作者
暂时没有用到,收藏起来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-24 07:20 , Processed in 0.096215 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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