郵送情報(zip5、住所、姓、名)に基づいてVFPで一意のレコードIDを作成する必要があります。作成されると、リレーショナルテーブルは一意のIDでSQLServer7に読み込まれます。何か提案はありますか?
3 に答える
FoxPro Wikiの GUID: GUID エントリを使用できます。
そして、ここにいくつかの例があります。
WSHを使用する最も簡単なもの...
* VFP 7+
oGUID = CreateObject("scriptlet.typelib")
cGUID = Strextract(oGUID.GUID, "{", "}" )
* Other VFP
oGUID = CreateObject("scriptlet.typelib")
cGUID = substr( oGUID.GUID, 2, 36 )
VFPは一意のIDをサポートしています-プライマリインデックス(複数のフィールドに基づくことができます-ただし、キーの長さが固定されていることを確認してください。したがって、VFPテーブルでvarcharsを使用する場合は、フィールドを埋める必要があります)とテーブルがあります。候補インデックスを持つこともできます(インデックスフィールドは主キーのように一意である必要がありますが、テーブルごとに複数の候補インデックスを持つことができます)。
これらのいずれかにより、フィールドに一意性が適用されますが、zip5、address、lastname、およびfirstnameに基づいて主キーを生成するのは非効率的です。GUIDの提案はうまく機能します。または、VFP8以降を使用している場合は、 SQLServerのID列に類似したAutoinc列を使用できます。
ちなみに、一意のインデックスは下位互換性のためにのみ使用されます。
そのために、一意の識別子を返す独自の関数を作成しました。新しいレコードがあるときは、データベースをスキャンして、データベース内の一意の識別子フィールド (私は自分の 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 回実行する必要はありませんが、識別子をもう少し離したかったのです。