Создавайте уникальные идентификаторы в VFP - PullRequest
4 голосов
/ 18 февраля 2009

Мне нужно создать уникальные идентификаторы записей в VFP на основе почтовой информации: zip5, адрес, фамилия, имя. После создания реляционные таблицы будут загружены в SQL Server 7 с уникальными идентификаторами. Любое предложение?

Ответы [ 3 ]

5 голосов
/ 18 февраля 2009

Вы можете использовать GUID: Запись GUID на FoxPro Wiki .

А вот несколько примеров .

Самый простой с использованием WSH ...

   * VFP 7+
   oGUID = CreateObject("scriptlet.typelib") 
   cGUID = Strextract(oGUID.GUID, "{", "}" )

   * Other VFP
   oGUID = CreateObject("scriptlet.typelib")
   cGUID = substr( oGUID.GUID, 2, 36 )
2 голосов
/ 19 февраля 2009

VFP поддерживает уникальные идентификаторы - в том числе Первичные индексы (которые могут быть основаны на нескольких полях), но убедитесь, что длина ключа фиксирована, поэтому, если ваша таблица VFP использует varchars, вы будете необходимо заполнить поля) и таблица также может иметь индексы кандидатов (где индексированные поля должны быть уникальными, как первичный ключ, но вы можете иметь несколько индексов кандидатов на таблицу).

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

Кстати, уникальные индексы используются только для обратной совместимости ..

0 голосов
/ 19 февраля 2012

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

...