在VFP中创建唯一ID

时间:2009-02-18 18:52:44

标签: uniqueidentifier visual-foxpro foxpro

我需要根据邮件信息在VFP中创建唯一的记录ID:zip5,address,lastname,firstname。创建后,关系表将在SQL Server 7中加载唯一ID。有什么建议吗?

3 个答案:

答案 0 :(得分:5)

您可以使用GUID:GUID entry at FoxPro Wiki

这里有一些examples

最简单的使用WSH ...

   * VFP 7+
   oGUID = CreateObject("scriptlet.typelib") 
   cGUID = Strextract(oGUID.GUID, "{", "}" )

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

答案 1 :(得分:2)

VFP确实支持唯一ID - 因为它有Primary Indexes(可以基于多个字段 - 但要确保密钥长度是固定的,因此如果您的VFP表使用varchars,则需要填充字段)和一个表也可以有Candidate Indexes(索引字段必须是唯一的,就像主键一样,但每个表可以有多个候选索引)。

其中任何一个都会在您的字段中强制执行唯一性,但基于zip5,address,lastname和firstname生成主键将效率低下。 GUID的建议可以很好地工作,或者如果你有VFP8或更高版本,你可以使用Autoinc column,这类似于SQL Server中的Identity列。

顺便提一下,唯一索引是only used for backward compatibility ..

答案 2 :(得分:-1)

我为此创建了自己的函数来返回唯一标识符。当我有一个新记录时,我只是扫描数据库,并且如果记录没有,则使用新的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次,但我希望标识符更加分开。