Мне нужно создать уникальный идентификатор записи в VFP на основе информации о рассылке: zip5, address, lastname, firstname. После создания реляционные таблицы будут загружены на SQL Server 7 с уникальными идентификаторами. Любые намеки?Создание уникальных идентификаторов в VFP
ответ
Вы можете использовать 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)
VFP имеет поддержку уникальных идентификаторов - в том, что она имеет Primary Indexes (который может быть основан на нескольких полях - но убедитесь, что длина ключа фиксируется, так если ваша таблица VFP использует varchars, вам нужно будет заполнить поля), а таблица также может иметь Candidate Indexes (где индексированные поля должны быть уникальными, как первичный ключ, но вы можете иметь несколько индексов кандидатов на таблицу).
Любой из них обеспечит уникальность в ваших полях, но создание первичного ключа на основе zip5, адреса, фамилии и имени будет неэффективным. Предложение GUID будет работать хорошо, или если у вас есть VFP8 или более поздняя версия, вы можете использовать Autoinc column, который аналогичен столбцу Identity в SQL Server.
Кстати, уникальные индексы only used for backward compatibility ..
Я создал свою собственную функцию для этой цели, чтобы вернуть уникальный идентификатор. Когда у меня есть новая запись, я просто просматриваю базу данных и заменяю ее уникальным полем идентификатора (я вызываю свой 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 раза, но я хотел, чтобы идентификаторы быть немного более дальше друг от друга.