在VFP

2009-02-18 67 views
4

创建唯一的ID,我需要创造出独特的记录ID在VFP基础上邮寄资料:zip5,地址,姓氏,名字。一旦创建,关系表将被加载到具有唯一ID的SQL服务器7中。任何提示?在VFP

回答

4

您可以使用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) 
2

VFP确实有唯一ID的支持 - 因为它具有Primary Indexes(可根据多个字段 - 但要确保密钥的长度是固定的,所以如果你的VFP表使用VARCHAR处理则需要填充字段)和表也可以有Candidate Indexes(其中索引字段(S)必须是唯一的,就像一个主键,但你可以为每个表的多个候选索引)。

这些要么就会增强对自己领域的独特性,但基于zip5,地址生成主键,姓氏和名字将是低效的。 GUID的建议可以很好地工作,或者如果您有VFP8或更高版本,则可以使用Autoinc column,这与SQL Server中的Identity列类似。

顺便说一句,唯一索引only used for backward compatibility ..

-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次,但我希望标识符分得更远一些。