Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / процедура для уникального идентификатора поля / 7 сообщений из 7, страница 1 из 1
12.05.2005, 17:44
    #33060602
alex_dch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура для уникального идентификатора поля
люди, подскажите плиз как сделать...

база данных Парус 7, во всех таблицах уникальные идентификаторы называются как правило RN и создаются как 4-х значные текстовые поля
из чисел и латинских букв в разных регистрах.

как-то давно пытался расковырять исходник, но что-то не получилось, а
сейчас вот решил поробовать написать собственную функцию.

видимо нужно чтоб она искала максимальный RN и добавляла по какой-то схеме что-то к нему. +1 понятное дело не прокатит, что-то тормознулся в общем.

select max(rn) from &table_podst


максимальное значение видимо вот так.
хочется написать универсальную функцию, чтоб название таблицы передавалось как параметр и поэтому использую макроподстановку.

а еще подскажите как присвоить переменной результат запроса?
где-то видел, но не помню как.
...
Рейтинг: 0 / 0
13.05.2005, 03:06
    #33061124
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура для уникального идентификатора поля
Hi alex_dch!

Нормальные схемы НЕ используют SELECT MAX(...) - они хранят в специальной системной табличке "последний использованный" код, и в процедуре блокируют эту табличку (или нужную запись в ней), наращивают код, разблокируют и возвращают.
ПОИСК по NewID тут и на forum.foxclub.ru (на забывая про тамошний архивный раздел) откроют глаза.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
13.05.2005, 08:52
    #33061225
Grumax_user
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура для уникального идентификатора поля
------------------------------------------------------------------------------------
Код: plaintext
Я во все дела суюсь -> всесторонне разовьюсь  Парус-Предприятие 7.62                                      Visual FoxPro 8.0
Добро пожаловать в наши ряды alex_dch. Я это дело уже год лопачу.
В каждой таблице, как ты уже упомянул есть уникальный индификатор RN C(4). У них есть свободная таблица Tables.dbf, которая лежит где и Parus.dbc.
Структура Tables.dbf(основные поля):
File_name - имена таблиц БД
Name - пояснение
Gen_id - последний уникальный ключ в таблице
RnFile_nameNameGen_id...0001TABLESТаблицы0000...0002UNITSРазделы00J2...0003ACATALOGКаталоги00yb...
Фрагмент проги:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
m.clRn_sfospec=p_form_rn("Sfospec") && clRn_sfospec - новый уникальный ключ. В функцию p_form_rn передаем название таблицы

FUNCTION p_form_rn
LPARAMETER tcTable

LOCAL lcNewrn, lnI, lnPopitka
STORE "" TO m.lcNewrn
m.lnPopitka= 200 
IF !USED("Tables")
	USE Tables IN  0  AGAIN ALIAS Tables 
*!*	SET ORDER TO FILE_NAME   && UPPER(FILE_NAME) 
ENDIF
IF SEEK(PADR(UPPER(tcTable),  8 ), "Tables", "FILE_NAME")
	lnI =  1 
	DO WHILE .T.
		IF RLOCK("Tables")
			m.lcNewrn = p_New_rn(Tables.Gen_id) && берем последний ключ и формируем новый
			REPLACE Tables.Gen_id WITH m.lcNewrn IN Tables
			UNLOCK IN Tables
			EXIT
		ENDIF
		IF lnPopitka> 0 
			lnI = lnI+ 1 
			IF lnI>lnPopitka
				EXIT
			ENDIF
		ENDIF
	ENDDO
ENDIF

RETURN lcNewrn
ENDFUNC 
*!* суть функции p_New_rn состоит в том, чтобы перевести последнее уникальное значение "0Rtv"
*!* в десятичный вид, прибавить  1 , а потом вернуть опять в  62 -ричный ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"). 
...
Рейтинг: 0 / 0
13.05.2005, 12:48
    #33062012
Yura .
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура для уникального идентификатора поля
http://www.parus.ru/index.php?page=100&mode=thread&sub=22826

Можно еще поискать по парусячьему форуму.
...
Рейтинг: 0 / 0
13.05.2005, 14:05
    #33062358
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура для уникального идентификатора поля
To: Grumax_user

Если Вы хотите отредактировать - опубликуйте исправленный вариант и попросите заменить его у модератора...

Good luck!
...
Рейтинг: 0 / 0
13.05.2005, 14:42
    #33062517
Grumax_user
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура для уникального идентификатора поля
To: Sergey Ch
Поимеем в виду, но это ИМХО геморойно для Вас...

------------------------------------------------------------------------------------
Код: plaintext
Я во все дела суюсь -> всесторонне разовьюсь                                                         Visual FoxPro 8.0
...
Рейтинг: 0 / 0
13.05.2005, 15:35
    #33062707
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
процедура для уникального идентификатора поля
Grumax_userTo: Sergey Ch
Поимеем в виду, но это ИМХО геморойно для Вас...

Согласен...

Но как говорят иностранцы - "ну что я могу сделать - это не в моей власти"....
Лично я на других форумах просто печатаю исправленный вариант и пишу, что мое сообщение от такой-то даты считать устаревшим...

But anyway, good luck!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / процедура для уникального идентификатора поля / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]