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

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

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

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

select max(rn) from &table_podst


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

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

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

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
процедура для уникального идентификатора поля
    #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
процедура для уникального идентификатора поля
    #33062012
Yura .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.parus.ru/index.php?page=100&mode=thread&sub=22826

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

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

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

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

Согласен...

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

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


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