首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 用PB生成GUID(全球唯一码)解决主键重复
【标  题】:用PB生成GUID(全球唯一码)解决主键重复
【关键字】:ID,全球,GUI,PB,UI,GUID,PB,GUID
【来  源】:网络

用PB生成GUID(全球唯一码)解决主键重复

编一个全局函数如下:
//---------------------------------------------
//Function f_get_GUID//得到全球唯一码
//Argument: <ref string> of_guid //全球唯一码
//Return: [None]
//Create by 泥草鞋 2004-03-10
//----------------------------------------------
oleObject PBObject
long ll_result
PBObject = CREATE oleObject

ll_result = PBObject.ConnectToNewObject("PowerBuilder.Application")
IF ll_result < 0 THEN
messagebox(gs_message,"连接失败:与PowerBuilder.Application连接出错!")
return
ELSE
ll_result = PBObject.GenerateGUID(REF of_guid)
END IF

IF ll_result < 0 THEN
messagebox(gs_message,"生成GUID失败:不能获得GUID!")
return
END IF

of_guid = mid(of_guid,2,len(of_guid) - 2)
//End of Fuction

好啦,以后不用为主键重复问题再烦恼了吧。
不过,请注意该函数需要的支持文件:(以PB7.0为例)
pbappl.reg(执行它注册一遍,7.0以下必须此文件)
Pbvm70.dll(不用多说了)
Pbaen70.tlb(PB自动应用服务类库入口)

------------------------------------------------
GUID如何做到唯一?
要确保一个标识是唯一的,仅有两个方法:
1。通过一些机构组织来登记;
2。使用特别的算法来产生唯一的数字,这些数字可被认为在世界范围内是唯一的。
   第一个方法很常见,比如身份证号码是国家制定的标识个人。它的问题是,制定这标识的机构组织自身存在执行偏差,而且手续繁琐,多数情况下你得花钱费时。

  第二个方法更适合于开发者。如果你可以发明一个算法,每次调用它都可以产生一个可被认为是唯一的名字,那么这个问题就解决了。
事实上,开发软件基金会(Open Software Foundation,OSF)已经研究出一种能产生唯一标识符的算法,产生全球唯一标识符(Universally Unique Identifier,UUID)。在COM的命名标准上,微软使用同样的算法!在COM中微软将它重命名为Globally Unique Identifier(GUID)。  
生成GUID的算法根据以下几个方面:1.当前日期和时间。2.网络适配器卡地址。3.时针序。4.自动递增计数器。其中,网卡地址是相互不同的,对没有网卡的机器,地址对使用中的机器保持唯一性。
GUID的记录通常采用16进制。不过这没有关系,一个典型的GUID类似为:"88AB240C-F761-49B8-B47F-94B0ABA4115A",略去"-",即为一个128位的唯一数字。2的128次方是一个非常大的数字。128位的接口标识符使得我们可能创建大约340282366920900000000000000000000000000个独立的接口,足够为将来10782897524560000000年每秒创建一万亿个接口。(晕!为什么不是我的存款)
这是个什么概念呢?就拿这几个数字中最小的“一万亿”来说。假如把银河系缩小一万亿倍,也就是把银河系直径缩小到一百万公里,这时太阳就变成一粒芝麻,那么最大的行星木星就变成了一粒灰尘。
即使地球毁灭了,它仍然是全球唯一。

通用类库和业务类库的设计思想:【上一篇】
PB下动态SQL语句的应用:【下一篇】
【相关文章】
  • Powerbuilder中怎样实现用代码配置ODBC
  • PowerBuilder修改数据库表结构的技巧
  • 在PB中调用外部函数
  • 在PowerBuilder中操作BLOB数据的技巧
  • PB中实现可监控的数据备份
  • 在PB中快速实现数据库树形结构
  • 利用PB实现动态系统用户登录
  • 在PB中用代码配置ODBC
  • PB6中怎样实现用代码配置ODBC
  • 再谈在Grid数据窗口中,鼠标调整数据宽度时对应的事件
  • 【随机文章】
  • 游戏开发
  • fvwm下的几个命令
  • DW中的标签(mxi)
  • 16口VLAN机架式交换机
  • 微软推出SQL 2005积累补丁
  • Linux启动性能分析工具
  • 用Php如何操作LDAP
  • Squid中的ACL(Access Control List)
  • 使用VB开发Windows环境下的串行通信程序
  • Asp.net中使用GDI+繪製圖形
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.