Новости



Visual FoxPro 9 позволяет создавать ещё более производительные приложения баз данных.
Двадцатиление FoxPro! Microsoft принимает поздравления.
Visual FoxPro Toolkit for .NET - более 225 функций VFP 7.0, для языков .NET (подробнее)

Генератор символьного ключа.

* Рекомендуемое размещение кода в Edit Stored Procedures
* Для полей по которым необходимы уникальные ключи
* Default value (значение по умолчанию) пишем ключ("имя_ключа")

***************************************************************************
* Получение нового символьного 'Ключ_Значение' из 'Набор_Символов' *
* Автор : Дмитрий Александрович Тананаев г.Ставрополь *
* E-Mail: tananayev@mail.ru *
* Создана : 14/04/1998 *
* Модификация : 11/04/2001 *
* Ключ_Имя - Имя ключа - По умолчанию имя активной таблицы *
* Набор_Символов - Последовательность уникальных используемых символов *
***************************************************************************

Function Ключ(пКлюч_Имя)
#Define Таблица_Ключей "Ключи" && Имя таблицы ключей.
#Define Набор_Символов "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
* Определяем локальные переменные
Local Ключ_Имя,;
Ключ_Таблица,;
Ключ_Значение,;
Процесс,;
Алиаc,;
Область

* По умолчанию
Ключ_Имя = ALLT(UPPER(ALIAS()))
Ключ_Таблица=""

* Если указано пКлюч_Имя
If PARAMETERS() >0
Ключ_Имя = ALLT(UPPER(пКлюч_Имя))
Endif

* Запоминаем открытую область
Область = SELECT()
* Проверяем открыта ли "Ключевая" таблица
If sele(Таблица_Ключей)=0
* Если нет создаем
Select 0
База_Имя=DBC()
База_Путь = SUBSTR(База_Имя, 1, RAT("\", База_Имя))
Таблица_Ключей_Путь_Имя = База_Путь + Таблица_Ключей + ".DBF"
Create TABLE (Таблица_Ключей_Путь_Имя) ;
(Ключ C (20)PRIMARY KEY,;
ЗНАЧЕНИЕ C (10),;
Блокирован T,;
ПРИМЕЧАНИЕ M)

Endif
* Генерируем ключ
Sele Таблица_Ключей
Процесс = SET('REPROCESS')
Set REPROCESS TO AUTOMATIC
* Если нет строки с "Ключ_Имя", то создаем
If !SEEK(Ключ_Имя, Таблица_Ключей, "КЛЮЧ")
Local ARRAY НоваяЗапись(2)
НоваяЗапись(1)=Ключ_Имя

НоваяЗапись(2)=''
Append FROM ARRAY НоваяЗапись
If RLOCK()
Select (Область)
Select (Таблица_Ключей)
Unlock
Endif
Endif
* Если есть , то расчет ключа
If RLOCK()
Ключ_Значение=STRTRAN(ЗНАЧЕНИЕ,' ','0')

* Анализируем строку
For Ключ_Позиция=LEN(Ключ_Значение) TO 1 STEP -1
символ=SUBSTRC(Ключ_Значение,Ключ_Позиция,1)
* Если символ не максимальный
If символ<>RIGHT(Набор_Символов,1)
Ключ_Значение=STUFF(Ключ_Значение,Ключ_Позиция,1,SUBSTRC(Набор_Символов,ATC(символ,Набор_Символов)+1,1))

Exit
Else

Ключ_Значение=STUFF(Ключ_Значение,Ключ_Позиция,1,LEFT(Набор_Символов,1))
Endif
Endfor

Replace ЗНАЧЕНИЕ WITH Ключ_Значение
Unlock
Endif

* Возвращаем все в исходное состояние
Select (Область)
Set REPROCESS TO Процесс
Return Ключ_Значение
Endfunc



Новое на сайте

  • Обновлен портфель программиста

    Добавлены: Установка HTML Help (Создание справочной системы), Imagedit.zip - Графический редактор ( ico и bmp), Библиотека локализации HTML Help (Русский)
  • Новые примеры программ

    Установка библиотек, Игровая программа "Охота на лис", Установка библиотек "Охота на лис", plastic -"Платежки", Библиотеки (на FPD26), platan -"Платежки" (на Clipper 5.2)
  • Обновленна справка

    Подсказки, технология программирования и использование Visual FoxPro. Команды, функции, операторы, объекты, свойства, события и методы.