2009-02-18 2 views
4

Мне нужно создать уникальный идентификатор записи в VFP на основе информации о рассылке: zip5, address, lastname, firstname. После создания реляционные таблицы будут загружены на SQL Server 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 имеет поддержку уникальных идентификаторов - в том, что она имеет Primary Indexes (который может быть основан на нескольких полях - но убедитесь, что длина ключа фиксируется, так если ваша таблица VFP использует varchars, вам нужно будет заполнить поля), а таблица также может иметь Candidate Indexes (где индексированные поля должны быть уникальными, как первичный ключ, но вы можете иметь несколько индексов кандидатов на таблицу).

Любой из них обеспечит уникальность в ваших полях, но создание первичного ключа на основе zip5, адреса, фамилии и имени будет неэффективным. Предложение GUID будет работать хорошо, или если у вас есть VFP8 или более поздняя версия, вы можете использовать Autoinc column, который аналогичен столбцу Identity в SQL Server.

Кстати, уникальные индексы 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 раза, но я хотел, чтобы идентификаторы быть немного более дальше друг от друга.