我需要根据邮件信息在VFP中创建唯一的记录ID:zip5,address,lastname,firstname。创建后,关系表将在SQL Server 7中加载唯一ID。有什么建议吗?
答案 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次,但我希望标识符更加分开。