在VFP中创建唯一ID

4

我需要在VFP中根据邮寄信息(邮编、地址、姓氏、名字)创建唯一的记录ID。一旦创建完成,将使用这些唯一的ID加载关系表到SQL Server 7中。有什么建议吗?

3个回答

5
你可以使用GUID:FoxPro Wiki上的GUID条目。这里还有一些示例。最简单的一个使用WSH...
   * VFP 7+
   oGUID = CreateObject("scriptlet.typelib") 
   cGUID = Strextract(oGUID.GUID, "{", "}" )

   * Other VFP
   oGUID = CreateObject("scriptlet.typelib")
   cGUID = substr( oGUID.GUID, 2, 36 )

2
VFP支持唯一标识符,具体而言是通过主索引来实现的(可以基于多个字段,但请确保键长固定,因此如果您的VFP表使用varchars,则需要填充字段),并且一个表还可以有多个候选索引(其中索引字段必须是唯一的,就像主键一样)。
这两种方法都可以强制字段的唯一性,但是基于zip5、地址、姓和名生成主键将效率低下。建议使用GUID,或者如果您使用的是VFP8或更高版本,则可以使用自增列,它类似于SQL Server中的Identity列。
顺便提一下,唯一索引只是用于向后兼容的。

-1

我为此编写了自己的函数,以返回一个唯一标识符。当我有一个新记录时,我只需扫描数据库,并让该函数将数据库中唯一标识符字段(我的称之为UID)替换为一个新的uid,如果该记录没有一个uid。

FUNCTION UIDgenerator()
   LOCAL c_UID
   LOCAL c_dump

   c_UID = STRTRAN(SYS(2015),"_","") + [-]

   c_dump = STRTRAN(SYS(2015),"_","")
   c_dump = STRTRAN(SYS(2015),"_","")
   c_dump = STRTRAN(SYS(2015),"_","")

   c_UID = c_UID + STRTRAN(SYS(2015),"_","")


   RETURN c_UID

   endfunction() &&UIDGenerator

您不必执行 c_dump 3 次,但我希望标识符之间的距离更远一些。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接