* Рекомендуемое размещение кода в 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. Команды, функции, операторы, объекты, свойства, события и методы.